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/

Martín
fuente
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.

metodofaccion
fuente
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.

Molinillo de carne
fuente
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;
    }
}
Wayne Dunkley
fuente
¿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.

Kyzer
fuente
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/

...

Álvaro González
fuente
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.

malitta
fuente
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

Bagre
fuente
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;}
Faizan
fuente
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;}   
Hasnain Mehmood
fuente
0

Agregue estilo de borde: ninguno a su selección en CSS.

select {
border-style: none; }
Khwaja Abdul Ahad
fuente
-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

trabajando 100%

usuario2577904
fuente
-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
}
Moisés Dike Okore
fuente
Explique qué hace su fragmento de código además de proporcionar el fragmento de código.
sayan