2009-05-29 9 views
112

Aquí hay unas interesantes preguntas de CSS para ti.¿Hay alguna manera de hacer que un DIV no sea seleccionable?

Tengo un área de texto con un fondo transparente que sobrepone un TEXTO que me gustaría usar como una especie de marca de agua. El texto es grande y ocupa la mayoría del área de texto. Se ve bien, el problema es que cuando el usuario hace clic en el área de texto, a veces selecciona el texto de la marca de agua. Quiero que el texto de la marca de agua nunca sea seleccionable. Esperaba que si algo bajaba en el índice Z no fuera seleccionable, pero los navegadores no parecen preocuparse por las capas del índice Z cuando seleccionan elementos. ¿Hay algún truco o forma de hacerlo así que este DIV nunca es seleccionable?

+0

¿Estaría contento con una solución de javascript? – joshcomley

Respuesta

8

puede probar esto:

<div onselectstart="return false">your text</div> 
+0

Todavía es posible seleccionar con doble clic. – ceving

5

No sería una imagen de fondo simple para el área de texto es suficiente?

+0

transparente 1x1 png debería funcionar, sí –

+1

Bueno, prefiero decir la marca de agua, pero una imagen de fondo transparente podría funcionar también. Además, no debe colocar mosaicos de imágenes muy pequeñas, ya que algunos navegadores se vuelven extremadamente lentos en ese caso :) – Joey

+0

Especialmente porque un png (o gif) transparente de 1000x1000 es solo de 4kb. –

153

Escribí una extensión jQuery simple para deshabilitar la selección hace algún tiempo: Disabling Selection in jQuery. Puede invocar a través de $('.button').disableSelection();

Como alternativa, el uso de CSS (cross-browser):

.button { 
     user-select: none; 
     -moz-user-select: none; 
     -khtml-user-select: none; 
     -webkit-user-select: none; 
     -o-user-select: none; 
} 
+0

funciona muy bien! user-select no es válido css embargo. –

+0

@kasperTaeymans gracias por señalar eso. actualizado el fragmento. – aleemb

+0

Muchas gracias ... funcionó muy bien. – YAM

22

Como Johannes ya se ha sugerido, una imagen de fondo es problablemente la mejor manera de lograr esto en CSS solo.

Una solución de JavaScript también tendría que afectar a "dragstart" para que sea efectiva en todos los navegadores populares.

JavaScript:

<div onselectstart="return false;" ondragstart="return false;">your text</div> 

jQuery:

var _preventDefault = function(evt) { evt.preventDefault(); }; 
$("div").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); 

Rich

+0

'onselectstart' no funcionará para FF u Opera. –

3

navegadores WebKit (es decir, Google Chrome y Safari) tienen una solución CSS similar a -moz-user-select de Mozilla: ninguno

.no-select{  
    -webkit-user-select: none; 
    cursor:not-allowed; /*makes it even more obvious*/ 
} 
55

El siguiente código CSS funciona casi navegador moderno:

.unselectable { 
    -moz-user-select: -moz-none; 
    -khtml-user-select: none; 
    -webkit-user-select: none; 
    -o-user-select: none; 
    user-select: none; 
} 

Para IE, debe utilizar JS o insertar atributo de etiqueta html.

<div id="foo" unselectable="on" class="unselectable">...</div> 
+0

¿Cuál es el propósito de 'unselectable =" on "'. ¿Puede dar una referencia por favor – Medorator

+3

que encontré aquí: http://msdn.microsoft.com/en-us/library/hh801966(v=vs.85).aspx Pero en realidad probé en IE, y funciona correctamente. – KimKha

+1

Esto no es válido HTML –

2

También en IOS si usted quiere deshacerse de superposiciones semitransparentes grises que aparecen ontouch, añadir CSS:

-webkit-tap-highlight-color: rgba(0,0,0,0); 
-webkit-touch-callout: none; 
+0

No está funcionando amigo. –

30

Sólo la actualización respuesta original, tanto upvoted-de aleemb con un par de adiciones a el css.

que hemos estado usando la siguiente combinación:

.unselectable { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    -o-user-select: none; 
    user-select: none; 
} 

Tenemos la sugerencia para añadir la entrada webkit-touch desde:
http://phonegap-tips.com/articles/essential-phonegap-css-webkit-touch-callout.html

2015 Abr: Sólo la actualización mi propia respuesta con una variación que puede ser útil.Si necesita hacer el seleccionable DIV/no seleccionable sobre la marcha y está dispuesto a utilizar Modernizr, las siguientes obras de forma ordenada en javascript:

var userSelectProp = Modernizr.prefixed('userSelect'); 
    var specialDiv = document.querySelector('#specialDiv'); 
    specialDiv.style[userSelectProp] = 'none'; 
+0

Funciona muy bien, gracias. – kwoxer

+1

También agrego 'pointer-events: none' a todo el asunto. – Kokodoko

+0

aplicando 'user-select: none' a un' div' no tiene ningún efecto en absoluto. Estoy bastante seguro de que 'user-select' es sólo para texto. ¿Hay alguna otra forma de hacer que un 'div 'sea no seleccionable? – Anthony

4

Puede utilizar pointer-events: none; en su CSS

div { 
    pointer-events: none; 
} 
0

Uso

onselectstart = "return false"

previene la copia de su contenido.

+3

Esta solución ha sido publicada por otros. – dazedconfused

0

Asegúrese de establecer la posición explícitamente como absoluta o relativa para que z-index funcione para la selección. Tuve un problema similar y esto lo resolvió para mí.

0

No estoy seguro de su caso de uso, pero podría hacerlo arrastrable.

Cuestiones relacionadas