Altura de un cuadro de selección HTML (desplegable)

86

¿Alguien puede confirmar que no es posible cambiar la altura de un menú desplegable que se muestra cuando hace clic en un cuadro de selección?

El atributo de tamaño de la selección hace que parezca una lista, el atributo de altura en el CSS tampoco hace mucho bien.

mkoryak
fuente
El menú desplegable es un control a nivel de aplicación, no un control a nivel de cliente. (tristemente)
Diodeus - James MacFarlane

Respuestas:

91

Confirmado.

La parte que se despliega se establece en:

  1. La altura necesaria para mostrar todas las entradas, o
  2. La altura necesaria para mostrar las xentradas (con barras de desplazamiento para ver el resto), donde xes
    • 20 en Firefox y Chrome
    • 30 en IE 6, 7, 8
    • 16 para Opera 10
    • 14 para Opera 11
    • 22 para Safari 4
    • 18 para Safari 5
    • 11 en IE 5.0, 5.5
  3. En IE / Edge, si no hay opciones, una lista estúpidamente alta de 11 entradas en blanco.

Para (3) arriba, puede ver los resultados en este JSFiddle

scunliffe
fuente
@scunliffe cómo configurar (1) en Chrome
Si establece size = "1" o nada, ya que es el valor predeterminado, su selección será un menú desplegable frente a una vertical estática en la lista de páginas. Sin embargo, como se señaló, el navegador determina la altura real del menú desplegable y, como desarrolladores, no tenemos control sobre la altura de la lista.
scunliffe
4
@scunliffe Me quito el sombrero para los recuentos proporcionados :)
Shahil M
5

He estado trabajando en un complemento de jquery de reemplazo desplegable para combatir este problema. A partir de esta publicación, es casi indistinguible de un menú desplegable nativo en términos de apariencia y funcionalidad .

aquí hay una demostración (también un enlace a descargas): http://programmingdrunk.com/current-projects/dropdownReplacement/

aquí está la página del proyecto del complemento:

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

(actualización :) parece que la página del complemento jquery ya no funciona. Probablemente no pondré mi complemento en su nuevo sitio cuando lo hagan funcionar, así que siéntase libre de usar el enlace de programacióndrunk.com para una demostración / descarga

mkoryak
fuente
idea interesante - Ciertamente me gusta la capacidad de "cambiar" la lista de selección falsa (encuentro muchos predeterminados del tema del sistema operativo "nativo" y, por lo tanto, me veo "extraño"), y la capacidad de controlar el contenido de la lista me parece útil ( desde IE ofrece muy pocas opciones de estilo para los elementos de opción)
scunliffe
¡El último enlace de esta respuesta está muerto!
Stephan
sí, pero la página de demostración es un mejor recurso que el sitio de complementos. también tiene una descarga. Sin embargo, actualizaré la respuesta, gracias
mkoryak
Esto se ve increíble: me pregunto si tiene tiempo para probarlo con alguna versión posterior de jquery. Gracias
Thang Pham
No lo hago, pero si lo hace, no dude en informar :) - de hecho, sé que funciona con 1.8.2
mkoryak
5

NO . No es posible cambiar la altura de un menú desplegable de selección porque esa propiedad es específica del navegador.

Sin embargo, si desea esa funcionalidad, hay muchas opciones. Puede usar bootstrap dropdown-menuy definir su max-heightpropiedad. Algo como esto.

$('.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
fuente
2

¡De hecho, puedes! No se moleste con javascript ... Simplemente estaba atascado en lo mismo para un sitio web que estoy creando y si aumenta el atributo 'font-size' en CSS para la etiqueta, automáticamente aumenta la altura también. Petty pero es algo que me molesta mucho ja ja

Aniqa Arif
fuente
Qué significa ?
Anirudha Gupta
1
Asumiría que el objetivo sería mostrar más opciones en el cuadro desplegable, no simplemente ocupar más espacio, que es lo que haría esta respuesta.
JReader
0

Esta no es una solución perfecta, pero funciona.

En la etiqueta de selección, incluya los siguientes atributos donde 'n' es el número de filas desplegables que serían visibles.

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

Hay tres problemas con esta solución. 1) Hay un destello rápido de todos los elementos mostrados durante el primer clic del mouse. 2) La posición se establece en 'absoluta' 3) Incluso si hay menos de 'n' elementos, el cuadro desplegable seguirá siendo para el tamaño de 'n' elementos.

Chi Row
fuente
Buen intento pero sin suerte, también intenté reemplazarlo con onFocus.
Ismail Iqbal
0

La respuesta de Chi Row es una buena opción para el problema, pero encontré un error en los onclickargumentos. En cambio, sería:

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

(Y mencione que debe reemplazar la " n " con la cantidad de líneas que necesita)

Programador catalán
fuente
-2

Puede cambiar la altura de uno. No useheight="500" (solo un número de ejemplo). Usa el estilo. Puede usar la <style>etiqueta o simplemente usar esto:

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

Destaco el cambio:

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

Y aun mejor ...

style="height: 100px;">

¿Ves eso?

¡Vota si es útil!

Juego peligroso
fuente
La pregunta sobre el estilo de la altura de la cosa que se abre al hacer clic en un <select>elemento, no en el elemento en sí. Hice esta pregunta hace más de 10 años cuando diseñar este widget era prácticamente imposible. Estoy seguro de que este ya no es el caso.
mkoryak