Chú giải công cụ
Tài liệu và ví dụ để thêm chú giải công cụ Bootstrap tùy chỉnh với CSS và JavaScript bằng cách sử dụng CSS3 cho hoạt ảnh và thuộc tính data-bs để lưu trữ tiêu đề cục bộ.
Tổng quan
Những điều cần biết khi sử dụng plugin chú giải công cụ:
- Chú giải công cụ dựa vào Popper thư viện của bên thứ ba để định vị. Bạn phải bao gồm popper.min.js trước đó
bootstrap.js
hoặc sử dụng một trongbootstrap.bundle.min.js
đó có Popper. - Chú giải công cụ được chọn tham gia vì lý do hiệu suất, vì vậy bạn phải tự khởi tạo chúng .
- Chú giải công cụ có tiêu đề dài bằng 0 không bao giờ được hiển thị.
- Chỉ định
container: 'body'
để tránh các sự cố hiển thị trong các thành phần phức tạp hơn (như nhóm đầu vào, nhóm nút của chúng tôi, v.v.). - Kích hoạt chú giải công cụ trên các phần tử ẩn sẽ không hoạt động.
- Chú giải công cụ cho
.disabled
hoặcdisabled
các phần tử phải được kích hoạt trên một phần tử trình bao bọc. - Khi được kích hoạt từ các siêu liên kết trải dài nhiều dòng, chú giải công cụ sẽ được căn giữa. Sử dụng
white-space: nowrap;
trên<a>
s của bạn để tránh hành vi này. - Chú giải công cụ phải được ẩn trước khi các phần tử tương ứng của chúng bị xóa khỏi DOM.
- Chú giải công cụ có thể được kích hoạt nhờ vào một phần tử bên trong DOM bóng.
Có tất cả những điều đó? Tuyệt vời, hãy xem chúng hoạt động như thế nào với một số ví dụ.
prefers-reduced-motion
truy vấn phương tiện. Xem phần
chuyển động giảm trong tài liệu hỗ trợ tiếp cận của chúng tôi .
Các ví dụ
Bật chú giải công cụ
Như đã đề cập ở trên, bạn phải khởi tạo chú giải công cụ trước khi chúng có thể được sử dụng. Một cách để khởi tạo tất cả các chú giải công cụ trên một trang là chọn chúng theo data-bs-toggle
thuộc tính của chúng, như sau:
const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]')
const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl))
Chú giải công cụ về liên kết
Di chuột qua các liên kết bên dưới để xem các chú giải công cụ:
Văn bản giữ chỗ để chứng minh một số liên kết nội dòng với chú giải công cụ. Đây chỉ là chất làm đầy, không có kẻ giết người. Nội dung được đặt ở đây chỉ để bắt chước sự hiện diện của văn bản thực . Và tất cả những điều đó chỉ để cung cấp cho bạn ý tưởng về cách các chú giải công cụ sẽ trông như thế nào khi được sử dụng trong các tình huống thực tế. Vì vậy, hy vọng bây giờ bạn đã thấy cách các chú giải công cụ này trên các liên kết có thể hoạt động trong thực tế, khi bạn sử dụng chúng trên trang web hoặc dự án của riêng mình .
<p class="muted">Placeholder text to demonstrate some <a href="#" data-bs-toggle="tooltip" data-bs-title="Default tooltip">inline links</a> with tooltips. This is now just filler, no killer. Content placed here just to mimic the presence of <a href="#" data-bs-toggle="tooltip" data-bs-title="Another tooltip">real text</a>. And all that just to give you an idea of how tooltips would look when used in real-world situations. So hopefully you've now seen how <a href="#" data-bs-toggle="tooltip" data-bs-title="Another one here too">these tooltips on links</a> can work in practice, once you use them on <a href="#" data-bs-toggle="tooltip" data-bs-title="The last tip!">your own</a> site or project.
</p>
title
hoặc
data-bs-title
trong HTML của bạn. Khi nào
title
được sử dụng, Popper sẽ tự động thay thế nó bằng
data-bs-title
khi phần tử được hiển thị.
Chú giải công cụ tùy chỉnh
Đã thêm vào v5.2.0Bạn có thể tùy chỉnh sự xuất hiện của chú giải công cụ bằng cách sử dụng các biến CSS . Chúng tôi đặt một lớp tùy chỉnh với data-bs-custom-class="custom-tooltip"
phạm vi giao diện tùy chỉnh của chúng tôi và sử dụng nó để ghi đè một biến CSS cục bộ.
.custom-tooltip {
--bs-tooltip-bg: var(--bs-primary);
}
<button type="button" class="btn btn-secondary"
data-bs-toggle="tooltip" data-bs-placement="top"
data-bs-custom-class="custom-tooltip"
data-bs-title="This top tooltip is themed via CSS variables.">
Custom tooltip
</button>
Hướng
Di chuột qua các nút bên dưới để xem bốn hướng của chú giải công cụ: trên cùng, bên phải, dưới cùng và bên trái. Chỉ đường được phản chiếu khi sử dụng Bootstrap trong RTL.
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="Tooltip on top">
Tooltip on top
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="Tooltip on right">
Tooltip on right
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="Tooltip on bottom">
Tooltip on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="Tooltip on left">
Tooltip on left
</button>
Và với HTML tùy chỉnh được thêm vào:
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
Tooltip with HTML
</button>
Với SVG:
CSS
Biến
Đã thêm vào v5.2.0Là một phần của phương pháp tiếp cận các biến CSS đang phát triển của Bootstrap, các chú giải công cụ hiện sử dụng các biến CSS cục bộ trên .tooltip
để tùy chỉnh thời gian thực nâng cao. Giá trị cho các biến CSS được đặt thông qua Sass, do đó, tùy chỉnh Sass cũng vẫn được hỗ trợ.
--#{$prefix}tooltip-zindex: #{$zindex-tooltip};
--#{$prefix}tooltip-max-width: #{$tooltip-max-width};
--#{$prefix}tooltip-padding-x: #{$tooltip-padding-x};
--#{$prefix}tooltip-padding-y: #{$tooltip-padding-y};
--#{$prefix}tooltip-margin: #{$tooltip-margin};
@include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size);
--#{$prefix}tooltip-color: #{$tooltip-color};
--#{$prefix}tooltip-bg: #{$tooltip-bg};
--#{$prefix}tooltip-border-radius: #{$tooltip-border-radius};
--#{$prefix}tooltip-opacity: #{$tooltip-opacity};
--#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width};
--#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height};
Biến Sass
$tooltip-font-size: $font-size-sm;
$tooltip-max-width: 200px;
$tooltip-color: $white;
$tooltip-bg: $black;
$tooltip-border-radius: $border-radius;
$tooltip-opacity: .9;
$tooltip-padding-y: $spacer * .25;
$tooltip-padding-x: $spacer * .5;
$tooltip-margin: null; // TODO: remove this in v6
$tooltip-arrow-width: .8rem;
$tooltip-arrow-height: .4rem;
// fusv-disable
$tooltip-arrow-color: null; // Deprecated in Bootstrap 5.2.0 for CSS variables
// fusv-enable
Cách sử dụng
Plugin chú giải công cụ tạo nội dung và đánh dấu theo yêu cầu và theo mặc định đặt chú giải công cụ sau phần tử kích hoạt của chúng.
Kích hoạt chú giải công cụ qua JavaScript:
const exampleEl = document.getElementById('example')
const tooltip = new bootstrap.Tooltip(exampleEl, options)
Tràn auto
vàscroll
Vị trí chú giải công cụ cố gắng tự động thay đổi khi vùng chứa chính có overflow: auto
hoặc overflow: scroll
giống như của chúng tôi .table-responsive
, nhưng vẫn giữ vị trí của vị trí ban đầu. Để giải quyết vấn đề này, hãy đặt boundary
tùy chọn (đối với công cụ sửa đổi lật sử dụng popperConfig
tùy chọn) thành bất kỳ HTMLElement nào để ghi đè giá trị mặc định 'clippingParents'
, chẳng hạn như document.body
:
const tooltip = new bootstrap.Tooltip('#example', {
boundary: document.body // or document.querySelector('#boundary')
})
Đánh dấu
Đánh dấu bắt buộc cho chú giải công cụ chỉ là một data
thuộc tính và title
trên phần tử HTML mà bạn muốn có chú giải công cụ. Đánh dấu được tạo của chú giải công cụ khá đơn giản, mặc dù nó yêu cầu một vị trí (theo mặc định, được đặt thành top
bởi plugin).
Làm cho chú giải công cụ hoạt động cho người dùng bàn phím và công nghệ hỗ trợ
Bạn chỉ nên thêm chú giải công cụ vào các phần tử HTML truyền thống có thể lấy tiêu điểm bằng bàn phím và tương tác (chẳng hạn như liên kết hoặc điều khiển biểu mẫu). Mặc dù các phần tử HTML tùy ý (chẳng hạn như <span>
các) có thể được đặt tiêu điểm bằng cách thêm tabindex="0"
thuộc tính, điều này sẽ thêm các điểm dừng tab có thể gây khó chịu và khó hiểu trên các phần tử không tương tác cho người dùng bàn phím và hầu hết các công nghệ hỗ trợ hiện không thông báo chú giải công cụ trong trường hợp này. Ngoài ra, đừng chỉ dựa vào hover
làm trình kích hoạt cho chú giải công cụ của bạn, vì điều này sẽ khiến chú giải công cụ của bạn không thể kích hoạt cho người dùng bàn phím.
<!-- HTML to write -->
<a href="#" data-bs-toggle="tooltip" data-bs-title="Some tooltip text!">Hover over me</a>
<!-- Generated markup by the plugin -->
<div class="tooltip bs-tooltip-top" role="tooltip">
<div class="tooltip-arrow"></div>
<div class="tooltip-inner">
Some tooltip text!
</div>
</div>
Các phần tử bị vô hiệu hóa
Các phần tử có disabled
thuộc tính không tương tác, có nghĩa là người dùng không thể tập trung, di chuột hoặc nhấp vào chúng để kích hoạt chú giải công cụ (hoặc cửa sổ bật lên). Để giải quyết vấn đề này, bạn sẽ muốn kích hoạt chú giải công cụ từ một trình bao bọc <div>
hoặc <span>
lý tưởng là có thể lấy tiêu điểm bằng bàn phím tabindex="0"
.
<span class="d-inline-block" tabindex="0" data-bs-toggle="tooltip" data-bs-title="Disabled tooltip">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
Tùy chọn
Vì các tùy chọn có thể được chuyển qua thuộc tính dữ liệu hoặc JavaScript, bạn có thể thêm tên tùy chọn vào data-bs-
, như trong data-bs-animation="{value}"
. Đảm bảo thay đổi kiểu chữ hoa của tên tùy chọn từ “ camelCase ” thành “ kebab-case ” khi chuyển các tùy chọn qua thuộc tính dữ liệu. Ví dụ, sử dụng data-bs-custom-class="beautifier"
thay vì data-bs-customClass="beautifier"
.
Kể từ Bootstrap 5.2.0, tất cả các thành phần đều hỗ trợ thuộc tính dữ liệu dành riêng thử nghiệmdata-bs-config
có thể chứa cấu hình thành phần đơn giản dưới dạng chuỗi JSON. Khi một phần tử có data-bs-config='{"delay":0, "title":123}'
và data-bs-title="456"
các thuộc tính, title
giá trị cuối cùng sẽ là 456
và các thuộc tính dữ liệu riêng biệt sẽ ghi đè các giá trị được cho trên data-bs-config
. Ngoài ra, các thuộc tính dữ liệu hiện có có thể chứa các giá trị JSON như data-bs-delay='{"show":0,"hide":150}'
.
sanitize
,
các tùy chọn sanitizeFn
và và
allowList
không thể được cung cấp bằng các thuộc tính dữ liệu.
Tên | Loại hình | Mặc định | Sự mô tả |
---|---|---|---|
allowList |
sự vật | Giá trị mặc định | Đối tượng chứa các thuộc tính và thẻ được phép. |
animation |
boolean | true |
Áp dụng chuyển đổi mờ dần CSS cho chú giải công cụ. |
boundary |
chuỗi, phần tử | 'clippingParents' |
Ranh giới ràng buộc tràn của chú giải công cụ (chỉ áp dụng cho công cụ sửa đổi ngăn chặn dòng chảy của Popper). Theo mặc định, nó 'clippingParents' và có thể chấp nhận một tham chiếu HTMLElement (chỉ qua JavaScript). Để biết thêm thông tin, hãy tham khảo tài liệu DetOverflow của Popper . |
container |
chuỗi, phần tử, sai | false |
Thêm chú giải công cụ vào một phần tử cụ thể. container: 'body' Ví dụ :. Tùy chọn này đặc biệt hữu ích ở chỗ nó cho phép bạn định vị chú giải công cụ trong luồng tài liệu gần phần tử kích hoạt - điều này sẽ ngăn chú giải công cụ trôi ra khỏi phần tử kích hoạt trong quá trình thay đổi kích thước cửa sổ. |
customClass |
chuỗi, hàm | '' |
Thêm các lớp vào chú giải công cụ khi nó được hiển thị. Lưu ý rằng các lớp này sẽ được thêm vào ngoài bất kỳ lớp nào được chỉ định trong mẫu. Để thêm nhiều lớp, hãy phân tách chúng bằng dấu cách 'class-1 class-2' :. Bạn cũng có thể chuyển một hàm sẽ trả về một chuỗi đơn chứa các tên lớp bổ sung. |
delay |
số lượng, đối tượng | 0 |
Độ trễ hiển thị và ẩn chú giải công cụ (mili giây) —không áp dụng cho loại trình kích hoạt thủ công. Nếu một số được cung cấp, độ trễ được áp dụng cho cả ẩn / hiện. delay: { "show": 500, "hide": 100 } Cấu trúc đối tượng là:. |
fallbackPlacements |
mảng | ['top', 'right', 'bottom', 'left'] |
Xác định vị trí dự phòng bằng cách cung cấp danh sách các vị trí trong mảng (theo thứ tự ưu tiên). Để biết thêm thông tin, hãy tham khảo tài liệu về hành vi của Popper . |
html |
boolean | false |
Cho phép HTML trong chú giải công cụ. Nếu đúng, các thẻ HTML trong chú giải công cụ title sẽ được hiển thị trong chú giải công cụ. Nếu sai, innerText thuộc tính sẽ được sử dụng để chèn nội dung vào DOM. Sử dụng văn bản nếu bạn lo lắng về các cuộc tấn công XSS. |
offset |
mảng, chuỗi, hàm | [0, 0] |
Phần bù của chú giải công cụ so với mục tiêu của nó. data-bs-offset="10,20" Bạn có thể chuyển một chuỗi vào thuộc tính dữ liệu với các giá trị được phân tách bằng dấu phẩy như:. 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 vị trí popper, tham chiếu và popper đóng vai trò là đối số đầu tiên của nó. Nút DOM của phần tử kích hoạt được chuyển làm đối số thứ hai. Hàm phải trả về một mảng có hai số: độ trượt , khoảng cách . Để biết thêm thông tin, hãy tham khảo tài liệu bù đắp của Popper . |
placement |
chuỗi, hàm | 'top' |
Cách định vị chú giải công cụ: tự động, trên cùng, dưới cùng, trái, phải. Khi auto được chỉ định, nó sẽ tự động định hướng lại chú giải công cụ. Khi một hàm được sử dụng để xác định vị trí, nó được gọi với nút DOM của chú giải công cụ làm đối số đầu tiên và nút DOM phần tử kích hoạt là nút thứ hai của nó. Bối this cảnh được đặt thành phiên bản chú giải công cụ. |
popperConfig |
null, đối tượng, chức năng | null |
Để thay đổi cấu hình Popper mặc định của Bootstrap, hãy xem cấu hình của Popper . Khi một hàm được sử dụng để tạo cấu hình Popper, nó được gọi với một đối tượng có chứa cấu hình Popper mặc định của Bootstrap. Nó giúp bạn sử dụng và hợp nhất mặc định với cấu hình của riêng bạn. Hàm phải trả về một đối tượng cấu hình cho Popper. |
sanitize |
boolean | true |
Bật hoặc tắt tính năng vệ sinh. Nếu được kích hoạt 'template' , 'content' và 'title' các tùy chọn sẽ được làm sạch. |
sanitizeFn |
null, hàm | null |
Tại đây bạn có thể cung cấp chức năng khử trùng của riêng mình. Điều này có thể hữu ích nếu bạn muốn sử dụng một thư viện chuyên dụng để thực hiện vệ sinh. |
selector |
chuỗi, sai | false |
Nếu một bộ chọn được cung cấp, các đối tượng chú giải công cụ sẽ được ủy quyền cho các mục tiêu được chỉ định. Trong thực tế, điều này cũng được sử dụng để áp dụng chú giải công cụ cho các phần tử DOM được thêm động ( jQuery.on hỗ trợ). Xem vấn đề này và một ví dụ thông tin . |
template |
sợi dây | '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' |
HTML cơ sở để sử dụng khi tạo chú giải công cụ. Chú giải công cụ title sẽ được đưa vào .tooltip-inner . .tooltip-arrow sẽ trở thành mũi tên của chú giải công cụ. Phần tử bao bọc ngoài cùng phải có .tooltip lớp và role="tooltip" . |
title |
chuỗi, phần tử, hàm | '' |
Giá trị tiêu đề mặc định nếu title thuộc tính không có. Nếu một hàm được cung cấp, nó sẽ được gọi với this tập tham chiếu của nó tới phần tử mà cửa sổ bật lên được gắn vào. |
trigger |
sợi dây | 'hover focus' |
Cách kích hoạt chú giải công cụ: nhấp chuột, di chuột, tiêu điểm, thủ công. Bạn có thể vượt qua nhiều lần kích hoạt; ngăn cách chúng bằng một khoảng trắng. 'manual' cho biết rằng chú giải công cụ sẽ được kích hoạt theo chương trình thông qua .tooltip('show') , .tooltip('hide') và .tooltip('toggle') các phương thức; giá trị này không thể được kết hợp với bất kỳ trình kích hoạt nào khác. 'hover' riêng nó sẽ dẫn đến các chú giải công cụ không thể được kích hoạt thông qua bàn phím và chỉ nên được sử dụng nếu có các phương pháp thay thế để truyền tải cùng một thông tin cho người dùng bàn phím. |
Thuộc tính dữ liệu cho các chú giải công cụ riêng lẻ
Ngoài ra, các tùy chọn cho chú giải công cụ riêng lẻ có thể được chỉ định thông qua việc sử dụng các thuộc tính dữ liệu, như đã giải thích ở trên.
Sử dụng chức năng vớipopperConfig
const tooltip = new bootstrap.Tooltip(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Phương pháp
Các phương thức và chuyển tiếp không đồng bộ
Tất cả các phương thức API là không đồng bộ và bắt đầu quá trình chuyển đổi . Họ quay lại người gọi ngay sau khi quá trình chuyển đổi được bắt đầu nhưng trước khi quá trình chuyển đổi kết thúc . Ngoài ra, một lệnh gọi phương thức trên một thành phần chuyển tiếp sẽ bị bỏ qua .
Xem tài liệu JavaScript của chúng tôi để biết thêm thông tin .
Phương pháp | Sự mô tả |
---|---|
disable |
Loại bỏ khả năng hiển thị chú giải công cụ của phần tử. Chú giải công cụ sẽ chỉ có thể được hiển thị nếu nó được bật lại. |
dispose |
Ẩn và hủy chú giải công cụ của phần tử (Xóa dữ liệu được lưu trữ trên phần tử DOM). Chú giải công cụ sử dụng ủy quyền (được tạo bằng cách sử dụng tùy selector chọn ) không thể bị hủy riêng lẻ trên các phần tử kích hoạt con. |
enable |
Cung cấp cho chú giải công cụ của một phần tử khả năng được hiển thị. Chú giải công cụ được bật theo mặc định. |
getInstance |
Phương thức tĩnh cho phép bạn lấy phiên bản chú giải công cụ được liên kết với phần tử DOM hoặc tạo một phiên bản mới trong trường hợp nó chưa được khởi tạo. |
getOrCreateInstance |
Phương thức tĩnh cho phép bạn lấy phiên bản chú giải công cụ được liên kết với phần tử DOM hoặc tạo một phiên bản mới trong trường hợp nó chưa được khởi tạo. |
hide |
Ẩn chú giải công cụ của phần tử. Trả về trình gọi trước khi chú giải công cụ thực sự bị ẩn (tức là trước khi hidden.bs.tooltip sự kiện xảy ra). Đây được coi là cách kích hoạt "thủ công" của chú giải công cụ. |
setContent |
Cung cấp một cách để thay đổi nội dung của chú giải công cụ sau khi khởi chạy. |
show |
Tiết lộ chú giải công cụ của một phần tử. Trả về trình gọi trước khi chú giải công cụ thực sự được hiển thị (tức là trước khi shown.bs.tooltip sự kiện xảy ra). Đây được coi là cách kích hoạt "thủ công" của chú giải công cụ. Chú giải công cụ có tiêu đề dài bằng 0 không bao giờ được hiển thị. |
toggle |
Chuyển đổi chú giải công cụ của phần tử. Trả về trình gọi trước khi chú giải công cụ thực sự được hiển thị hoặc bị ẩn (nghĩa là trước khi sự kiện shown.bs.tooltip hoặc hidden.bs.tooltip sự kiện xảy ra). Đây được coi là cách kích hoạt "thủ công" của chú giải công cụ. |
toggleEnabled |
Chuyển đổi khả năng hiển thị hoặc ẩn chú giải công cụ của phần tử. |
update |
Cập nhật vị trí của chú giải công cụ của phần tử. |
const tooltip = bootstrap.Tooltip.getInstance('#example') // Returns a Bootstrap tooltip instance
// setContent example
tooltip.setContent({ '.tooltip-inner': 'another title' })
setContent
thức chấp nhận một
object
đối số, trong đó mỗi khóa thuộc tính là một
string
bộ chọn hợp lệ trong mẫu cửa sổ bật lên và mỗi giá trị thuộc tính liên quan có thể là
string
|
element
|
function
|
null
Sự kiện
Biến cố | Sự mô tả |
---|---|
hide.bs.tooltip |
Sự kiện này được kích hoạt ngay lập tức khi hide phương thức thể hiện đã được gọi. |
hidden.bs.tooltip |
Sự kiện này được kích hoạt khi cửa sổ bật lên 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). |
inserted.bs.tooltip |
Sự kiện này được kích hoạt sau show.bs.tooltip sự kiện khi mẫu chú giải công cụ đã được thêm vào DOM. |
show.bs.tooltip |
Sự kiện này kích hoạt ngay lập tức khi show phương thức thể hiện được gọi. |
shown.bs.tooltip |
Sự kiện này được kích hoạt khi cửa sổ bật lên hiển thị cho người dùng (sẽ đợi quá trình chuyển đổi CSS hoàn tất). |
const myTooltipEl = document.getElementById('myTooltip')
const tooltip = bootstrap.Tooltip.getOrCreateInstance(myTooltipEl)
myTooltipEl.addEventListener('hidden.bs.tooltip', () => {
// do something...
})
tooltip.hide()