Altura de uma caixa de seleção HTML (lista suspensa)

86

Alguém pode confirmar que não é possível alterar a altura de um menu suspenso que é mostrado quando você clica em uma caixa de seleção.

O atributo size do select faz com que pareça uma lista, o atributo height no CSS também não faz muito bem.

mkoryak
fonte
O menu suspenso é um controle no nível do aplicativo, não um controle no nível do cliente. (tristemente)
Diodeus - James MacFarlane

Respostas:

91

Confirmado.

A parte que desce é definida como:

  1. A altura necessária para mostrar todas as entradas, ou
  2. A altura necessária para mostrar as xentradas (com barras de rolagem para ver o restante), onde xestá
    • 20 no Firefox e Chrome
    • 30 no IE 6, 7, 8
    • 16 para Opera 10
    • 14 para Opera 11
    • 22 para Safari 4
    • 18 para Safari 5
    • 11 no IE 5.0, 5.5
  3. No IE / Edge, se não houver opções, uma lista estupidamente alta de 11 entradas em branco.

Para (3) acima, você pode ver os resultados neste JSFiddle

Scunliffe
fonte
@scunliffe how to set (1) in chrome
Se você definir size = "1" ou nada, uma vez que é o padrão, sua seleção será uma lista suspensa em vez de uma vertical estática na lista de páginas. No entanto, conforme observado, a altura real da lista suspensa é determinada pelo navegador e, como desenvolvedores, não temos controle sobre a altura da lista.
scunliffe
4
@scunliffe Tiremos o chapéu pelas contagens fornecidas :)
Shahil M
5

Tenho trabalhado em um plugin jquery de substituição suspensa para combater esse problema. Nesta postagem, é quase indistinguível de uma lista suspensa nativa em termos de aparência e funcionalidade .

aqui está uma demonstração (também um link para downloads): http://programmingdrunk.com/current-projects/dropdownReplacement/

aqui está a página do projeto do plugin:

http://plugins.jquery.com/project/dropdownreplacement

(atualização :) a página do plugin jquery parece não funcionar mais. Provavelmente não colocarei meu plugin em seu novo site quando ele começar a funcionar, então fique à vontade para usar o link programmingdrunk.com para demonstração / download

mkoryak
fonte
ideia interessante - eu certamente gosto da capacidade de "remover" a lista de seleção falsa (acho muitos padrões do tema do sistema operacional "nativo" e, portanto, parecem "estranhos") e da capacidade de controlar o conteúdo na lista que considero útil ( já que o IE oferece muito poucas opções de estilo para elementos de opção)
scunliffe
O último link desta resposta está morto!
Stephan
sim, mas a página de demonstração é um recurso melhor do que o site do plugin. ele também tem um download nele.
Vou
Isso parece incrível: Duvido que você tenha tempo para testá-lo com alguma versão posterior do jquery. Obrigado
Thang Pham
Eu não, mas se você fizer isso, sinta-se à vontade para relatar :) - na verdade, eu sei que ele funciona com 1.8.2
mkoryak
5

NO . Não é possível alterar a altura de uma lista suspensa de seleção porque essa propriedade é específica do navegador.

No entanto, se você deseja essa funcionalidade, existem muitas opções. Você pode usar bootstrap dropdown-menue definir sua max-heightpropriedade. Algo assim.

$('.dropdown-menu').on( 'click', 'a', function() {
    var text = $(this).html();
    var htmlText = text + ' <span class="caret"></span>';
    $(this).closest('.dropdown').find('.dropdown-toggle').html(htmlText);
});
.dropdown-menu {
    max-height: 146px;
    overflow: scroll;
    overflow-x: hidden;
    margin-top: 0px;
}

.caret {
	  float: right;
    margin-top: 5%;
}

#menu1 {
    width: 160px; 
    text-align: left;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
   
<div class="container" style="margin:10px">
  <div class="dropdown">
    <button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">Tutorials
    <span class="caret"></span></button>
    <ul class="dropdown-menu" role="menu" aria-labelledby="menu1">
      <li><a href="#">HTML</a></li>
      <li><a href="#">CSS</a></li>
      <li><a href="#">JavaScript</a></li>
      <li><a href="#">About Us</a></li>
      <li><a href="#">HTML</a></li>
      <li><a href="#">CSS</a></li>
      <li><a href="#">JavaScript</a></li>
      <li><a href="#">About Us</a></li>
      <li><a href="#">HTML</a></li>
      <li><a href="#">CSS</a></li>
      <li><a href="#">JavaScript</a></li>
      <li><a href="#">About Us</a></li>
      <li><a href="#">HTML</a></li>
      <li><a href="#">CSS</a></li>
      <li><a href="#">JavaScript</a></li>
      <li><a href="#">About Us</a></li>
      <li><a href="#">HTML</a></li>
      <li><a href="#">CSS</a></li>
      <li><a href="#">JavaScript</a></li>
      <li><a href="#">About Us</a></li>
      <li><a href="#">HTML</a></li>
      <li><a href="#">CSS</a></li>
      <li><a href="#">JavaScript</a></li>
      <li><a href="#">About Us</a></li>
    </ul>
  </div>
</div>

Raman Sahasi
fonte
2

Na verdade, você meio que pode! Não se preocupe com javascript ... Eu estava preso na mesma coisa para um site que estou fazendo e se você aumentar o atributo 'font-size' no CSS para a tag, ele também aumentará automaticamente a altura. Petty mas é algo que me incomoda muito ha ha

Aniqa Arif
fonte
O que isso significa ?
Anirudha Gupta
1
Eu presumiria que o objetivo seria mostrar mais opções na caixa suspensa, não simplesmente ocupar mais espaço, que é o que esta resposta faria.
JReader
0

Esta não é uma solução perfeita, mas funciona.

Na tag de seleção, inclua os seguintes atributos, onde 'n' é o número de linhas suspensas que seriam visíveis.

<select size="1" position="absolute" onclick="size=(size!=1)?n:1;" ...>

Existem três problemas com esta solução. 1) Há um rápido flash de todos os elementos mostrados durante o primeiro clique do mouse. 2) A posição é definida como 'absoluta' 3) Mesmo se houver menos de 'n' itens, a caixa suspensa ainda terá o tamanho de 'n' itens.

Chi Row
fonte
Boa tentativa, mas sem sorte, também tentei substituí-lo por onFocus.
Ismail Iqbal
0

A resposta Chi Row é uma boa opção para o problema, mas encontrei um erro nos onclickargumentos. Em vez disso, seria:

<select size="1" position="absolute" onclick="size=(size!=1)?1:n;" ...>

(E mencione que você deve substituir o " n " pelo número de linhas de que precisa)

CatalanProgrammer
fonte
-2

Você pode alterar a altura de um. Não use height="500"(apenas um número de exemplo). Use o estilo. Você pode usar a <style>tag ou apenas:

<!DOCTYPE html>
<html>
<body>
  <select id="option" style="height: 100px;">
    <option value="1">Option 1
    <option value="2">Option 2
  </select>
</body>
</html>

Eu destaco a mudança:

  <select id="option" style="height: 100px;">

E melhor ainda ...

style="height: 100px;">

Você viu isso?

Por favor, vote se for útil!

Jogo perigoso
fonte
A questão sobre como definir o estilo da altura do que é aberto quando você clica em um <select>elemento, não o próprio elemento. Eu fiz essa pergunta há mais de 10 anos, quando estilizar este widget era praticamente impossível. Tenho certeza de que não é mais o caso.
mkoryak