Trình đơn thả xuống
Chuyển đổi lớp phủ theo ngữ cảnh để hiển thị danh sách các liên kết và hơn thế nữa với plugin thả xuống Bootstrap.
Tổng quan
Danh sách thả xuống có thể chuyển đổi, các lớp phủ theo ngữ cảnh để hiển thị danh sách các liên kết và hơn thế nữa. Chúng được tạo tương tác với plugin JavaScript thả xuống Bootstrap đi kèm. Chúng được chuyển đổi bằng cách nhấp chuột, không phải bằng cách di chuột; đây là một quyết định thiết kế có chủ đích .
Trình đơn thả xuống được xây dựng trên thư viện của bên thứ ba, Popper , cung cấp khả năng định vị động và phát hiện chế độ xem. Đảm bảo bao gồm popper.min.js trước JavaScript của Bootstrap hoặc sử dụng bootstrap.bundle.min.js
/ bootstrap.bundle.js
có chứa Popper. Popper không được sử dụng để định vị danh sách thả xuống trong thanh điều hướng vì không cần định vị động.
Nếu bạn đang xây dựng JavaScript của chúng tôi từ nguồn, nó yêu cầuutil.js
.
Khả năng tiếp cận
Tiêu chuẩn WAI ARIA xác định một role="menu"
widget thực tế , nhưng điều này dành riêng cho các menu giống như ứng dụng để kích hoạt các hành động hoặc chức năng. Menu ARIA chỉ có thể chứa các mục menu, các mục menu hộp kiểm, các mục menu nút radio, nhóm nút radio và menu phụ.
Mặt khác, các trình đơn thả xuống của Bootstrap được thiết kế để chung chung và có thể áp dụng cho nhiều tình huống và cấu trúc đánh dấu khác nhau. Ví dụ: có thể tạo danh sách thả xuống chứa các đầu vào bổ sung và điều khiển biểu mẫu, chẳng hạn như trường tìm kiếm hoặc biểu mẫu đăng nhập. Vì lý do này, Bootstrap không mong đợi (cũng như không tự động thêm) bất kỳ thuộc tính role
và aria-
thuộc tính nào cần thiết cho các menu ARIA thực sự. Các tác giả sẽ phải tự bao gồm các thuộc tính cụ thể hơn này.
Tuy nhiên, Bootstrap bổ sung hỗ trợ tích hợp cho hầu hết các tương tác menu bàn phím tiêu chuẩn, chẳng hạn như khả năng di chuyển qua các .dropdown-item
phần tử riêng lẻ bằng cách sử dụng các phím con trỏ và đóng menu bằng ESCphím.
Các ví dụ
Bao bọc nút chuyển đổi của menu thả xuống (nút hoặc liên kết của bạn) và menu thả xuống bên trong .dropdown
hoặc một phần tử khác khai báo position: relative;
. Trình đơn thả xuống có thể được kích hoạt từ <a>
hoặc <button>
các yếu tố để phù hợp hơn với nhu cầu tiềm năng của bạn.
Một nút
Bất kỳ đĩa đơn .btn
nào cũng có thể được chuyển thành một trình đơn thả xuống với một số thay đổi về đánh dấu. Đây là cách bạn có thể đặt chúng hoạt động với một trong hai <button>
phần tử:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
Và với <a>
các yếu tố:
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
Phần tốt nhất là bạn cũng có thể làm điều này với bất kỳ biến thể nút nào:
<!-- Example single danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Action
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
Nút tách
Tương tự, tạo danh sách thả xuống nút tách với hầu như đánh dấu giống như danh sách thả xuống nút đơn, nhưng có bổ sung thêm .dropdown-toggle-split
khoảng cách thích hợp xung quanh dấu mũ thả xuống.
Chúng tôi sử dụng lớp bổ sung này để giảm padding
25% chiều ngang ở hai bên của dấu mũ và loại bỏ lớp margin-left
được thêm vào cho các nút thả xuống thông thường. Những thay đổi bổ sung đó giữ cho dấu mũ ở giữa trong nút tách và cung cấp một vùng nhấn có kích thước phù hợp hơn bên cạnh nút chính.
<!-- Example split danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Action</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
Định cỡ
Nút thả xuống hoạt động với các nút ở mọi kích thước, bao gồm cả nút thả xuống mặc định và nút chia nhỏ.
<!-- Large button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-lg" type="button">
Large split button
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
<!-- Small button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm" type="button">
Small split button
</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
Hướng
Dropup
Kích hoạt menu thả xuống phía trên các phần tử bằng cách thêm .dropup
vào phần tử mẹ.
<!-- Default dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
Chiếm đoạt
Kích hoạt menu thả xuống ở bên phải của các phần tử bằng cách thêm .dropright
vào phần tử mẹ.
<!-- Default dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropright
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary">
Split dropright
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropright</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
Giọt nước
Kích hoạt menu thả xuống ở bên trái của các phần tử bằng cách thêm .dropleft
vào phần tử mẹ.
<!-- Default dropleft button -->
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropleft
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropleft button -->
<div class="btn-group">
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropleft</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<button type="button" class="btn btn-secondary">
Split dropleft
</button>
</div>
Các mục menu
Trước đây, nội dung menu thả xuống phải là liên kết, nhưng điều đó không còn xảy ra với v4. Giờ đây, bạn có thể tùy chọn sử dụng <button>
các phần tử trong danh sách thả xuống của mình thay vì chỉ <a>
s.
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Bạn cũng có thể tạo các mục thả xuống không tương tác với .dropdown-item-text
. Thoải mái tạo kiểu thêm với các tiện ích văn bản hoặc CSS tùy chỉnh.
<div class="dropdown-menu">
<span class="dropdown-item-text">Dropdown item text</span>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
Tích cực
Thêm .active
vào các mục trong menu thả xuống để tạo kiểu cho chúng là hoạt động .
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item active" href="#">Active link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Vô hiệu hóa
Thêm .disabled
vào các mục trong menu thả xuống để tạo kiểu cho chúng là bị vô hiệu hóa .
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item disabled">Disabled link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Căn chỉnh menu
Theo mặc định, menu thả xuống tự động được định vị 100% từ trên cùng và dọc theo bên trái của trình đơn gốc. Thêm .dropdown-menu-right
vào a .dropdown-menu
để căn phải menu thả xuống.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Right-aligned menu
</button>
<div class="dropdown-menu dropdown-menu-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Căn chỉnh đáp ứng
Nếu bạn muốn sử dụng căn chỉnh đáp ứng, hãy tắt định vị động bằng cách thêm data-display="static"
thuộc tính và sử dụng các lớp biến thể đáp ứng.
Để căn phải menu thả xuống với điểm ngắt đã cho hoặc lớn hơn, hãy thêm .dropdown-menu{-sm|-md|-lg|-xl}-right
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Left-aligned but right aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-lg-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Để căn chỉnh bên trái menu thả xuống với điểm ngắt đã cho hoặc lớn hơn, hãy thêm .dropdown-menu-right
và .dropdown-menu{-sm|-md|-lg|-xl}-left
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Right-aligned but left aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-lg-left">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Lưu ý rằng bạn không cần thêm data-display="static"
thuộc tính vào các nút thả xuống trong thanh điều hướng, vì Popper không được sử dụng trong thanh điều hướng.
Nội dung menu
Tiêu đề
Thêm tiêu đề vào nhãn các phần hành động trong bất kỳ menu thả xuống nào.
<div class="dropdown-menu">
<h6 class="dropdown-header">Dropdown header</h6>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
</div>
Ngăn cách
Tách các nhóm các mục menu có liên quan bằng một dải phân cách.
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
Chữ
Đặt bất kỳ văn bản dạng tự do nào trong menu thả xuống với văn bản và sử dụng các tiện ích giãn cách . Lưu ý rằng bạn có thể sẽ cần các kiểu định cỡ bổ sung để hạn chế chiều rộng menu.
<div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
<p>
Some example text that's free-flowing within the dropdown menu.
</p>
<p class="mb-0">
And this is more example text.
</p>
</div>
Các hình thức
Đặt biểu mẫu trong menu thả xuống hoặc đưa biểu mẫu vào menu thả xuống và sử dụng các tiện ích lề hoặc đệm để tạo cho nó không gian âm mà bạn yêu cầu.
<div class="dropdown-menu">
<form class="px-4 py-3">
<div class="form-group">
<label for="exampleDropdownFormEmail1">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword1">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
</div>
<div class="form-group">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck">
<label class="form-check-label" for="dropdownCheck">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">New around here? Sign up</a>
<a class="dropdown-item" href="#">Forgot password?</a>
</div>
<form class="dropdown-menu p-4">
<div class="form-group">
<label for="exampleDropdownFormEmail2">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword2">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
</div>
<div class="form-group">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck2">
<label class="form-check-label" for="dropdownCheck2">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
Tùy chọn thả xuống
Sử dụng data-offset
hoặc data-reference
để thay đổi vị trí của menu thả xuống.
<div class="d-flex">
<div class="dropdown mr-1">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false" data-offset="10,20">
Offset
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary">Reference</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false" data-reference="parent">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
</div>
Cách sử dụng
Thông qua các thuộc tính dữ liệu hoặc JavaScript, plugin thả xuống chuyển đổi nội dung ẩn (menu thả xuống) bằng cách chuyển đổi .show
lớp trên cha mẹ .dropdown-menu
. Thuộc data-toggle="dropdown"
tính được dựa vào để đóng menu thả xuống ở cấp ứng dụng, vì vậy bạn nên luôn sử dụng nó.
$.noop
)
mouseover
vào các phần tử con ngay lập tức
<body>
. Việc hack được thừa nhận là xấu xí này là cần thiết để giải quyết một vấn
đề trong ủy quyền sự kiện của iOS , điều này sẽ ngăn không cho một lần nhấn ở bất kỳ đâu bên ngoài trình đơn thả xuống kích hoạt mã đóng trình đơn thả xuống. Sau khi trình đơn thả xuống bị đóng, những
mouseover
trình xử lý trống bổ sung này sẽ bị xóa.
Qua các thuộc tính dữ liệu
Thêm data-toggle="dropdown"
vào liên kết hoặc nút để chuyển đổi menu thả xuống.
<div class="dropdown">
<button type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu">
...
</div>
</div>
Qua JavaScript
Gọi các trình đơn thả xuống qua JavaScript:
$('.dropdown-toggle').dropdown()
data-toggle="dropdown"
vẫn được yêu cầu
Bất kể bạn gọi menu thả xuống của mình qua JavaScript hay thay vào đó sử dụng data-api, data-toggle="dropdown"
luôn bắt buộc phải có trên phần tử trình kích hoạt của menu thả xuống.
Tùy chọn
Các tùy chọn có thể được chuyển qua các thuộc tính dữ liệu hoặc JavaScript. Đối với các thuộc tính dữ liệu, hãy nối tên tùy chọn vào data-
, như trong data-offset=""
.
Tên | Loại hình | Mặc định | Sự mô tả |
---|---|---|---|
bù lại | số | chuỗi | hàm số | 0 | Phần bù của menu thả xuống so với mục tiêu của nó. Khi một hàm được sử dụng để xác định độ lệch, nó được gọi với một đối tượng chứa dữ liệu độ lệch làm đối số đầu tiên của nó. Hàm phải trả về một đối tượng có cùng cấu trúc. Nút DOM của phần tử kích hoạt được chuyển làm đối số thứ hai. Để biết thêm thông tin, hãy tham khảo tài liệu bù đắp của Popper . |
lật | boolean | thật | Cho phép Trình đơn thả xuống lật trong trường hợp có phần chồng chéo trên phần tử tham chiếu. Để biết thêm thông tin, hãy tham khảo tài liệu lật của Popper . |
ranh giới | chuỗi | yếu tố | 'scrollParent' | Ranh giới ràng buộc tràn của menu thả xuống. Chấp nhận các giá trị của , 'viewport' hoặc một tham chiếu HTMLElement (chỉ JavaScript). Để biết thêm thông tin, hãy tham khảo tài liệu Ngăn chặn dòng chảy của Popper .'window' 'scrollParent' |
tài liệu tham khảo | chuỗi | yếu tố | 'chuyển đổi' | Phần tử tham chiếu của menu thả xuống. Chấp nhận các giá trị 'toggle' hoặc 'parent' tham chiếu HTMLElement. Để biết thêm thông tin, hãy tham khảo tài liệu referenceObject của Popper . |
trưng bày | sợi dây | 'năng động' | Theo mặc định, chúng tôi sử dụng Popper để định vị động. Vô hiệu hóa điều này với static . |
popperConfig | null | sự vật | vô giá trị | Để thay đổi cấu hình Popper mặc định của Bootstrap, hãy xem cấu hình của Popper |
Lưu ý khi boundary
được đặt thành bất kỳ giá trị nào khác 'scrollParent'
, kiểu position: static
được áp dụng cho vùng .dropdown
chứa.
Phương pháp
Phương pháp | Sự mô tả |
---|---|
$().dropdown('toggle') |
Chuyển đổi menu thả xuống của một thanh điều hướng hoặc tab điều hướng nhất định. |
$().dropdown('show') |
Hiển thị menu thả xuống của thanh điều hướng hoặc tab điều hướng nhất định. |
$().dropdown('hide') |
Ẩn menu thả xuống của điều hướng theo tab hoặc thanh điều hướng nhất định. |
$().dropdown('update') |
Cập nhật vị trí của một phần tử thả xuống. |
$().dropdown('dispose') |
Hủy bỏ danh sách thả xuống của một phần tử. |
Sự kiện
Tất cả các sự kiện thả xuống đều được kích hoạt tại .dropdown-menu
phần tử mẹ của 'và có một relatedTarget
thuộc tính, có giá trị là phần tử neo chuyển đổi. hide.bs.dropdown
và hidden.bs.dropdown
các sự kiện có clickEvent
thuộc tính (chỉ khi loại sự kiện ban đầu là click
) chứa Đối tượng sự kiện cho sự kiện nhấp chuột.
Biến cố | Sự mô tả |
---|---|
show.bs.dropdown |
Sự kiện này kích hoạt ngay lập tức khi phương thức thể hiện show được gọi. |
shown.bs.dropdown |
Sự kiện này được kích hoạt khi menu thả xuống hiển thị cho người dùng (sẽ đợi quá trình chuyển đổi CSS hoàn tất). |
hide.bs.dropdown |
Sự kiện này được kích hoạt ngay lập tức khi phương thức ẩn thể hiện đã được gọi. |
hidden.bs.dropdown |
Sự kiện này được kích hoạt khi danh sách thả xuống hoàn tất bị ẩn khỏi người dùng (sẽ đợi quá trình chuyển đổi CSS hoàn tất). |
$('#myDropdown').on('show.bs.dropdown', function () {
// do something...
})