Elementos <select> con estilo
Para cambiar el aspecto de los elementos <select>
tenemos que eliminar primero los estilos que vienen predefinidos "de fabrica".
select {
background: transparent;
border: none;
font-size: 14px;
height: 30px;
padding: 5px;
width: 250px;
}
En Google Chrome, los <select>
enfocados ( on focus ) tienen una "sombra" azulada. Para eliminarla utilizamos esta regla:
select:focus{ outline: none;}
/* elimina la "sombra" azulada que aparece en Google Chrome */
El botón que controla la aparición y la desaparición de los <option>
es imposible de cambiar. De hecho este botón tiene solo una función estética, ya que podemos desplegar las opciones haciendo clic en cualquier punto del <select>
. Así que podemos taparlo y construir otro en su lugar.
Para taparlo ponemos el <select>
dentro de una .caja
cuya anchura width
es más pequeña que la anchura del <select>
.
.caja {
margin:20px auto;
border:1px solid #d9d9d9;
height:30px;
width: 230px;
overflow: hidden;
position:relative;
}
Y después construimos el nuevo "botón" utilizando el pseudo-elemento ::after. En este ejemplo utilizamos content:"\025be";
que es este símbolo: ▾, pero podemos utilizar cualquier otro símbolo, o incluso imágenes: content: url(flecha.gif);
.
Más símbolos ASCII y Unicode para utilizar en el HTML, javaScript y CSS
.caja::after{ content:"\025be"; display:table-cell; text-align:center; padding-top:7px; width:30px; height:30px; background-color:#d9d9d9; position:absolute; top:0; right:0px; pointer-events: none; }
La propiedad pointer-events
– nueva en CSS3 – permite controlar como se comportan los elementos html respecto a los eventos del ratón.
En nuestro caso, el pseudo-elemento ::after
, que está encima del <select>
, interfiere en la funcionalidad de este y no nos deja desplegar las opciones. Para que esto no pase utilizamos pointer-events: none
, para inhabilitar los eventos del ratón encima del pseudo-elemento.
.caja {
margin:20px auto 40px auto;
border:1px solid #d9d9d9;
height:30px;
overflow: hidden;
width: 230px;
position:relative;
}
select {
background: transparent;
border: none;
font-size: 14px;
height: 30px;
padding: 5px;
width: 250px;
}
select:focus{ outline: none;}
.caja::after{
content:"\025be";
display:table-cell;
padding-top:7px;
text-align:center;
width:30px;
height:30px;
background-color:#d9d9d9;
position:absolute;
top:0;
right:0px;
pointer-events: none;
}