Eliminar el contorno del cuadro de selección en FF


97

¿Es posible eliminar la línea de puntos que rodea un elemento seleccionado en un elemento seleccionado?

texto alternativo

Intenté agregar la outlinepropiedad en CSS pero no funcionó, al menos no en FF.

<style>
   select { outline:none; }
</style>

Actualización
Antes de continuar y eliminar el esquema, lea esto.
http://www.outlinenone.com/


Hace tres meses, busqué lo mismo pero con un botón de radio. Más de cinco o seis soluciones diferentes que encontré, nada funcionó. Entonces sospecho que no puedes hacer eso. Espero estar equivocado
Arseni Mourzenko

Me temo que ese es el hecho también, pero aún espero que se demuestre que está equivocado: D
Martin

¿De verdad hay seres humanos trabajando en mozilla que piensan que esa estúpida línea de puntos se ve bien? ¿Por qué es esto algo que tenemos que eliminar?
billynoah

Respuestas:


74

Encontré una solución, pero es la madre de todos los trucos, con suerte servirá como punto de partida para otras soluciones más sólidas. La desventaja (demasiado grande en mi opinión) es que cualquier navegador que no admita text-shadowpero admita rgba(IE 9) no procesará el texto a menos que use una biblioteca como Modernizr (no probada, solo una teoría).

Firefox usa el color del texto para determinar el color del borde punteado. Así que di que si lo haces ...

select {
  color: rgba(0,0,0,0);
}

Firefox hará que el borde punteado sea transparente. ¡Pero, por supuesto, su texto también será transparente! Entonces, de alguna manera debemos mostrar el texto. text-shadowviene al rescate:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Ponemos una sombra de texto sin desplazamiento y sin desenfoque, para que reemplace el texto. Por supuesto, los navegadores más antiguos no entienden nada de esto, por lo que debemos proporcionar una alternativa para el color:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Aquí es cuando entra en juego IE9: admite rgbapero no text-shadow, por lo que obtendrá un cuadro de selección aparentemente vacío. Obtén tu versión de Modernizr con text-shadowdetección y haz ...

.no-textshadow select {
  color: #000;
}

Disfrutar.


Gracias amigo, lo intentaré pronto :)
Martin

La única solución que realmente funciona (usando FF 20). ¡Felicidades!
Gilberto Torrezan

4
Esto debería ocuparse de cada FF y solo FF:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen

¿Afectará el CSS en Chrome y otros navegadores?
Dadhich Sourav

165

Bueno, la respuesta de Duopixel es simplemente perfecta. Si damos un paso más, podemos hacerlo a prueba de balas.

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

Ahí lo tienes, solo es válido para Firefox y el feo contorno de puntos alrededor de la opción seleccionada ha desaparecido.


1
Curiosamente, esta solución no es tan a prueba de balas como la respuesta de Duopixel. Si usa un efecto de transición con su cuadro de selección (es decir, -moz-transición), el cuadro de puntos aparecerá durante la transición y luego desaparecerá. Entonces, es decir, si especifica '-moz-transition: all 0.5s easy;', verá el cuadro combinado durante medio segundo con esta solución, mientras que no lo verá en absoluto con la respuesta de Duopixel. Puede solucionar esto configurando todo el elemento de selección para que tenga un atributo de color transparente, pero luego no verá ningún texto cuando el cuadro no tenga el foco.
Jon

1
Editar: lo anterior debería decir, "... verá el cuadro punteado durante medio segundo con esta solución ...". Ya no puedo editar el comentario. De todos modos, el 'color: rgba (0,0,0,0);' la propiedad es lo que corrige la transición, y debe estar en el elemento de selección; '-moz-focusring' no sirve. También es interesante que, por alguna razón, no tengo ningún problema en IE9 y Chrome con la solución de Duopixel, por lo que las cosas al final de las que estaba hablando con Modernizr eran completamente innecesarias para mí.
Jon

Por supuesto, aparecerá si especifica una transición. Usar alldentro de las transiciones es como disparar con una ametralladora Gatling sobre una mosca.
Fleshgrinder

1
Esta o la solución de Duopixel no funciona en FF 33.0.3 en Mac Mavericks. En lugar de un contorno punteado, hay un contorno borroso azul.
Timo Kähkönen

