跳至主要內容
版本:v8

ion-accordion

陰影

手風琴在您的內容中提供可摺疊的區段,以減少垂直空間,同時提供組織和分組資訊的方法。所有 ion-accordion 組件都應分組在 ion-accordion-group 組件內。

基本用法

切換手風琴

哪個手風琴是打開的,是由設定 ion-accordion-group 上的 value 屬性來控制。設定此屬性可讓開發人員以程式方式展開或摺疊特定手風琴。

監聽手風琴狀態變更

注意

大多數由其他組件(例如 InputTextarea)發出的 ionChange 事件會冒泡。因此,如果相關組件在手風琴內使用,這些事件將會冒泡並導致您在手風琴群組上的 ionChange 監聽器觸發。

當在手風琴內使用其他發出 ionChange 的組件時,建議手風琴群組上的 ionChange 回呼檢查傳遞給回呼的事件上的 target 鍵,以驗證 ionChange 是否來自手風琴群組,而不是任何子代。

開發人員可以監聽 ionChange 事件,以在手風琴展開或摺疊時收到通知。

主控台
從上面的範例記錄時,主控台訊息將會顯示在這裡。

多個手風琴

開發人員可以使用 multiple 屬性,允許同時開啟多個手風琴。

停用手風琴

個別手風琴

可以使用 ion-accordion 上的 disabled 屬性停用個別手風琴。

手風琴群組

可以使用 ion-accordion-group 上的 disabled 屬性停用手風琴群組。

唯讀手風琴

個別手風琴

可以使用 ion-accordion 上的 readonly 屬性停用個別手風琴。

手風琴群組

可以使用 ion-accordion-group 上的 readonly 屬性停用手風琴群組。

結構

header 插槽用作將展開或摺疊手風琴的切換。我們建議您在這裡使用 ion-item 以利用輔助功能和主題功能。

header 插槽中使用 ion-item 時,ion-itembutton 屬性會設定為 true,且 detail 屬性會設定為 false。此外,我們也會自動將切換圖示新增至 ion-item。當您展開或摺疊手風琴時,此圖示會自動旋轉。如需詳細資訊,請參閱自訂圖示

內容

content 插槽用作手風琴的一部分,該部分會根據您的手風琴狀態顯示或隱藏。您可以將任何內容放在此處,除了另一個 ion-content 實例,因為每個頁面只能新增一個 ion-content 實例。

自訂

展開樣式

有兩種內建展開樣式:compactinset。此展開樣式是透過 ion-accordion-group 上的 expand 屬性來設定。

expand="inset" 時,手風琴群組會被賦予一個邊框半徑。在 md 模式下,整個手風琴將在打開時向下移動。

進階展開樣式

您可以透過根據手風琴的狀態設定樣式來自訂展開行為。有四個狀態類別應用於 ion-accordion。使用這些類別設定樣式可讓您建立進階狀態轉換

類別名稱描述
.accordion-expanding當手風琴正在主動展開時套用
.accordion-expanded當手風琴完全展開時套用
.accordion-collapsing當手風琴正在主動摺疊時套用
.accordion-collapsed當手風琴完全摺疊時套用

如果您需要以手風琴的特定部分為目標,我們建議直接以元素為目標。例如,如果您想要在手風琴展開時自訂標頭插槽中的 ion-item,您可以使用下列選取器

ion-accordion.accordion-expanding ion-item[slot="header"],
ion-accordion.accordion-expanded ion-item[slot="header"] {
--color: red;
}

圖示

header 插槽中使用 ion-item 時,我們會自動新增 ion-icon。使用的圖示類型可以使用 toggleIcon 屬性控制,而新增到的插槽可以使用 toggleIconSlot 屬性控制。

如果您想要自行管理圖示或使用非 ion-icon 的圖示,您可以將 ion-accordion-toggle-icon 類別新增至圖示元素。

無論您選擇哪個選項,當您展開或摺疊手風琴時,圖示都會自動旋轉。

主題設定

由於 ion-accordion 充當標頭和內容元素的殼層,因此您可以輕鬆地以您想要的任何方式為手風琴設定主題。您可以透過以帶有插槽的 ion-item 為目標來設定標頭的主題。由於您使用 ion-item,因此您也可以存取所有 ion-item CSS 變數ion-item 陰影部分。也可以透過以 content 插槽中的元素為目標來輕鬆實現內容的主題設定。

