Chiều cao của hộp chọn HTML (trình đơn thả xuống)


86

Ai đó có thể xác nhận rằng nó không thể thay đổi chiều cao của trình đơn thả xuống được hiển thị khi bạn nhấp vào một hộp chọn không.

Thuộc tính kích thước của vùng chọn làm cho nó giống như một danh sách, thuộc tính chiều cao trong CSS cũng không hoạt động tốt.


Trình đơn thả xuống là điều khiển cấp ứng dụng, không phải điều khiển cấp máy khách. (thật đáng buồn)
Diodeus - James MacFarlane 20/02/09

Câu trả lời:


91

Đã xác nhận.

Phần thả xuống được đặt thành:

  1. Chiều cao cần thiết để hiển thị tất cả các mục nhập, hoặc
  2. Chiều cao cần thiết để hiển thị xcác mục nhập (với thanh cuộn để xem còn lại), đâu x
    • 20 trong Firefox và Chrome
    • 30 trong IE 6, 7, 8
    • 16 cho Opera 10
    • 14 cho Opera 11
    • 22 cho Safari 4
    • 18 cho Safari 5
    • 11 trong IE 5.0, 5.5
  3. Trong IE / Edge, nếu không có tùy chọn nào, danh sách 11 mục từ trống cao đến mức ngu ngốc.

Đối với (3) ở trên, bạn có thể xem kết quả trong JSFiddle này


@scunliffe làm thế nào để thiết lập (1) trong chrome

Nếu bạn đặt size = "1" hoặc không đặt gì vì nó là mặc định thì lựa chọn của bạn sẽ là một menu thả xuống so với một dọc tĩnh trong Danh sách trang. Tuy nhiên, như đã lưu ý, chiều cao thả xuống thực tế được xác định bởi trình duyệt và là nhà phát triển, chúng tôi không có quyền kiểm soát chiều cao danh sách.
scunliffe

4
@scunliffe Mũ-off cho tội cung cấp :)
Shahil M

5

tôi đang làm việc trên một plugin jquery thay thế thả xuống để giải quyết vấn đề này. Đối với bài đăng này, nó gần như không thể phân biệt được với một trình đơn thả xuống gốc về giao diện và chức năng .

đây là bản demo (cũng là liên kết để tải xuống): http://programmingdrunk.com/current-projects/dropdownReplacement/

đây là trang dự án của plugin:

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

(cập nhật :) trang plugin jquery dường như không còn hoạt động. Tôi có thể sẽ không đặt plugin của mình trên trang web mới của họ khi chúng hoạt động, vì vậy, hãy sử dụng liên kết Progradrunk.com để demo / tải xuống


ý tưởng thú vị - tôi chắc chắn thích khả năng "lột xác" danh sách lựa chọn giả mạo (tôi thấy nhiều mặc định từ chủ đề hệ điều hành "gốc" và do đó trông "kỳ quặc") và khả năng kiểm soát nội dung trong danh sách mà tôi thấy hữu ích ( vì IE cung cấp rất ít tùy chọn tạo kiểu cho các phần tử tùy chọn)
scunliffe

Liên kết cuối cùng từ câu trả lời này đã chết!
Stephan

vâng, nhưng trang demo là một tài nguyên tốt hơn trang plugin. nó cũng có một bản tải xuống trên đó. Tôi xin cập nhật câu trả lời, cảm ơn
mkoryak

Điều này trông tuyệt vời: DI tự hỏi nếu bạn có thời gian để kiểm tra nó với một số phiên bản jquery mới hơn. Xin cảm ơn
Thang Pham

Tôi không, nhưng nếu bạn làm thế, cảm thấy tự do để báo cáo lại :) - thực sự tôi biết rằng nó hoạt động với 1.8.2
mkoryak

5

KHÔNG . Không thể thay đổi chiều cao của trình đơn thả xuống đã chọn vì thuộc tính đó là dành riêng cho trình duyệt.

Tuy nhiên, nếu bạn muốn có chức năng đó, thì có rất nhiều lựa chọn. Bạn có thể sử dụng bootstrap dropdown-menuvà xác định thuộc max-heighttính của nó . Một cái gì đó như thế này.

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

Trên thực tế, bạn loại có thể! Đừng gặp rắc rối với javascript ... Tôi chỉ bị mắc kẹt với điều tương tự đối với trang web tôi đang tạo và nếu bạn tăng thuộc tính 'font-size' trong CSS cho thẻ thì nó cũng tự động tăng chiều cao. Nhỏ nhắn nhưng đó là điều khiến tôi rất phiền lòng ha ha


Nó có nghĩa là gì ?
Anirudha Gupta

1
Tôi cho rằng mục tiêu sẽ là hiển thị nhiều lựa chọn hơn trong hộp thả xuống, chứ không chỉ đơn giản là chiếm nhiều dung lượng hơn, đó là những gì câu trả lời này sẽ làm.
JReader

0

Đây không phải là một giải pháp hoàn hảo nhưng nó có tác dụng.

Trong thẻ select, hãy bao gồm các thuộc tính sau, trong đó 'n' là số hàng thả xuống sẽ được hiển thị.

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

Có ba vấn đề với giải pháp này. 1) Có một flash nhanh chóng của tất cả các yếu tố được hiển thị trong lần nhấp chuột đầu tiên. 2) Vị trí được đặt thành 'tuyệt đối' 3) Ngay cả khi có ít hơn 'n' mục, hộp thả xuống sẽ vẫn dành cho kích thước của 'n' mục.


Tốt cố gắng nhưng không có may mắn, cũng đã thử thay thế nó bằng onFocus.
Ismail Iqbal

0

Các Chí Row Câu trả lời là một lựa chọn tốt cho vấn đề này, nhưng tôi đã tìm thấy một lỗi i các onclickđối số. Thay vào đó, sẽ là:

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

(Và đề cập rằng bạn phải thay thế " n " bằng số dòng bạn cần)


-2

Bạn có thể thay đổi chiều cao của một. Không sử dụng height="500"(Chỉ là một số ví dụ). Sử dụng phong cách. Bạn có thể sử dụng <style>thẻ hoặc chỉ sử dụng cái này:

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

Tôi nhận thấy sự thay đổi:

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

Và thậm chí tốt hơn ...

style="height: 100px;">

Bạn thấy điều đó?

Hãy bình chọn nếu nó hữu ích!


Câu hỏi về cách tạo kiểu chiều cao của thứ sẽ mở ra khi bạn nhấp vào một <select>phần tử, không phải chính phần tử đó. Tôi đã hỏi câu hỏi này hơn 10 năm trước khi việc tạo kiểu cho widget này thực tế là không thể. Tôi chắc chắn rằng đây không còn là trường hợp nữa.
mkoryak
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.