Wysokość pola wyboru HTML (lista rozwijana)


86

Czy ktoś może potwierdzić, że nie można zmienić wysokości listy rozwijanej wyświetlanej po kliknięciu pola wyboru.

Atrybut rozmiaru elementu select sprawia, że ​​wygląda jak lista, atrybut wysokości w CSS też nie robi wiele dobrego.


Lista rozwijana jest kontrolką na poziomie aplikacji, a nie kontrolką na poziomie klienta. (niestety)
Diodeus - James MacFarlane

Odpowiedzi:


91

Potwierdzony.

Część, która spada, jest ustawiona na:

  1. Wysokość potrzebna do wyświetlenia wszystkich wpisów lub
  2. Wysokość potrzebna do pokazania xwpisów (z paskami przewijania, aby zobaczyć pozostałe), gdzie xjest
    • 20 w przeglądarce Firefox i Chrome
    • 30 w IE 6, 7, 8
    • 16 dla Opery 10
    • 14 dla Opery 11
    • 22 dla przeglądarki Safari 4
    • 18 dla przeglądarki Safari 5
    • 11 w IE 5.0, 5.5
  3. W IE / Edge, jeśli nie ma opcji, głupio wysoka lista 11 pustych wpisów.

Dla (3) powyżej możesz zobaczyć wyniki w tym JSFiddle


@scunliffe jak ustawić (1) w chrome

Jeśli ustawisz rozmiar = "1" lub nic, ponieważ jest to wartość domyślna, wybór będzie rozwijany, a nie statyczny pion na liście stron. Jednak, jak zauważono, rzeczywista wysokość listy rozwijanej jest określana przez przeglądarkę i jako programiści nie mamy kontroli nad wysokością listy.
scunliffe

4
@scunliffe Czapki z głów dla podanych liczb :)
Shahil M

5

Pracowałem nad wtyczką jquery zastępującą listę rozwijaną, aby zwalczyć ten problem. W tym poście jest prawie nie do odróżnienia od natywnego menu pod względem wyglądu i funkcjonalności .

tutaj jest demo (również link do pobrania): http://programmingdrunk.com/current-projects/dropdownReplacement/

oto strona projektu wtyczki:

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

(aktualizacja :) strona wtyczki jquery wydaje się nie działać. Prawdopodobnie nie umieszczę mojej wtyczki na ich nowej stronie, gdy zaczną działać, więc możesz skorzystać z linkumingdrunk.com do demonstracji / pobrania


ciekawy pomysł - na pewno podoba mi się możliwość „skórowania” fałszywej listy wyboru (uważam, że wiele domyślnych z „natywnego” motywu systemu operacyjnego i przez to wygląda „dziwnie”), oraz możliwość kontrolowania zawartości listy, którą uważam za przydatną ( ponieważ IE zapewnia bardzo mało opcji stylizacji elementów opcji)
scunliffe

Ostatni link z tej odpowiedzi jest martwy!
Stephan,

tak, ale strona demonstracyjna jest lepszym źródłem informacji niż witryna z wtyczkami. ma również plik do pobrania. źle zaktualizuj odpowiedź, dzięki
mkoryak

Wygląda to niesamowicie: D Ciekawe, czy masz czas na przetestowanie tego z jakąś późniejszą wersją jquery. Dziękuję
Thang Pham

Nie, ale jeśli tak to
zapraszam

5

NIE . Nie można zmienić wysokości menu wyboru, ponieważ ta usługa jest zależna od przeglądarki.

Jeśli jednak chcesz mieć tę funkcjonalność, istnieje wiele opcji. Możesz użyć bootstrap dropdown-menui zdefiniować jego max-heightwłaściwość. Coś takiego.

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


2

Właściwie możesz! Nie kłopocz się z javascriptem ... Po prostu utknąłem w tym samym miejscu na stronie, którą tworzę i jeśli zwiększysz atrybut 'font-size' w CSS dla tagu, automatycznie zwiększy się również wysokość. Drobna, ale to coś, co mnie bardzo niepokoi ha ha


Co to znaczy ?
Anirudha Gupta

1
Zakładam, że celem byłoby pokazanie większej liczby opcji w rozwijanym polu, a nie po prostu zajęcie większej ilości miejsca, co wystarczyłoby w tej odpowiedzi.
JReader,

0

To nie jest idealne rozwiązanie, ale działa.

W tagu zaznaczania uwzględnij następujące atrybuty, gdzie „n” to liczba wierszy menu, które byłyby widoczne.

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

Z tym rozwiązaniem wiążą się trzy problemy. 1) Istnieje szybki błysk wszystkich elementów wyświetlanych podczas pierwszego kliknięcia myszą. 2) Pozycja jest ustawiona na „bezwzględną”. 3) Nawet jeśli jest mniej niż „n” elementów, rozwijane pole nadal będzie miało rozmiar „n” elementów.


Dobra próba, ale bez powodzenia, próbowałem też zastąpić go onFocus.
Ismail Iqbal

0

Odpowiedź Chi Row jest dobrym rozwiązaniem problemu, ale znalazłem błąd w onclickargumentach. Zamiast tego byłoby:

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

(I wspomnij, że musisz zastąpić „ n ” liczbą potrzebnych wierszy)


-2

Możesz zmienić wysokość jednego. Nie używaj height="500"(tylko przykładowa liczba). Użyj stylu. Możesz użyć <style>tagu lub po prostu użyć tego:

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

Zwracam uwagę na zmianę:

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

A nawet lepiej ...

style="height: 100px;">

Widzisz to?

Proszę o głosowanie, jeśli jest to pomocne!


Pytanie o stylizację wysokości rzeczy, która otwiera się po kliknięciu na <select>element, a nie na sam element. Zadałem to pytanie ponad 10 lat temu, kiedy stylizacja tego widżetu była praktycznie niemożliwa. Jestem pewien, że już tak nie jest.
mkoryak
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.