折疊 (Collapse)
在專案中透過 Boostrap 的類別及 JavaScript 插件切換內容的可視性。
如何運作
JavaScript 的摺疊插件被用於顯示和隱藏內容。按鈕、錨點被用作為觸發器,對應到需要被切換的元素上。折疊一個元素會將它的 height
從當前的值轉換為 0
。基於 CSS 處理動畫的方式,你不能在帶有 .collapse
的元素上使用 padding
; 相反的,應該把它作為獨立的包裝元素。
prefers-reduced-motion
media queries。請參考 reduced motion section of our accessibility documentation
範例
點擊以下按鈕,透過改變 Class 來顯示及隱藏另一個元素:
.collapse
隱藏內容。.collapsing
會在轉換的過程中被套用。.collapse.show
顯示內容。
通常,我們建議使用帶有 data-bs-target
屬性的按鈕。 從語義的角度來看,雖然不建議這樣做,但您也可以使用帶有 href
屬性(和role ="button"
)的連結。 在這兩種情況下,都需要data-bs-toggle="collapse"
。
<p>
<a class="btn btn-primary" data-bs-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
Link with href
</a>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
Button with data-bs-target
</button>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
Some placeholder content for the collapse component. This panel is hidden by default but revealed when the user activates the relevant trigger.
</div>
</div>
多個目標
<button>
或 <a>
標籤可以用來顯示與隱藏元素,需要在它們的 data-bs-target
或是 href
屬性內部引用選擇器。同一個元素可以被多個 <button>
或 <a>
控制以顯示或隱藏,只要它們都有透過 data-bs-target
或是 href
對其進行引用。
<p>
<a class="btn btn-primary" data-bs-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Toggle first element</a>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Toggle second element</button>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Toggle both elements</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample1">
<div class="card card-body">
Some placeholder content for the first collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample2">
<div class="card card-body">
Some placeholder content for the second collapse component of this multi-collapse example. This panel is hidden by default but revealed when the user activates the relevant trigger.
</div>
</div>
</div>
</div>
親和性
確保有在控制元素中添加 aria-expanded
。該屬性明確地向螢幕閱讀器、類似的輔助技術之控制元件傳達可折疊元素的當前狀態。如果可折疊元素預設為關閉,則控制項元素上的屬性值應為 aria-expanded="false"
; 如果您使用 show
將可折疊元素設置為預設打開,則應在控制項上設置 aria-expanded="true"
。插件將根據可折疊元素目前的狀態 (開啟與否) 自動切換控制項上的這個屬性 (透過 JavaScript,或是當使用者觸發了綁定到相同折疊元素的另一個控制項元素)。如果控制的 HTML 元素不是按鈕 (例如: <a>
或 <div>
),那麼 role="button"
屬性應該被加到元素中。
如果你的控制元素鎖定了一個單一的可折疊元素 (即 data-bs-target
屬性指向的是 id
選擇器),則應該在控制元素上添加 aria-controls
屬性,且內部包含了可折疊元素之 id
。現代的螢幕閱讀器、類似的輔助技術都利用此屬性為用戶提供額外的快捷方式以直接導航到可折疊元素。
請注意,Bootstrap 當前的折疊應用未涵蓋 WAI-ARIA Authoring Practices 1.1 accordion pattern 所描述的多種 選擇性的 鍵盤操作,你需要自訂 JavaScript 來實現這些內容。
Sass
Variables
$transition-collapse: height .35s ease;
Classes
Collapse transition classes can be found in scss/_transitions.scss
as these are shared across multiple components (collapse and accordion).
.collapse {
&:not(.show) {
display: none;
}
}
.collapsing {
height: 0;
overflow: hidden;
@include transition($transition-collapse);
}
用法 {usage}
折疊插件使用一些 Class 來處理這些繁雜工作。
.collapse
隱藏內容。.collapse.show
顯示內容。.collapsing
會在轉換開始時被加入,並在結束的時候被移除。
這些類別可以在 _transitions.scss
中被找到.
透過資料屬性
只需將 data-bs-toggle="collapse"
以及 data-bs-target
加入元素即可自動指定控制一個或多個可折疊元素。data-bs-target
屬性接受 CSS 選擇器以套用摺疊。請確保有在可折疊元素上添加 collapse
類別。如果希望它預設是打開的,加上額外的類別 .show
。
如果要在一個可折疊區域加入可折疊群組,加入 data-bs-parent="#selector"
資料屬性。可以參考範例中的效果。
透過 JavaScript
透過以下語法手動啟用:
var collapseElementList = [].slice.call(document.querySelectorAll('.collapse'))
var collapseList = collapseElementList.map(function (collapseEl) {
return new bootstrap.Collapse(collapseEl)
})
選項
選項可以透過資料屬性或是 JavaScript 加入。對於資料屬性,將選項名稱加入 data-bs-
, 如 data-bs-parent=""
。
Name | Type | Default | Description |
---|---|---|---|
parent |
selector | jQuery object | DOM element | false |
如果加入了 parent,則當可折疊物件為顯示時,指定父項下的所有可折疊元素將被關閉。(類似于傳統的折疊控制項行為 - 這取決於 card )。該屬性必須在目標可折疊區域上設置。 |
toggle |
boolean | true |
切換可折疊元素 |
方法
Asynchronous methods and transitions
All API methods are asynchronous and start a transition. They return to the caller as soon as the transition is started but before it ends. In addition, a method call on a transitioning component will be ignored.
將內容啟用為可摺疊元素。接受一個選擇性的選項 object
。
可以透過建構函式建立一個摺疊範例,舉例來說:
var myCollapse = document.getElementById('myCollapse')
var bsCollapse = new bootstrap.Collapse(myCollapse, {
toggle: false
})
Method | Description |
---|---|
toggle |
將一個可折疊元素切換為顯示或隱藏。在可折疊元素實際顯示或隱藏之前返回給調用者。 (即在 shown.bs.collapse 或 hidden.bs.collapse 事件發生之前)。 |
show |
顯示一個可折疊元素。在可折疊元素實際顯示之前返回給調用者。 (例如, shown.bs.collapse 事件發生前). |
hide |
隱藏一個可折疊元素。在可折疊元素實際被隱藏之前返回給調用者。 (例如, 在 hidden.bs.collapse 事件發生之前)。 |
dispose |
銷毀一個元素的折疊。 (移除 DOM 元素上儲存的資料) |
getInstance |
允許你獲取與 DOM 元素關聯之折疊範例的靜態方法。 |
事件
Bootstrap 提供一些事件給予折疊使用。
Event type | Description |
---|---|
show.bs.collapse |
當調用show 範例方法時,會立即觸發此事件。 |
shown.bs.collapse |
當折疊元素顯示為可見時,會觸發此事件(將等待 CSS 轉換完成)。 |
hide.bs.collapse |
當調用 hide 方式時,會立即觸發此事件。 |
hidden.bs.collapse |
當折疊元素被隱藏時,會觸發此事件(將等待 CSS 轉換完成)。 |
var myCollapsible = document.getElementById('myCollapsible')
myCollapsible.addEventListener('hidden.bs.collapse', function () {
// do something...
})