Hemos encontrado una manera sencilla y decente para hacer esto. Es un navegador cruzado, degradable y no rompe una publicación de formulario. En primer lugar establecer la opacidad de la caja de selección a 0.
.select {
opacity : 0;
width: 200px;
height: 15px;
}
<select class='select'>
<option value='foo'>bar</option>
</select>
esto es por lo que aún puede hacer clic en él
Entonces haz div con las mismas dimensiones que el cuadro de selección. El div debería colocarse debajo del cuadro de selección como fondo. Usa {position: absolute} y z-index para lograr esto.
.div {
width: 200px;
height: 15px;
position: absolute;
z-index: 0;
}
<div class='.div'>{the text of the the current selection updated by javascript}</div>
<select class='select'>
<option value='foo'>bar</option>
</select>
Actualiza el innerHTML de div con javascript. Easypeasy con jQuery:
$('.select').click(function(event)) {
$('.div').html($('.select option:selected').val());
}
Eso es todo! Solo dale estilo a tu div en lugar de a la casilla de selección. No he probado el código anterior, así que probablemente necesites ajustarlo. Pero espero que entiendas la esencia.
Creo que esta solución supera a {-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.
quiere decir que desea una lista desplegable personalizable (construido en jQuery), ¿verdad? porque los recuadros de selección ni siquiera son objetos del navegador (son objetos de la plataforma), muy sencillos, muy crudos, y no se puede aplicar gran cantidad de estilo (no se pueden aplicar estilos a las fronteras) – Ayyash
+1 para una buena explicación y formato. – Manish
** [Elegido] (http://harvesthq.github.com/chosen/) ** vale la pena mencionar, pero no es muy personalizable y tiene muchos problemas abiertos. Es bueno mirar y usar, sin embargo. –