Estou tentando estilizar um select
elemento usando CSS3. Estou obtendo os resultados desejados no WebKit (Chrome / Safari), mas o Firefox não está funcionando bem (nem estou me incomodando com o IE). Estou usando a appearance
propriedade CSS3 , mas por algum motivo não consigo retirar o ícone suspenso do Firefox.
Aqui está um exemplo do que estou fazendo: 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 você pode ver, não estou tentando nada sofisticado. Eu só quero remover os estilos padrão e adicionar minha própria seta suspensa. Como eu disse, ótimo no WebKit, não ótimo no Firefox. Aparentemente, o -moz-appearance: none
item não se livra do item suspenso.
Alguma ideia? Não, o JavaScript não é uma opção
-moz-appearance
propriedade CSS3, estou usando-moz-appearance: none;
e parece estar funcionando na versão 35.0.1.@-moz-document url-prefix() { select { width: 105%; overflow: hidden; } }
Respostas:
Ok, eu sei que essa pergunta é antiga, mas há 2 anos e o mozilla não fez nada.
Eu vim com uma solução simples.
Isso basicamente retira toda a formatação da caixa de seleção no firefox e envolve um elemento de extensão em torno da caixa de seleção com seu estilo personalizado, mas deve aplicar-se apenas ao firefox.
Diga que este é o seu menu de seleção:
E vamos supor que a classe css 'css-select' seja:
No firefox, isso seria exibido no menu de seleção, seguido pela seta de seleção feia do firefox, seguida pela sua aparência personalizada personalizada. Não é ideal.
Agora, para fazer isso no firefox, adicione um elemento span com a classe 'css-select-moz':
Em seguida, corrija o CSS para ocultar a seta suja do mozilla com -moz-aparecimento: window e jogue a seta personalizada na classe do span 'css-select-moz', mas faça com que ela seja exibida no mozilla, assim:
Muito legal por tropeçar neste bug há 3 horas (eu sou novo em webdesign e completamente autodidata). No entanto, essa comunidade me forneceu indiretamente tanta ajuda que pensei que estava na hora de devolver algo.
Eu só testei no firefox (mac) versão 18 e 22 (depois da atualização).
Todos os comentários são bem-vindos.
fonte
Atualização: isso foi corrigido no Firefox v35. Veja a lista completa para detalhes.
Acabei de descobrir como remover a seta de seleção do Firefox . O truque é usar uma mistura de
-prefix-appearance
,text-indent
etext-overflow
. É CSS puro e não requer marcação extra.Testado no Windows 8, Ubuntu e Mac, versões mais recentes do Firefox.
Exemplo ao vivo: http://jsfiddle.net/joaocunha/RUEbp/1/
Mais sobre o assunto: https://gist.github.com/joaocunha/6273016
fonte
padding-right:10px;
à<select>
vontade "empurrar" a seta agora invisível para a esquerda. Bottomline: Firefox oculta a flecha, o Chrome a remove. Atualizarei meus escritos de acordo, obrigado por isso.-moz-appearence: window
não funciona com fundos transparentes (desenhar uma bg feia no lugar, pelo menos no firefox linux)O truque que funciona para mim é tornar a largura da seleção mais de 100% e aplicar o estouro: hidden
Agora é a única maneira de ocultar a seta suspensa no FF.
Entre. se você quiser belas listas suspensas, use http://harvesthq.github.com/chosen/
fonte
Atualização Importante:
A partir do Firefox V35, a propriedade de aparência agora funciona!
Das notas de lançamento oficiais do firefox na V35 :
Portanto, agora, para ocultar a seta padrão - é tão fácil quanto adicionar as seguintes regras em nosso elemento select:
DEMO
fonte
Encontramos uma maneira simples e decente de fazer isso. É cross-browser, degradável e não quebra uma publicação de formulário. Primeiro, defina as caixas de seleção
opacity
como0
.isso é para que você ainda possa clicar nele
Em seguida, faça div com as mesmas dimensões da caixa de seleção. A div deve estar sob a caixa de seleção como plano de fundo. Use
{ position: absolute }
ez-index
para conseguir isso.Atualize o innerHTML da div com javascript. Fácil com jQuery:
É isso aí! Apenas estilize sua div em vez da caixa de seleção. Como não testei o código acima, você provavelmente precisará ajustá-lo. Mas espero que você entenda a essência.
Eu acho que essa solução é melhor
{-webkit-appearance: none;}
. O que os navegadores devem fazer no máximo é ditar a interação com os elementos do formulário, mas definitivamente não a forma como eles são exibidos inicialmente na página, pois isso quebra o design do site.fonte
Tente desta maneira:
Em seguida, você pode usar uma imagem diferente como plano de fundo e colocá-la:
Existe outra maneira para os navegadores moz:
Se você tiver definido uma largura para selecionar, essa propriedade pressionará o botão da caixa de depósito padrão abaixo da área de seleção.
Funciona para mim! ;)
fonte
Embora não seja uma solução completa, descobri que…
... funciona até certo ponto. Você não pode alterar o plano de fundo (-color ou -image), mas o elemento pode ficar invisível com color: transparent. Não é perfeito, mas é um começo e você não precisa substituir o elemento do nível do sistema por um js.
fonte
window
tinha esse efeito, infelizmente, eu precisava definir a imagem de fundo. É lamentável que isso não seja muito bom no Firefox.media="print"
bloco de css comselect {-moz-appearance: window;}
e irá remover setas e fundos de todos os seleciona na FF (para outros navegadores tentar aparência ou -webkit-aparência) para que eles se parecem com texto simples ou títulosAcho que achei a solução compatível com o FF31 !!!
Aqui estão duas opções bem explicadas neste link:
http://www.currelis.com/hiding-select-arrow-firefox-30.html
Eu usei a opção 1: Rodrigo-Ludgero postou essa correção no Github, incluindo um online demo. Testei esta demonstração no Firefox 31.0 e ela parece estar funcionando corretamente. Testado no Chrome e IE também. Aqui está o código html:
e o css:
http://jsbin.com/pozomu/4/edit
Funciona muito bem para mim!
fonte
Infelizmente para você isso é "algo chique". Normalmente, não é o local dos autores da web para redesenhar os elementos do formulário. Muitos navegadores intencionalmente não permitem que você os estilize, para que o usuário veja os controles do SO aos quais está acostumado.
A única maneira de fazer isso de forma consistente nos navegadores e sistemas operacionais é usar JavaScript e substituir os
select
elementos por "DHTML".O artigo a seguir mostra três plugins baseados em jQuery que permitem fazer isso (é um pouco antigo, mas não consegui encontrar nada atual no momento)
http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements#1
fonte
appearance
propriedade é fornecer aos desenvolvedores controle sobre a aparência dos elementos do formulário, porque o uso de JavaScript é uma solução horrível. Os navegadores não devem tomar a decisão sobre a aparência de algo em uma página - é uma decisão UX, não uma decisão do fornecedor do navegador. Infelizmente, ainda não está bem suportado. Talvez em mais um ano.fonte
Estou denominando o seleto como este
Funciona para mim no FF, Safari e Chrome em todas as versões que testei.
No IE eu coloquei:
Você também pode: .yourclass :: - ms-expand {display: none; } .yourid :: - ms-exapan {display: none; }
fonte
Eu sei que essa pergunta é um pouco antiga, mas como aparece no google, e esta é uma solução "nova":
appearance: normal
Parece funcionar bem no Firefox para mim (versão 5 agora). mas não no Opera e IE8 / 9Como solução alternativa para o Opera e o IE9, usei o
:before
pseudoselector para criar uma nova caixa branca e colocá-la no topo da seta.Infelizmente, no IE8, isso não funciona. A caixa é renderizada corretamente, mas a seta se destaca de qualquer maneira ...: - /
Usar
select:before
funciona bem no Opera, mas não no IE. Se eu olhar para as ferramentas do desenvolvedor, vejo que elas estão lendo as regras corretamente e depois as ignoram (elas estão riscadas). Então eu uso um em<span class="selectwrap">
torno do real<select>
.Você pode precisar ajustar isso um pouco, mas isso funciona para mim!
Isenção de responsabilidade: estou usando isso para obter uma cópia impressa de uma página da Web com formulários, para que não precise criar uma segunda página. Eu não sou um 1337 haxx0r que quer barras de rolagem vermelhas,
<marquee>
tags e outros enfeites :-) Não aplique estilo excessivo aos formulários, a menos que você tenha um bom motivo.fonte
-moz-appearance: normal
não parece ser uma opção válida no Fx 9 e-moz-appearance: none
(que é válido) não remove a seta para baixo.<select> hi
.Use a
pointer-events
propriedadeA idéia aqui é sobrepor um elemento sobre a seta suspensa nativa (para criar uma personalizada) e, em seguida, não permitir eventos de ponteiro nele. [veja este post ]
Aqui está um FIDDLE de trabalho usando esse método.
Além disso, nesta resposta do SO , discuti esse e outro método com mais detalhes.
fonte
Isso funciona (testado no Firefox 23.0.1):
fonte
radio-container
valor para um objeto selecionado. Navegar -moz-appearance referência mozilla para obter um valor adequado (eu useimenulist-text
que esconde a selecione da seta na FF 31)com base na resposta de @ JoãoCunha, um estilo css que é útil para mais de um navegador
fonte
Além da resposta de João Cunha , esse problema está agora na lista de tarefas do Mozilla e está direcionado para a versão 35.
Para aqueles que desejam, aqui está uma solução alternativa de Todd Parker, referenciada no blog de Cunha, que funciona hoje:
http://jsfiddle.net/xvushd7x/
HTML:
CSS:
fonte
Desde o Firefox 35, "
-moz-appearance:none
" que você já escreveu em seu código, remova o botão de seta, conforme desejado.Foi um bug resolvido desde essa versão.
fonte
Muitas discussões acontecem aqui e ali, mas não vejo uma solução adequada para esse problema. Finalmente, acabei escrevendo um pequeno código Jquery + CSS para fazer esse HACK no IE e Firefox.
Calcular a largura do elemento (elemento SELECT) usando o Jquery. Adicione um Wrapper Around Select Element e mantenha o estouro oculto para esse elemento. Verifique se a largura deste invólucro é adequada. 25px menor que o do elemento SELECT. Isso pode ser feito facilmente com o Jquery. Então, agora o nosso ícone foi embora ..! e é hora de adicionar nosso ícone de imagem no elemento SELECT ... !!! Basta adicionar algumas linhas simples para adicionar fundo e você está pronto .. !! Certifique-se de usar o estouro oculto para o invólucro externo,
Aqui está um exemplo de código que foi feito para o Drupal. No entanto, pode ser usado para outros também removendo poucas linhas de código que são específicas do Drupal.
A solução funciona em todos os navegadores IE, Chrome e Firefox Não há necessidade de adicionar Hacks de larguras fixos usando CSS. Tudo está sendo tratado dinamicamente usando JQuery.!
Mais descrito em: - http://northwebstudio.com/blogs/1/jquery/remove-drop-down-arrow-html-select-element-using-jquery-and-css
fonte
tente este css
Está funcionando
fonte
A
appearance
propriedade do CSS3 não permitenone
valor. Dê uma olhada na referência W3C . Portanto, o que você está tentando fazer não é válido (na verdade, o Chrome também não deve aceitar).Infelizmente, não temos realmente nenhuma solução entre navegadores para ocultar essa seta usando CSS puro. Como apontado, você precisará de JavaScript.
Eu sugiro que você considere usar o plugin selectBox jQuery . É muito leve e bem feito.
fonte
none
É um valor que o Firefox alega apoiar: developer.mozilla.org/en/CSS/-moz-appearance Embora o estilo de elementos de formulário, no passado, só fosse possível através de JavaScript, o objetivo principal daappearance
propriedade é se afastar a partir desse. Os fornecedores de navegadores não devem tomar decisões UX para os desenvolvedores. Infelizmente, parece que isso ainda é um pouco novo demais para ser usado com eficácia.-moz
aceitenone
(mesmo se isso funcionou) não seria correto usá-lo. Ainda mais em relação a um navegador como o Firefox, que sempre se gabou de seguir exatamente os padrões.Você pode aumentar a largura da caixa e mover a seta para mais perto da esquerda da seta. isso permite cobrir a seta com uma div branca vazia.
Dê uma olhada: http://jsbin.com/aniyu4/86/edit
fonte
Você aceitaria pequenas alterações no html?
Algo como colocar uma tag div contendo a tag select.
Dê uma olhada.
fonte
Ou você pode recortar a seleção. Algo ao longo das linhas de:
Isso deve cortar 30px do lado direito da caixa de seleção, afastando a seta. Agora forneça uma imagem de plano de fundo de 170px e voila, com estilo
fonte
É um hack enorme, mas
-moz-appearance: menulist-text
pode fazer o truque.fonte
Eu estava tendo o mesmo problema. É fácil fazê-lo funcionar no FF e no Chrome, mas no IE (8 ou mais que precisamos oferecer suporte) as coisas ficam complicadas. A solução mais fácil que encontrei para elementos de seleção personalizados que funcionam "em todos os lugares que tentei", incluindo o IE8, está usando .customSelect ()
fonte
Um truque útil para mim é definir a exibição (seleciona) para
inline-flex
. Corta a seta do meu botão de seleção. Sem todo o código adicionado.-webkit appearance
ainda é necessário para o Chrome, etc ...fonte
A resposta de Jordan Young é a melhor. Mas se você não pode ou não deseja alterar seu HTML, considere remover a seta para baixo personalizada veiculada no Chrome, Safari etc. e deixar a seta padrão do firefox - mas sem as setas duplas resultantes. Não é o ideal, mas uma boa solução rápida que não adiciona HTML e não compromete sua aparência personalizada em outros navegadores.
CSS:
fonte
hackity hack ... uma solução que funciona em todos os navegadores que testei (Safari, Firefox, Chrome). Não há IEs por aí, seria bom se você pudesse testar e comentar:
CSS, com imagem codificada em url:
http://codepen.io/anon/pen/myPEBy
Estou usando o: after-element para cobrir a seta feia. Como o select não suporta: depois, preciso de um wrapper para trabalhar. Agora, se você clicar na seta, a lista suspensa não a registrará ... a menos que seu navegador suporte
pointer-events: none
, o que todos, exceto o IE10- fazem: http://caniuse.com/#feat=pointer-eventsEntão, para mim, é perfeito - uma solução agradável, limpa e com pouca dor de cabeça, pelo menos em comparação com todas as outras opções que incluem javascript.
tl; dr:
Se os usuários do IE10 (ou inferiores) clicarem na seta, não funcionará. Funciona bem o suficiente para mim ...
fonte
Se você não se importa de mexer com JS, escrevi um pequeno plugin jQuery que ajuda você a fazer isso. Com isso, você não precisa se preocupar com prefixos de fornecedores.
Fiddle aqui: JS Fiddle
A condição é que você precise estilizar a seleção do zero (isso significa definir o plano de fundo e a borda), mas provavelmente você deseja fazer isso de qualquer maneira.
Além disso, como a função substitui a seleção original por uma div, você perderá qualquer estilo feito diretamente no seletor de seleção em seu CSS. Portanto, atribua uma classe ao elemento select e denomine a classe.
Suporta navegadores modernos, se você deseja direcionar navegadores mais antigos, tente uma versão mais antiga do jQuery, mas talvez precise substituir on () por bind () na função (não testada)
fonte
As outras respostas não pareciam funcionar para mim, mas eu encontrei esse truque. Isso funcionou para mim (julho de 2014)
No meu caso, eu também tinha um campo de entrada de woocommerce, então usei esse
Atualizei minha resposta para mostrar a seleção em vez da entrada
fonte