2010-09-22 20 views
75

¿Es posible eliminar la línea punteada que rodea un elemento seleccionado en un elemento seleccionado?Eliminar el contorno del cuadro de selección en FF

alt text

He intentado añadir la propiedad outline en CSS, pero no funcionó, al menos no en FF.

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

actualización
Antes de seguir adelante y quitar el contorno, por favor leer esto.
http://www.outlinenone.com/

+0

tres meses, he buscado por la misma cosa pero con un botón de radio. Más de cinco o seis soluciones diferentes que he encontrado, nada funcionó. Entonces sospecho que no puedes hacer eso. Espero estar equivocado –

+0

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

+0

¿Hay realmente seres humanos trabajando en Mozilla que piensen que la línea de puntos estúpida se ve bien? ¿Por qué es esto incluso algo que tenemos que eliminar? – billynoah

Respuesta

62

Encontré una solución, pero es la madre de todos los hacks, con suerte servirá como punto de partida para otras soluciones más robustas. La desventaja (demasiado grande en mi opinión) es que cualquier navegador que no admite text-shadow pero admite 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. Entonces diga si lo hace ...

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

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

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

ponemos una sombra de texto sin offset y ninguna falta de definición, por lo que sustituye el texto. Por supuesto navegador más antiguo no entiendo nada de esto, por lo que debe proporcionar una reserva para el color:

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

Esto es cuando entra en juego IE9: apoya rgba pero no sombra de texto, por lo que obtendrá un cuadro de selección aparentemente vacío. Obtenga su versión de Modernizr con text-shadow detección y hacer ...

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

disfrutar.

+0

Gracias amigo, voy a intentarlo pronto :) – Martin

+0

La única solución que realmente funciona (usando FF 20). ¡Felicitaciones! –

+1

Esto debe hacerse cargo de todos los FF y sólo FF: '@ -moz-documento url-prefix() { \t :: - moz-enfoque-interior {border: none} \t seleccione: -moz-focusring \t { \t \t color: transparente; \t \t text-shadow: 0px 0px 0px # 000; \t} } ' –

10

En general, los controles de formulario son imposibles de configurar con ese grado de precisión. No conozco ningún navegador que admita un rango razonable de propiedades en todos los controles. Esa es la razón por la cual hay un tropecientos JavaScript bibliotecas que "falsos" los controles de formulario con imágenes y otros elementos HTML y emular su funcionalidad original con código:

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

...

+0

Thx, 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. ;) –

3

Pruebe uno de éstos:

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

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

Reference

+5

Thx por el esfuerzo, pero desafortunadamente no funcionó. Tal vez funciona en un elemento 'a', pero no funcionó en un elemento' select'. – Martin

5

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

Si usa esto, el borde se mantendrá hasta que seleccione un elemento de la lista.

137

Bueno, Duopixel’s answer es perfecto. Si damos un paso más, podemos hacerlo a prueba de balas.

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

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

+11

¿Qué clase de magia es esta? ;) –

+2

Funcionó como un amuleto. –

+2

¡Esto realmente FUNCIONA! –

0

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 en '10px solid red' y no puedo encontrar dónde aparece. – mpen

5

Esto se dirigirá 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 quitar el! Importante, si usted planea tener el contorno aparecer en otras páginas de su sitio que usa la misma hoja de estilo.

13

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

La clase elimina el contorno según la pregunta pero también elimina cualquier imagen de fondo (ya que generalmente utilizo una flecha desplegable personalizada y la flecha desplegable del sistema Firefoxes no se puede eliminar actualmente). Si la imagen de fondo utilizando para otra imagen desplegable que nada, basta con quitar la línea background-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; 
    } 
} 
+0

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

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

funcionando al 100%

0

Aquí, esto va a funcionar!

$ ("SELECT"). Haga clic en (function() {

// Esto elimina el foco del elemento select inmediatamente

// y también lo hará el contorno

$ (this) .blur();

}); 

Aunque esto no tiene sus idas corto en otros navegadores, tendrá que comprobar el tipo de navegador que el usuario está haciendo uso de y si (prueba es Firefox) {//implementar t El código}

+0

Explique qué hace su fragmento de código además de proporcionar el fragmento de código. – sayan

0

Eliminar el contorno/el borde punteado de Firefox Todas las etiquetas seleccionables.

Ponga esta línea de código en la hoja de estilo: hace

*:focus{outline:none !important;} 
Cuestiones relacionadas