1
esto rompe los estilos del navegador en las opciones deshabilitadas: una vez que la selección está enfocada, se vuelven negros en lugar del texto en gris que deberían ser.
billynoah

19

Aquí hay una colaboración de soluciones para solucionar problemas de estilo con los cuadros de selección de Firefox. Utilice este selector de CSS como parte de su restablecimiento de CSS habitual.

La clase elimina el esquema según la pregunta, pero también elimina cualquier imagen de fondo (ya que normalmente uso una flecha desplegable personalizada y la flecha desplegable del sistema Firefoxes no se puede eliminar actualmente). Si usa la imagen de fondo para cualquier otra cosa que no sea la imagen desplegable, simplemente elimine la líneabackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}

¿Hay alguna forma de definir el color del texto de la opción usando este método?
user1063287

En realidad, puede eliminar las flechas de Firefox utilizadas en el fondo SELECT, configurando la propiedad específica del proveedor -moz-appearanceen none.
Emanuele Del Grande

Otras respuestas carecen del select::-moz-focus-innerselector importante , lo que las hace menos efectivas. Es por eso que este recibe mi ⬆.
Dave Land

select:-moz-focusringjunto con color: transparenty text-shadow: 0 0 0 #000eliminó el borde molesto en el enfoque en Firefox v63
Jason Moore

Nota: url-prefix (). fxsitecompat.dev/en-CA/docs/2018/… Al leer los enlaces, no me queda claro si lo van a eliminar gradualmente o no. Pero tenga en cuenta.
user3342816

9

Esto apuntará a todas las versiones de Firefox

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

Es posible que desee eliminar el! Important, si planea que el esquema aparezca en otras páginas de su sitio que usan la misma hoja de estilo.


1
Esta debería ser la respuesta seleccionada
brandonscript

9

En general, los controles de formulario son imposibles de diseñar con ese grado de precisión. No hay ningún navegador que yo sepa que admita un rango sensible de propiedades en todos los controles. Esa es la razón por la que hay un trillón de bibliotecas de JavaScript que "falsifican" los controles de formulario con imágenes y otros elementos HTML y emulan su funcionalidad original con código:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...


Gracias, supongo que tengo que "hacer mi propia" lista de selección para lograr esto. Lástima que los controles de formulario no sean más uniformes en todos los navegadores.
Martin

1
@Martin: esto no es nada comparado con la inflexibilidad de un control de carga de archivos, que no se puede diseñar en absoluto en la mayoría de los navegadores. ;)
Arseni Mourzenko

3

<select onchange="this.blur();">

Si usa esto, el borde permanece hasta que seleccione un elemento de la lista.


2
Desafortunadamente, esta solución no respeta las pautas de accesibilidad y usabilidad. Además de las interfaces TTS para usuarios ciegos, no permite la navegación por teclado. Los elementos enfocados deben verse diferentes a los demás, el problema con la pregunta actual es que Firefox no te permite decidir cómo.
Emanuele Del Grande

1

Prueba uno de estos:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

Referencia


6
Gracias por el esfuerzo, pero desafortunadamente no funcionó. Tal vez funcione en un aelemento, pero no funcionó en un selectelemento.
Martin

1

Aquí viene la solución

:focus {outline:none;}
::-moz-focus-inner {border:0;}

1
Probado. No funciona. Firefox reconoce esta propiedad pero no parece hacer nada. Intenté configurarlo 10px solid redy no puedo encontrar dónde aparece.
mpen

Esto realmente funcionó para mí cuando todas las demás respuestas con mayor votación no lo hicieron.
Tashows

0

Elimina el contorno / borde punteado de todas las etiquetas seleccionables de Firefox.

Pon esta línea de código en tu hoja de estilo:

*:focus{outline:none !important;}   


-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

trabajando 100%


-4

Esto eliminará el foco del selectelemento y el contorno :

$("select").click(function(){
    $(this).blur();
});

Aunque esto no está exento de deficiencias en otros navegadores. Querrá verificar el navegador que está usando el usuario:

if (FIREFOX) {
    //implement the code
}

Explique qué hace su fragmento de código además de proporcionar el fragmento de código.
sayan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.