No IE, a lista suspensa tem a mesma largura que a caixa suspensa (espero estar fazendo sentido), enquanto no Firefox a largura da lista suspensa varia de acordo com o conteúdo.
Basicamente, isso significa que preciso ter certeza de que a caixa de depósito é grande o suficiente para exibir a seleção mais longa possível. Isso deixa minha página muito feia :(
Existe alguma solução alternativa para esse problema? Como posso usar CSS para definir larguras diferentes para a caixa de depósito e a lista suspensa?
fonte
width: auto !important;
Criar sua própria lista suspensa é mais trabalhoso do que vale a pena. Você pode usar algum JavaScript para fazer o menu suspenso do IE funcionar.
Ele usa um pouco da biblioteca YUI e uma extensão especial para corrigir as caixas de seleção do IE.
Você precisará incluir o seguinte e envolver seus
<select>
elementos em um<span class="select-box">
Coloque-os antes da tag do corpo da sua página:
Edição de aceitação da postagem:
Você também pode fazer isso sem a biblioteca YUI e o controle de hack. Tudo o que você realmente precisa fazer é colocar onmouseover = "this.style.width = 'auto'" onmouseout = "this.style.width = '100px'" (ou o que você quiser) no elemento selecionado. O controle YUI oferece uma boa animação, mas não é necessário. Esta tarefa também pode ser realizada com jquery e outras bibliotecas (embora eu não tenha encontrado documentação explícita para isso)
- alteração à edição: o
IE tem um problema com o onmouseout para controles de seleção (não considera o mouseover nas opções sendo um mouseover no select). Isso torna o uso do mouseout muito complicado. A primeira solução é a melhor que encontrei até agora.
fonte
você pode apenas tentar o seguinte ...
Eu tentei e funcionou para mim. Nada mais é necessário.
fonte
Usei a solução a seguir e parece funcionar bem na maioria das situações.
Nota: o $ .browser.msie requer jquery.
fonte
@Thad você precisa adicionar um manipulador de eventos de desfoque também
No entanto, isso ainda expandirá a caixa de seleção ao clicar, em vez de apenas os elementos. (e parece falhar no IE6, mas funciona perfeitamente no Chrome e no IE7)
fonte
Não há como fazer isso no IE6 / IE7 / IE8. O controle é desenhado pelo aplicativo e o IE simplesmente não o desenha dessa maneira. Sua melhor aposta é implementar seu próprio menu suspenso via HTML / CSS / JavaScript simples se for tão importante ter o menu suspenso com uma largura e a lista com outra largura.
fonte
Se você usa jQuery, experimente este plugin de largura de seleção do IE:
http://www.jainaewen.com/files/javascript/jquery/ie-select-style/
A aplicação deste plugin faz com que a caixa de seleção no Internet Explorer pareça funcionar como funcionaria no Firefox, Opera etc, permitindo que os elementos de opção abram na largura total sem perder a aparência e o estilo da largura fixa. Ele também adiciona suporte para preenchimento e bordas na caixa de seleção no Internet Explorer 6 e 7.
fonte
Em jQuery, isso funciona muito bem. Suponha que o menu suspenso tenha id = "suspenso".
fonte
Aqui está a solução mais simples.
Antes de começar, devo dizer que a caixa de seleção suspensa se expandirá automaticamente em quase todos os navegadores, exceto no IE6. Portanto, eu faria uma verificação do navegador (ou seja, IE6) e escreveria o seguinte apenas nesse navegador. Aqui vai. Primeiro verifique o navegador.
O código irá expandir magicamente a caixa de seleção suspensa. O único problema com a solução é onmouseover, o menu suspenso será expandido para 420px e, como overflow = hidden, estamos ocultando o tamanho do menu suspenso expandido e mostrando-o como 170px; portanto, a seta do lado direito do ddl ficará oculta e não poderá ser vista. mas a caixa de seleção será expandida para 420px; que é o que realmente queremos. Experimente o código abaixo e use-o se desejar.
O código acima é o CSS do IE6. O CSS comum para todos os outros navegadores deve ser o seguinte.
fonte
se você quiser um menu suspenso e / ou flyout simples sem efeitos de transição, use CSS ... você pode forçar o IE6 a suportar: passar o mouse sobre todos os elementos usando um arquivo .htc (css3hover?) com comportamento (propriedade apenas do IE6) definido em o arquivo CSS anexado condicionalmente.
fonte
verifique isso .. não é perfeito, mas funciona e é apenas para o IE e não afeta o FF. Eu usei o javascript regular para onmousedown para estabelecer a correção somente do IE .. mas o msie do jquery pode ser usado também no onmousedown .. a ideia principal é "onchange" e on blur para que a caixa de seleção volte ao normal .. decidir que você tem largura própria para aqueles. Eu precisava de 35%.
fonte
A resposta de BalusC acima funciona muito bem, mas há uma pequena correção que eu acrescentaria se o conteúdo de sua lista suspensa tiver uma largura menor do que a que você define em seu CSS select.expand, adicione isso ao link mouseover:
fonte
Isso é algo que fiz retirando pedaços das coisas de outras pessoas.
onde cboEthnicity e cboDisability são menus suspensos com o texto da opção mais largo do que a largura do próprio select.
Como você pode ver, especifiquei document.all, pois isso só funciona no IE. Além disso, envolvi os menus suspensos em elementos div como este:
Isso faz com que os outros elementos saiam do lugar quando o menu suspenso se expande. A única desvantagem aqui é que o visual do menulista desaparece quando você está selecionando, mas retorna assim que você seleciona.
Espero que isso ajude alguém.
fonte
esta é a melhor maneira de fazer isso:
é exatamente igual à solução BalusC. Só isso é mais fácil. ;)
fonte
Um plugin jQuery completo está disponível. Suporta layout ininterrupto e interações com teclado, verifique a página de demonstração: http://powerkiki.github.com/ie_expand_select_width/
isenção de responsabilidade: eu codifiquei aquilo, patches bem-vindos
fonte
http://developer.yahoo.com/yui/examples/button/button-menu-select.html#
fonte
A solução do jquery BalusC foi aprimorada por mim. Também usado: comentário de Brad Robertson aqui .
Basta colocá-lo em um .js, usar a classe ampla para seus combos desejados e não forjar para dar um Id. Chame a função no onload (ou documentReady ou qualquer outro).
Tão simples que :)
Usará a largura que você definiu para o combo como comprimento mínimo.
fonte
Você pode adicionar um estilo diretamente ao elemento selecionado:
<select name="foo" style="width: 200px">
Portanto, este item selecionado terá 200 pixels de largura.
Alternativamente, você pode aplicar uma classe ou id ao elemento e referenciá-lo em uma folha de estilo
fonte
Até agora não existe um. Não sei sobre o IE8, mas isso não pode ser feito no IE6 e IE7, a menos que você implemente sua própria funcionalidade de lista suspensa com javascript. Existem exemplos de como fazer isso na web, embora eu não veja muitos benefícios em duplicar a funcionalidade existente.
fonte
Temos a mesma coisa em um asp: dropdownlist:
No Firefox (3.0.5), a lista suspensa é a largura do item mais longo da lista suspensa, que tem cerca de 600 pixels de largura ou algo parecido.
fonte
Isso parece funcionar com o IE6 e não parece prejudicar os outros. A outra coisa boa é que ele muda o menu automaticamente assim que você muda sua seleção suspensa.
fonte
O link Hedgerwow (a solução alternativa para a animação YUI) na primeira melhor resposta está quebrado, acho que o domínio expirou. Copiei o código antes de expirar, então você pode encontrá-lo aqui (o proprietário do código pode me informar se eu estiver violando algum direito autoral, enviando-o novamente)
http://ciitronian.com/blog/programming/yui-button-mimicking-native-select-dropdown-avoid-width-problem/
Na mesma postagem do blog, escrevi sobre como fazer exatamente o mesmo elemento SELECT como o normal usando o menu do botão YUI. Dê uma olhada e deixe-me saber se isso ajuda!
fonte
Com base na solução postada por Sai , é assim que se faz com jQuery.
fonte
Pensei em jogar meu chapéu no ringue. Eu faço um aplicativo SaaS e tenho um menu de seleção embutido em uma tabela. Esse método funcionou, mas distorceu tudo na tabela.
Então, o que eu fiz para tornar tudo melhor foi colocar o select dentro de uma div indexada por z.
fonte
É testado em todas as versões do IE, Chrome, FF e Safari
// código JavaScript
// Código HTML
fonte
Tive de contornar esse problema e uma vez encontrei uma solução bastante completa e escalonável para o IE6, 7 e 8 (e compatível com outros navegadores, obviamente). Escrevi um artigo inteiro sobre isso aqui: http://www.edgeoftheworld.fr/wp/work/dealing-with-fixed-sized-dropdown-lists-in-internet-explorer
Pensei em compartilhar isso com pessoas que ainda estão enfrentando esse problema, já que nenhuma das soluções acima funciona em todos os casos (na minha opinião).
fonte
Tentei todas essas soluções e nenhuma funcionou completamente para mim. Isso é o que eu inventei
Certifique-se de adicionar uma classe suspensa para cada lista suspensa em seu html
O truque aqui é usar a função de clique especializada (eu a encontrei aqui Fire event cada vez que um item DropDownList é selecionado com jQuery ). Muitas das outras soluções aqui usam a alteração do manipulador de eventos, que funciona bem, mas não será acionada se o usuário selecionar a mesma opção selecionada anteriormente.
Como muitas das outras soluções, o foco e a redução do mouse são para quando o usuário coloca o menu suspenso em foco, o desfoque é para quando ele clica.
Você também pode querer colocar algum tipo de detecção de navegador nisso para que tenha efeitos apenas, ou seja. Mas não parece ruim em outros navegadores
fonte