Bootstrap 版本 5.3.3
前言
先前在實作 Bootstrap5 中 Popovers 的時候,在內容處除了文字之外,還需要加入輸入框、按鈕等 (如下圖),以下來分享 Popovers 基本使用以及如何客製化內容結構。
基本使用
這邊需要注意兩件事情:
- 記得要載入 Bootstrap JS
- 必須手動初始化
首先我們先複製官方文件提供的範例,確保可以正常使用。
這邊來說明一下範例中的屬性 :
1 | <button |
data-bs-toggle
: 使 popover 開啟或關閉data-bs-title
: 以官方範例來說就是灰底區塊的文字data-bs-content
: 白底區塊的內容文字
既然要更動 content 的內容,那就直接在 data-bs-content
修改成 HTML 結構就好了吧?
但是實際改成 data-bs-content="<p>我是文字</p>"
後會發現,點開 popover 顯示的會是包含 HTML 標籤的 <p>我是文字</p>
XD
如何客製化內容結構
那要如何解決上述的問題呢?
在 HTML 標籤加入 data-bs-html="true"
可以使 data-bs-content
的內容以 HTML 格式渲染,但是當結構較為複雜時,這樣做似乎不是一個好辦法。
於是改成如下的寫法 :
1 | <!-- index.html --> |
1 | // index.js |
(原本官方範例是用 querySelectorAll 來一次選取所有 popover,這邊因為內容都是獨立的,所以只選取單一元素)
(為了方便說明,這邊把 title 屬性拿掉,有需要再加上去即可)
在初始化的時候可以設定許多選項,我們將這些選項移至初始化時來做設定,這邊針對其中幾個作說明 :
container
: 可以指定要在哪個位置渲染,當如果有需要吃到特定父層的樣式時,就可以在這邊設定使 popover 在該父層內部做渲染。html
: 設定為 true (預設是 false) 的話即可接受 HTML 格式,HTML 標籤就不會外露在畫面上。content
: 當 html 設定為 true ,可以直接在這邊輸入 HTML 結構,比如content: '<p>123</p>'
這邊把 HTML 結構放在 HTML 檔案中並用 .d-none
包住,避免直接顯示在畫面上。接著在 .d-none
以及 HTML 結構中插入一個 div
並給予 id。最後在 content
我們就可以選取該 id 元素,當點開 popover 時,就可以看到整個結構都出現在畫面上了~
如此一來,就可以讓 HTML 結構的內容就歸在 HTML 檔案中,不會讓整陀複雜的結構出現在 js 檔案中了。
其他好用的選項
這邊也分享幾個自己覺得挺好用的設定,所有選項見官方文件
調整 popover 的位置
預設的 popover 箭頭都會出現在上下左右邊的正中間,我們可以透過 offset
選項來調整位置。
1 | const cusPopoverItem = new bootstrap.Popover(cusPopover, { |
點空白處關閉 popover
預設需要點擊按鈕才可以關閉 popover,我們可以透過 trigger
選項來調整。
1 | const cusPopoverItem = new bootstrap.Popover(cusPopover, { |