Estoy tratando de diseñar un select
elemento usando CSS3. Estoy obteniendo los resultados que deseo en WebKit (Chrome / Safari), pero Firefox no funciona bien (ni siquiera me estoy molestando con IE). Estoy usando la appearance
propiedad CSS3 , pero por alguna razón no puedo quitar el ícono desplegable de Firefox.
Aquí hay un ejemplo de lo que estoy haciendo: http://jsbin.com/aniyu4/2/edit
#dropdown {
-moz-appearance: none;
-webkit-appearance: none;
appearance: none;
background: transparent url('example.png') no-repeat right center;
padding: 2px 30px 2px 2px;
border: none;
}
Como puede ver, no estoy tratando de nada lujoso. Solo quiero eliminar los estilos predeterminados y agregar mi propia flecha desplegable. Como dije, excelente en WebKit, no excelente en Firefox. Aparentemente, el -moz-appearance: none
no elimina el elemento desplegable.
¿Algunas ideas? No, JavaScript no es una opción
-moz-appearance
propiedad CSS3, estoy usando-moz-appearance: none;
y parece estar funcionando en la versión 35.0.1.@-moz-document url-prefix() { select { width: 105%; overflow: hidden; } }
Respuestas:
Bien, sé que esta pregunta es antigua, pero 2 años después, Mozilla no ha hecho nada.
Se me ocurrió una solución simple.
Básicamente, esto elimina todo el formato del cuadro de selección en firefox y envuelve un elemento span alrededor del cuadro de selección con su estilo personalizado, pero solo debe aplicarse a firefox.
Digamos que este es su menú de selección:
Y supongamos que la clase css 'css-select' es:
En firefox, esto se mostraría con el menú de selección, seguido de la fea flecha de selección de firefox, seguida de su bonita y personalizada apariencia. No es ideal.
Ahora para que esto funcione en Firefox, agregue un elemento span con la clase 'css-select-moz':
Luego arregle el CSS para ocultar la flecha sucia de mozilla con -moz-apariencia: ventana y arroje la flecha personalizada en la clase 'css-select-moz' del span, pero solo haga que se muestre en mozilla, de esta manera:
Bastante genial por solo tropezar con este error hace 3 horas (soy nuevo en diseño web y completamente autodidacta). Sin embargo, esta comunidad indirectamente me ha brindado tanta ayuda que pensé que ya era hora de devolver algo.
Solo lo probé en Firefox (mac) versión 18 y luego 22 (después de actualizar).
Todos los comentarios son bienvenidos.
fuente
Actualización: esto se solucionó en Firefox v35. Vea la esencia completa para más detalles.
Acabo de descubrir cómo eliminar la flecha de selección de Firefox . El truco es usar una mezcla de
-prefix-appearance
,text-indent
ytext-overflow
. Es puro CSS y no requiere marcado adicional.Probado en Windows 8, Ubuntu y Mac, últimas versiones de Firefox.
Ejemplo en vivo: http://jsfiddle.net/joaocunha/RUEbp/1/
Más sobre el tema: https://gist.github.com/joaocunha/6273016
fuente
padding-right:10px;
a la<select>
voluntad "empujar" la flecha ahora invisible a la izquierda. En pocas palabras: Firefox OCULTA la flecha, Chrome la quita. Actualizaré mis escritos en consecuencia, gracias por eso.-moz-appearence: window
que no funciona con fondos transparentes (dibuja un bg feo en su lugar, al menos en Firefox Linux)El truco que funciona para mí es hacer que el ancho de selección sea superior al 100% y aplicar desbordamiento: oculto
Esta es la única forma en este momento de ocultar la flecha desplegable en FF.
Por cierto. si quieres hermosos menús desplegables usa http://harvesthq.github.com/chosen/
fuente
Actualización importante:
A partir de Firefox V35, la propiedad de apariencia ahora funciona.
De las notas de la versión oficial de Firefox sobre V35 :
Entonces, para ocultar la flecha predeterminada, es tan fácil como agregar las siguientes reglas en nuestro elemento de selección:
MANIFESTACIÓN
fuente
Hemos encontrado una manera simple y decente de hacer esto. Es cross-browser, degradable y no rompe una publicación de formulario. Primero configure los cuadros de selección
opacity
en0
.esto es para que aún puedas hacer clic en él
Luego haga div con las mismas dimensiones que el cuadro de selección. El div debe estar debajo del cuadro de selección como fondo. Use
{ position: absolute }
yz-index
para lograr esto.Actualice innerHTML del div con javascript. Easypeasy con jQuery:
¡Eso es! Simplemente diseñe su div en lugar del cuadro de selección. No he probado el código anterior, por lo que probablemente necesites modificarlo. Pero espero que entiendas lo esencial.
Creo que esta solución supera
{-webkit-appearance: none;}
. Lo que los navegadores deberían hacer a lo sumo es dictar la interacción con los elementos del formulario, pero definitivamente no cómo se muestran inicialmente en la página, ya que eso rompe el diseño del sitio.fuente
Intenta de esta manera:
Luego, puede usar una imagen diferente como fondo y colocarla:
Hay otra forma para los navegadores moz:
Si tiene un ancho definido para seleccionar, esta propiedad empujará el botón de buzón predeterminado debajo del área de selección.
¡Esto funciona para mi! ;)
fuente
Si bien no es una solución completa, he descubierto que ...
... funciona hasta cierto punto. No puede cambiar el fondo (-color o -image) pero el elemento puede hacerse invisible con color: transparente. No es perfecto, pero es un comienzo y no es necesario reemplazar el elemento de nivel del sistema con uno js.
fuente
window
tenía ese efecto, desafortunadamente, necesitaba establecer la imagen de fondo. Es lamentable que esto no sea muy bueno en Firefox.media="print"
bloque css conselect {-moz-appearance: window;}
y eliminará las flechas y los fondos de todas las selecciones en FF (para otros navegadores intente la apariencia o -webkit-apariencia) para que se vean como texto sin formato o títulos¡Creo que encontré la solución compatible con FF31!
Aquí hay dos opciones que están bien explicadas en este enlace:
http://www.currelis.com/hiding-select-arrow-firefox-30.html
Usé la opción 1: Rodrigo-Ludgero publicó esta solución en Github, incluido un en línea manifestación. Probé esta demostración en Firefox 31.0 y parece que funciona correctamente. Probado en Chrome e IE también. Aquí está el código html:
y el css:
http://jsbin.com/pozomu/4/edit
¡Funciona muy bien para mí!
fuente
Desafortunadamente para ti esto es "algo elegante". Normalmente no es el lugar de los autores web para rediseñar elementos de formulario. Muchos navegadores no le permiten diseñarlos a propósito, para que el usuario vea los controles del sistema operativo al que está acostumbrado.
La única forma de hacer esto consistentemente en los navegadores y sistemas operativos es usar JavaScript y reemplazar los
select
elementos con "DHTML".El siguiente artículo muestra tres complementos basados en jQuery que le permiten hacer eso (es un poco viejo, pero no pude encontrar nada actual en este momento)
http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements#1
fuente
appearance
propiedad es dar a los desarrolladores control sobre la apariencia de los elementos del formulario, porque usar JavaScript para eso es una solución horrible. Los navegadores no deben tomar la decisión sobre cómo se ve algo en una página: es una decisión de UX, no una decisión del proveedor del navegador. Desafortunadamente, todavía no está bien soportado. Quizás en otro año.fuente
Estoy diseñando el selecto solo le gusta esto
Funciona para mí en FF, Safari y Chrome en todas las versiones que he probado.
En IE pongo:
También puede: .yourclass :: - ms-expand {display: none; } .yourid :: - ms-exapan {display: none; }
fuente
Sé que esta pregunta es un poco vieja, pero como aparece en Google, esta es una solución "nueva":
appearance: normal
Parece funcionar bien en Firefox para mí (versión 5 ahora). pero no en Opera e IE8 / 9Como solución alternativa para Opera e IE9, utilicé el
:before
pseudoelector para crear un nuevo cuadro blanco y ponerlo encima de la flecha.Desafortunadamente, en IE8 esto no funciona. El cuadro se representa correctamente, pero la flecha sobresale de todos modos ...: - /
Usar
select:before
funciona bien en Opera, pero no en IE. Si miro las herramientas del desarrollador, veo que está leyendo las reglas correctamente, y luego simplemente las ignora (están tachadas). Entonces uso un<span class="selectwrap">
alrededor de lo real<select>
.Puede que tenga que ajustar esto un poco, ¡pero esto funciona para mí!
Descargo de responsabilidad: estoy usando esto para obtener una copia impresa de una página web con formularios, así que no necesito crear una segunda página. No soy un 1337 haxx0r que quiere barras de desplazamiento rojas,
<marquee>
etiquetas y demás :-) Por favor , no aplique un estilo excesivo a los formularios a menos que tenga una muy buena razón.fuente
-moz-appearance: normal
no parece ser una opción válida en el Fx 9 y-moz-appearance: none
(que es válido) no elimina la flecha hacia abajo.<select> hi
.Usa la
pointer-events
propiedad.La idea aquí es superponer un elemento sobre la flecha desplegable nativa (para crear uno personalizado) y luego no permitir eventos de puntero en él. [ver esta publicación ]
Aquí hay un FIDDLE que funciona con este método.
Además, en esta respuesta SO discutí este y otro método con mayor detalle.
fuente
Esto funciona (probado en Firefox 23.0.1):
fuente
radio-container
valor de un objeto seleccionado. Examine la referencia de mozilla de apariencia de mozilla para obtener un valor apropiado (solíamenulist-text
ocultar la flecha de selección en FF 31)basándose en la respuesta de @ JoãoCunha, un estilo CSS que es útil para más de un navegador
fuente
Además de la respuesta de Joao Cunha , este problema ahora está en la Lista de tareas pendientes de Mozilla y está dirigido a la versión 35.
Para aquellos que lo deseen, aquí hay una solución alternativa de Todd Parker, referenciada en el blog de Cunha, que funciona hoy en día:
http://jsfiddle.net/xvushd7x/
HTML:
CSS:
fuente
Desde Firefox 35, "
-moz-appearance:none
" que ya escribió en su código, finalmente elimine el botón de flecha como desee.Fue un error resuelto desde esa versión.
fuente
Muchas discusiones están sucediendo aquí y allá, pero no veo una solución adecuada para este problema. Finalmente, terminé escribiendo un pequeño código Jquery + CSS para hacer este HACK en IE y Firefox.
Calcule el ancho del elemento (SELECT Element) usando Jquery. Agregue un Wrapper Around Select Element y mantenga el desbordamiento oculto para este elemento. Asegúrese de que el ancho de esta envoltura sea appox. 25px menos que el del elemento SELECT. Esto podría hacerse fácilmente con Jquery. Así que ahora nuestro icono se ha ido ...! y es hora de agregar nuestro icono de imagen en el elemento SELECT ... !!! ¡Solo agregue algunas líneas simples para agregar fondo y ya está todo listo! Asegúrese de usar el desbordamiento oculto para el envoltorio externo
Aquí hay una muestra de código que se realizó para Drupal. Sin embargo, también podría usarse para otros eliminando algunas líneas de código que son específicas de Drupal.
La solución funciona en todos los navegadores IE, Chrome y Firefox No es necesario agregar hacks de anchos fijos usando CSS. Todo se maneja dinámicamente usando JQuery.!
Más descrito en: - http://northwebstudio.com/blogs/1/jquery/remove-drop-down-arrow-html-select-element-using-jquery-and-css
fuente
prueba este css
Esta funcionando
fuente
La
appearance
propiedad de CSS3 no permitenone
valor. Echa un vistazo a la referencia del W3C . Entonces, lo que intenta hacer no es válido (de hecho, Chrome no debería aceptarlo también)Entonces, desafortunadamente, realmente no tenemos ninguna solución de navegador cruzado para ocultar esa flecha usando CSS puro. Como se señaló, necesitará JavaScript.
Le sugiero que considere usar el complemento selectBox jQuery . Es muy ligero y está muy bien hecho.
fuente
none
ES un valor que Firefox afirma respaldar: developer.mozilla.org/en/CSS/-moz-appearance Mientras que el diseño de elementos de formulario, en el pasado, solo se podía lograr a través de JavaScript, el objetivo de laappearance
propiedad es alejarse a partir de ese. Los proveedores de navegadores no deberían tomar decisiones de experiencia de usuario para los desarrolladores. Desafortunadamente, parece que todavía es demasiado nuevo para usarlo de manera efectiva.-moz
aceptanone
(incluso si eso funcionó) no sería correcto usarlo. Aún más con respecto a un navegador como Firefox, que siempre se ha jactado de seguir exactamente los estándares.Puede aumentar el ancho del cuadro y acercar la flecha a la izquierda de la flecha. Esto le permite cubrir la flecha con un div blanco vacío.
Echa un vistazo: http://jsbin.com/aniyu4/86/edit
fuente
¿Aceptarías cambios menores en el html?
Algo así como poner una etiqueta div que contenga la etiqueta select.
Echar un vistazo.
fuente
O bien, puede recortar la selección. Algo en la línea de:
Esto debería recortar 30 píxeles del lado derecho del cuadro de selección, quitando la flecha. Ahora proporcione una imagen de fondo de 170 px y listo, seleccione con estilo
fuente
Es un gran truco, pero
-moz-appearance: menulist-text
podría ser el truco.fuente
Yo estaba teniendo el mismo problema. Es fácil hacer que funcione en FF y Chrome, pero en IE (8+ que necesitamos admitir) las cosas se complican. La solución más fácil que pude encontrar para los elementos de selección personalizados que funcionan "en todos los lugares que probé", incluido IE8, es usar .customSelect ()
fuente
Un truco útil para mí es configurar la pantalla (selecciona) en
inline-flex
. Corta la flecha directamente de mi botón de selección. Sin todo el código agregado.-webkit appearance
Todavía se necesita para Chrome, etc.fuente
La respuesta de Jordan Young es la mejor. Pero si no puede o no desea cambiar su HTML, puede considerar simplemente eliminar la flecha hacia abajo personalizada que se sirve en Chrome, Safari, etc. y dejar la flecha predeterminada de Firefox, pero sin el resultado de flechas dobles. No es ideal, pero es una buena solución rápida que no agrega ningún HTML y no compromete su aspecto personalizado en otros navegadores.
CSS:
fuente
hackity hack ... una solución que funciona en todos los navegadores que he probado (Safari, Firefox, Chrome). No tenga ningún IEs por ahí, por lo que sería bueno si pudiera probar y comentar:
CSS, con imagen codificada en url:
http://codepen.io/anon/pen/myPEBy
Estoy usando: after-element para cubrir la flecha fea. Dado que select no es compatible: después, necesito un contenedor para trabajar. Ahora, si hace clic en la flecha, el menú desplegable no lo registrará ... a menos que su navegador lo admita
pointer-events: none
, lo que todos, excepto IE10, sí: http://caniuse.com/#feat=pointer-eventsEntonces, para mí es perfecto: una solución agradable, limpia y de bajo dolor de cabeza, al menos en comparación con todas las otras opciones que incluyen JavaScript.
tl; dr:
Si los usuarios de IE10 (o inferior) hacen clic en la flecha, no funcionará. Funciona lo suficientemente bien para mí ...
fuente
Si no te importa jugar con JS, escribí un pequeño complemento jQuery que te ayuda a hacerlo. Con él no tiene que preocuparse por los prefijos de proveedor.
Violín aquí: JS Fiddle
La condición es que debe diseñar la selección desde cero (esto significa establecer el fondo y el borde), pero probablemente quiera hacerlo de todos modos.
Además, dado que la función sustituye la selección original con un div, perderá cualquier estilo realizado directamente en el selector de selección en su CSS. Así que dale una clase al elemento select y dale estilo a la clase.
Admite la mayoría de los navegadores modernos, si desea apuntar a navegadores más antiguos, puede probar una versión anterior de jQuery, pero tal vez tenga que reemplazar on () con bind () en la función (no probado)
fuente
Las otras respuestas no parecían funcionar para mí, pero encontré este truco. Esto funcionó para mí (julio de 2014)
En mi caso, también tenía un campo de entrada de woocommerce, así que usé esto
Actualicé mi respuesta para mostrar select en lugar de input
fuente