Sugiro a minha solução que você pode encontrar neste repositório do GitHub .
Isso funciona também para o IE8 e IE9 com uma seta personalizada que vem de uma fonte de ícone.
Exemplos de lista suspensa personalizada entre navegadores em ação: verifique-os com todos os navegadores para ver o recurso entre navegadores.
De qualquer forma, vamos começar com os navegadores modernos e, em seguida, veremos a solução para os mais antigos.
Seta suspensa para Chrome, Firefox, Opera, Internet Explorer 10 ou superior
Para esses navegadores, é fácil definir a mesma imagem de plano de fundo para o menu suspenso para ter a mesma seta.
Para fazer isso, é necessário redefinir o estilo padrão do navegador para a select
marca e definir novas regras de segundo plano (como sugerido anteriormente).
select {
/* you should keep these firsts rules in place to maintain cross-browser behaviour */
-webkit-appearance: none;
-moz-appearance: none;
-o-appearance: none;
appearance: none;
background-image: url('<custom_arrow_image_url_here>');
background-position: 98% center;
background-repeat: no-repeat;
outline: none;
...
}
As appearance
regras são definidas como nenhuma para redefinir as configurações padrão dos navegadores. Se você deseja ter o mesmo aspecto para cada seta, mantenha-as no lugar.
As background
regras nos exemplos são definidas com imagens embutidas SVG que representam setas diferentes. Eles estão posicionados 98% da esquerda para manter alguma margem na borda direita (você pode modificar facilmente a posição como desejar).
Para manter o comportamento correto entre navegadores, a única outra regra que deve ser mantida no local é a outline
. Essa regra redefine a borda padrão que aparece (em alguns navegadores) quando o elemento é clicado. Todas as outras regras podem ser facilmente modificadas, se necessário.
Seta suspensa para Internet Explorer 8 (IE8) e Internet Explorer 9 (IE9) usando a Fonte do ícone
Esta é a parte mais difícil ... Ou talvez não.
Não existe uma regra padrão para ocultar as setas padrão para esses navegadores (como o select::-ms-expand
IE10 +). A solução é ocultar a parte do menu suspenso que contém a seta padrão e inserir uma fonte de ícone de seta (ou um SVG, se você preferir) semelhante ao SVG usado nos outros navegadores (consulte a select
regra CSS para obter mais informações). detalhes sobre o SVG embutido usado).
O primeiro passo é definir uma classe que possa reconhecer o navegador: esta é a razão pela qual eu usei os IFs do IE condicional no início do código. Esses IFs são usados para anexar classes específicas à html
tag para reconhecer o navegador IE mais antigo.
Depois disso, todo select
o código HTML deve ser envolvido por uma div
(ou qualquer marca que possa agrupar um elemento). Nesse invólucro, adicione a classe que contém a fonte do ícone.
<div class="selectTagWrapper prefix-icon-arrow-down-fill">
...
</div>
Em palavras fáceis, esse wrapper é usado para simular a select
tag.
Para agir como um menu suspenso, o wrapper deve ter uma borda, porque ocultamos o que vem do select
.
Observe que não podemos usar a select
borda porque temos que ocultar a seta padrão, aumentando-a em 25% a mais que o wrapper. Consequentemente, sua borda direita não deve ser visível, porque ocultamos esses 25% a mais pela overflow: hidden
regra aplicada a select
ela mesma.
A seta personalizada icon-font é colocada na pseudo classe :before
onde a regra content
contém a referência para a seta (nesse caso, é um parêntese à direita).
Também colocamos essa seta em uma posição absoluta para centralizá-la o máximo possível (se você usar fontes de ícones diferentes, lembre-se de ajustá-las oportunamente, alterando os valores superior e esquerdo e o tamanho da fonte).
.ie8 .prefix-icon-arrow-down-fill:before,
.ie9 .prefix-icon-arrow-down-fill:before {
content: ")";
position: absolute;
top: 43%;
left: 93%;
font-size: 6px;
...
}
Você pode criar e substituir facilmente a seta do plano de fundo ou a seta da fonte do ícone, com todas as que desejar, simplesmente alterando-a na background-image
regra ou criando você mesmo um novo arquivo de fonte do ícone.