輔助功能

動畫

預設情況下,展開或摺疊手風琴項目時會啟用動畫效果。當支援 prefers-reduced-motion 媒體查詢且設定為 reduce 時,動畫效果將會自動停用。對於不支援此功能的瀏覽器,您可以在 Ionic Framework 應用程式中設定 animated 設定來停用動畫。

鍵盤互動

當在 ion-accordion-group 內使用時,ion-accordion 具有完整的鍵盤支援來與元件互動。下表詳細說明了每個按鍵的功能

按鍵描述
空白鍵Enter 鍵當焦點位於手風琴標題上時,手風琴會根據元件的狀態摺疊或展開。
Tab 鍵將焦點移動到下一個可聚焦的元素。
Shift + Tab 鍵將焦點移動到上一個可聚焦的元素。
向下箭頭鍵- 當焦點位於手風琴標題上時,將焦點移動到下一個手風琴標題。
- 當焦點位於最後一個手風琴標題上時,將焦點移動到第一個手風琴標題。
向上箭頭鍵- 當焦點位於手風琴標題上時,將焦點移動到上一個手風琴標題。
- 當焦點位於第一個手風琴標題上時,將焦點移動到最後一個手風琴標題。
Home 鍵當焦點位於手風琴標題上時,將焦點移動到第一個手風琴標題。
End 鍵當焦點位於手風琴標題上時,將焦點移動到最後一個手風琴標題。

效能

動畫

手風琴動畫的工作原理是了解動畫開始時 content 插槽的高度。手風琴預期此高度在整個動畫過程中保持一致。因此,開發人員應避免在動畫期間執行任何可能更改內容高度的操作。

例如,使用 ion-img 可能會導致延遲載入影像時出現版面配置位移。這表示當動畫播放時,ion-img 會載入影像資料,並且 ion-img 的尺寸會改變以適應載入的影像資料。這可能會導致 content 插槽的高度發生變化。開發人員有幾種方法可以避免這種情況

  1. 使用不含延遲載入的 img 元素。ion-img 始終使用延遲載入,但 img 預設不使用延遲載入。這是最簡單的選項,如果您有小型影像且從延遲載入中獲益不大,則效果很好。

  2. ion-img 上設定最小寬度和高度。如果您需要使用延遲載入並且事先知道影像的尺寸(例如,如果您載入相同尺寸的圖示),則可以使用 CSS 將 ion-img 設定為具有最小寬度或高度。這讓開發人員可以利用延遲載入的優勢,同時避免版面配置位移。當使用具有 loading="lazy"img 元素時,此方法也有效!

  3. 如果這些選項都不適用,開發人員可能需要考慮使用 ion-accordion-group 上的 animated 屬性來完全停用動畫。

屬性

disabled

描述如果為 true,則無法與手風琴互動。
屬性disabled
類型boolean
預設false

mode

描述mode 決定要使用哪個平台樣式。
屬性mode
類型"ios" | "md"
預設未定義

readonly

描述如果為 true,則無法與手風琴互動,但不會改變不透明度。
屬性readonly
類型boolean
預設false

toggleIcon

描述要使用的切換圖示。當手風琴展開或摺疊時,此圖示將會旋轉。
屬性toggle-icon
類型string
預設chevronDown

toggleIconSlot

描述放置切換圖示的 ion-item 內的插槽。預設為 "end"
屬性toggle-icon-slot
類型"end" | "start"
預設'end'

value

描述手風琴的值。預設為自動產生的值。
屬性value
類型string
預設ion-accordion-${accordionIds++}

事件

此元件沒有可用的事件。

方法

此元件沒有可用的公用方法。

CSS 陰影部分

名稱描述
contentcontent 插槽的包裝元素。
expanded展開的元素。可以與 headercontent 部分結合使用 (即 ::part(header expanded))。
headerheader 插槽的包裝元素。

CSS 自訂屬性

此元件沒有可用的 CSS 自訂屬性。

插槽

名稱描述
content內容放置在標題下方,並根據展開狀態顯示或隱藏。
header內容放置在頂部,用於展開或摺疊手風琴項目。