Para las anclas que actúan como botones (por ejemplo, Preguntas , Etiquetas , Usuarios , etc. en la parte superior de la página de Desbordamiento de pila) o hay pestañas, ¿hay alguna forma estándar de CSS para deshabilitar el efecto de resaltado si el usuario selecciona accidentalmente el texto?
Me doy cuenta de que esto se puede hacer con JavaScript, y un poco de google produjo la -moz-user-select
opción de solo Mozilla .
¿Existe una manera que cumpla con los estándares para lograr esto con CSS, y si no, cuál es el enfoque de "mejor práctica"?
css
cross-browser
highlight
textselection
Peter Mortensen
fuente
fuente
::selection { background: transparent; } ::-moz-selection { background: transparent; }
postcss
yautoprefixer
y juego de la versión del navegador, a continuación,postcss
hacer que todo fresco.Respuestas:
ACTUALIZACIÓN enero de 2017:
Según Can I use ,
user-select
actualmente es compatible con todos los navegadores, excepto Internet Explorer 9 y versiones anteriores (pero lamentablemente aún necesita un prefijo de proveedor).Todas las variaciones correctas de CSS son:
Tenga
user-select
en cuenta que está en proceso de estandarización (actualmente en un borrador de trabajo del W3C ). No se garantiza que funcione en todas partes, y puede haber diferencias en la implementación entre los navegadores y en el futuro los navegadores pueden dejar de admitirlo.Se puede encontrar más información en la documentación de Mozilla Developer Network .
fuente
<div onselectstart="return false;">
a mi div principal.standard-user-select
. entonces no tendremos estos problemas. aunque para la compatibilidad con versiones anteriores también deberíamos incluir a los demás. así que ahora se convierte el código-webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; standard-user-select: none;
. ah, mucho mejor.En la mayoría de los navegadores, esto se puede lograr utilizando variaciones propietarias en la
user-select
propiedad CSS , originalmente propuesta y luego abandonada en CSS 3 y ahora propuesta en CSS UI Nivel 4 :Para Internet Explorer <10 y Opera <15, deberá usar el
unselectable
atributo del elemento que desea que no se pueda seleccionar. Puede configurar esto usando un atributo en HTML:Lamentablemente, esta propiedad no se hereda, lo que significa que debe colocar un atributo en la etiqueta de inicio de cada elemento dentro del
<div>
. Si esto es un problema, podría usar JavaScript para hacer esto de forma recursiva para los descendientes de un elemento:Actualización 30 de abril de 2014 : este recorrido del árbol debe volver a ejecutarse cada vez que se agrega un nuevo elemento al árbol, pero según un comentario de @Han es posible evitar esto agregando un
mousedown
controlador de eventos que se estableceunselectable
en el objetivo del evento. Ver http://jsbin.com/yagekiji/1 para más detalles.Esto todavía no cubre todas las posibilidades. Si bien es imposible iniciar selecciones en elementos no seleccionables, en algunos navegadores (Internet Explorer y Firefox, por ejemplo) todavía es imposible evitar selecciones que comienzan antes y terminan después del elemento no seleccionable sin hacer que todo el documento sea no seleccionable.
fuente
*.foo
y.foo
son exactamente equivalentes (en el segundo caso, el selector universal (*
) está implícito), por lo que, salvo las peculiaridades del navegador, no puedo ver que*
eso perjudique actuación. Es un hábito mío desde hace mucho tiempo incluir el*
, lo que originalmente comencé a hacer para facilitar la lectura: establece explícitamente a simple vista que el autor tiene la intención de unir todos los elementos.Una solución de JavaScript para Internet Explorer es:
fuente
ondragstart
!body.onselectstart = function(e) { if (e.target.nodeName != "INPUT" && e.target.nodeName != "TEXTAREA") { e.preventDefault(); return false; } return true; }
input
elementos, incluso si lo usouser-select: none
. necesito saber cómo prevenir estoHasta que la propiedad de selección de usuario de CSS 3 esté disponible, los navegadores basados en Gecko admiten la
-moz-user-select
propiedad que ya encontró. Los navegadores WebKit y Blink admiten la-webkit-user-select
propiedad.Por supuesto, esto no es compatible con los navegadores que no utilizan el motor de renderizado Gecko.
No hay una forma rápida y fácil de cumplir con los "estándares"; Usar JavaScript es una opción.
La verdadera pregunta es, ¿por qué desea que los usuarios no puedan resaltar y presumiblemente copiar y pegar ciertos elementos? No he encontrado una sola vez que no quisiera permitir que los usuarios resalten una cierta parte de mi sitio web. Varios de mis amigos, después de pasar muchas horas leyendo y escribiendo códigos, usarán la función de resaltado como una forma de recordar en qué parte de la página se encontraban, o proporcionarán un marcador para que sus ojos sepan dónde mirar a continuación.
El único lugar donde podría ver que esto es útil es si tiene botones para formularios que no deben copiarse y pegarse si un usuario copia y pega el sitio web.
fuente
Si desea deshabilitar la selección de texto en todo excepto en los
<p>
elementos, puede hacerlo en CSS (tenga cuidado con lo-moz-none
que permite la anulación en subelementos, que está permitido en otros navegadores connone
):fuente
p, input { -webkit-user-select: text; -khtml-user-select: text; -moz-user-select: text; -o-user-select: text; user-select: text; }
-moz-none
ynone
son lo mismo.ul>* { -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: -moz-none; -o-user-select: none; user-select: none; }
[selecciona todo en una lista desordenada y hace que no se pueda seleccionar, en lugar de destruir todo el árbol de la vista.] Gracias por la lección. Mi lista de botones se ve muy bien y responde correctamente al tocar y presionar la pantalla, en lugar de iniciar un IME (widgets del portapapeles de Android).En las soluciones de las respuestas anteriores, la selección se detiene, pero el usuario todavía cree que puede seleccionar texto porque el cursor todavía cambia. Para mantenerlo estático, deberá configurar su cursor CSS:
Esto hará que su texto sea totalmente plano, como si estuviera en una aplicación de escritorio.
fuente
user-select: none;
, pensando que el estándar ya se habría adoptado, pero lamentablemente no lo ha hecho. Hace que te preguntes qué podrían estar debatiendo las personas del comité de normas. "No, muchachos ... realmente creo que debería seruser-select: cant;
porque es más descriptivo, ¿sabes?" "Hemos superado esto, Mike. Tendríamos que omitir el apóstrofe, ¡y esa es una mala forma!" "¡Suficiente, todos! Vamos a deliberar sobre este asunto nuevamente el próximo mes. ¡Se clausuró la reunión del Comité de Normas!"Puedes hacerlo en Firefox y Safari (¿Chrome también?)
fuente
Solución alternativa para WebKit :
Lo encontré en un ejemplo de CardFlip.
fuente
transparent
en lugar de rgba también funciona en Chrome 42 en Android.Me gusta la solución híbrida CSS + jQuery.
Para hacer que todos los elementos dentro
<div class="draggable"></div>
no sean seleccionables, use este CSS:Y luego, si está usando jQuery, agregue esto dentro de un
$(document).ready()
bloque:Supongo que todavía desea que los elementos de entrada sean interactivos, de ahí el
:not()
pseudo-selector. Podrías usar'*'
lugar, si no le importa.Advertencia: es posible que Internet Explorer 9 no necesite esta pieza adicional de jQuery, por lo que es posible que desee agregar una verificación de versión allí.
fuente
-moz-user-select: Normal;
jQuery.browser
ha quedado en desuso a partir de la versión 1.3 y se ha eliminado en la versión 1.9 - api.jquery.com/jQuery.browserSin embargo, no es la mejor manera.
fuente
title
como el atributo.user-select
no funciona.Puede usar CSS o JavaScript para eso.
El JavaScript manera se apoya en más viejos navegadores, como viejas versiones de Internet Explorer, así, pero si no es su caso, utilice el modo CSS a continuación:
HTML / JavaScript:
HTML / CSS:
fuente
Para Internet Explorer, además, debe agregar pseudo clase
focus
(.ClassName: focus) youtline-style: none
.fuente
className
clase. Ver este JSBin .Intente insertar estas filas en el CSS y llame al "disHighlight" en la propiedad de clase:
fuente
Una actualización rápida de pirateo
Si usa el valor
none
para todas lasuser-select
propiedades CSS (incluidos los prefijos del navegador), existe un problema que aún puede ocurrir.Como dice CSS-Tricks , el problema es:
WebKit aún permite copiar el texto, si selecciona elementos a su alrededor.
También puede usar el siguiente para seleccionar
enforce
un elemento completo, lo que significa que si hace clic en un elemento, se seleccionará todo el texto envuelto en ese elemento. Para esto, todo lo que tiene que hacer es cambiar el valornone
aall
.fuente
Para aquellos que tienen problemas para lograr lo mismo en el navegador de Android con el evento táctil, use:
fuente
Si está utilizando Less y Bootstrap , podría escribir:
fuente
fuente
Trabajando
CSS:
Esto debería funcionar, pero no funcionará para los navegadores antiguos. Hay un problema de compatibilidad del navegador.
fuente
This is because through our site compatibility work, we have experienced that many authors of (especially mobile) sites only use -webkit- prefixed CSS, thereby ignoring other vendor prefixes and not even including an unprefixed equivalent. This leads to a reduced user experience on Opera and Firefox, which don’t receive the same shiny effects such as transitions, gradients and the like, even if the browser supported those effects.
Con SASS (sintaxis SCSS)
Puedes hacer esto con un mixin :
En una etiqueta HTML:
Pruébalo en este CodePen .
Si está utilizando un corrector automático , puede eliminar otros prefijos.
Compatibilidad del navegador aquí .
fuente
Aparte de la propiedad exclusiva de Mozilla, no, no hay forma de deshabilitar la selección de texto con solo CSS estándar (a partir de ahora).
Si observa que el desbordamiento de pila no deshabilita la selección de texto para sus botones de navegación, y recomendaría no hacerlo en la mayoría de los casos, ya que modifica el comportamiento de selección normal y hace que entre en conflicto con las expectativas del usuario.
fuente
Esto funciona en algunos navegadores:
Simplemente agregue los elementos / identificadores deseados frente a los selectores separados por comas sin espacios, de esta manera:
Las otras respuestas son mejores; Esto probablemente debería verse como un último recurso / catchall.
fuente
Supongamos que hay dos
div
s como este:Establezca el cursor en predeterminado para que le dé una sensación no seleccionable al usuario.
fuente
Esto será útil si la selección de color tampoco es necesaria:
... todas las otras correcciones del navegador. Funcionará en Internet Explorer 9 o posterior.
fuente
color: inherit;
tal vez.Agregue esto al primer div en el que desea deshabilitar la selección de texto:
fuente
NOTA:
La respuesta correcta es correcta porque le impide poder seleccionar el texto. Sin embargo, no impide que pueda copiar el texto, como lo mostraré con las siguientes capturas de pantalla (a partir del 7 de noviembre de 2014).
Como puede ver, no pudimos seleccionar los números, pero pudimos copiarlos.
Probado en: Ubuntu , Google Chrome 38.0.2125.111.
fuente
Para obtener el resultado que necesitaba, descubrí que tenía que usar ambos
::selection
yuser-select
fuente
Se hace fácilmente con:
Alternativamente:
Digamos que tienes un
<h1 id="example">Hello, World!</h1>
. Tendrás que eliminar el innerHTML de esoh1
, en este caso Hello, World . Luego tendrás que ir a CSS y hacer esto:Ahora simplemente piensa que es un elemento de bloque y no un texto.
fuente
Esto no es CSS, pero vale la pena mencionarlo:
jQuery UI Desactivar selección :
fuente
Comprueba mi solución sin JavaScript:
jsFiddle
Menú emergente con mi técnica aplicada: http://jsfiddle.net/y4Lac/2/
fuente
Aunque este pseudo-elemento estaba en los borradores del Selector CSS Nivel 3, se eliminó durante la fase de Recomendación del candidato, ya que parecía que su comportamiento estaba subespecificado, especialmente con elementos anidados, y no se logró la interoperabilidad.
Se discute en Cómo :: selección funciona en elementos anidados .
A pesar de que se está implementando en los navegadores, puede crear una ilusión de que el texto no se selecciona utilizando el mismo color y color de fondo en la selección que en el diseño de la pestaña (en su caso).
Diseño CSS normal
En la selección
No permitir que los usuarios seleccionen el texto generará problemas de usabilidad.
fuente