メインコンテンツにスキップ
バージョン: v8

ion-accordion

シャドウ

アコーディオンは、コンテンツ内の折りたたみ可能なセクションを提供し、情報を整理およびグループ化する方法を提供しながら、垂直方向のスペースを削減します。すべての ion-accordion コンポーネントは、ion-accordion-group コンポーネント内でグループ化する必要があります。

基本的な使用法

アコーディオンの切り替え

どのアコーディオンが開いているかは、ion-accordion-groupvalue プロパティを設定することで制御されます。このプロパティを設定することで、開発者は特定のアコーディオンをプログラムで展開または折りたたむことができます。

アコーディオンの状態変化のリスニング

注意

InputTextarea などの他のコンポーネントによって発行されるほとんどの ionChange イベントはバブルします。その結果、これらのイベントはバブルアップし、関連するコンポーネントがアコーディオン内で使用されている場合、アコーディオン グループの ionChange リスナーが発火します。

アコーディオン内で ionChange を発行する他のコンポーネントを使用する場合、アコーディオン グループの ionChange コールバックで、コールバックに渡されたイベントの target キーをチェックして、ionChange がアコーディオン グループから発生しているのか、子孫から発生しているのかを確認することをお勧めします。

開発者は、アコーディオンが展開または折りたたまれたときに通知されるように、ionChange イベントをリッスンできます。

コンソール
上記の例からログに記録された場合、コンソールメッセージがここに表示されます。

複数のアコーディオン

開発者は、multiple プロパティを使用して、複数のアコーディオンを一度に開くことを許可できます。

アコーディオンの無効化

個々のアコーディオン

個々のアコーディオンは、ion-accordiondisabled プロパティを使用して無効にできます。

アコーディオン グループ

アコーディオン グループは、ion-accordion-groupdisabled プロパティを使用して無効にできます。

読み取り専用アコーディオン

個々のアコーディオン

個々のアコーディオンは、ion-accordionreadonly プロパティを使用して無効にできます。

アコーディオン グループ

アコーディオン グループは、ion-accordion-groupreadonly プロパティを使用して無効にできます。

構造

header スロットは、アコーディオンを展開または折りたたむトグルとして使用されます。アクセシビリティとテーマ設定機能を活用するために、ここに ion-item を使用することをお勧めします。

header スロットで ion-item を使用する場合、ion-itembutton プロパティは true に設定され、detail プロパティは false に設定されます。さらに、ion-item にトグルアイコンが自動的に追加されます。このアイコンは、アコーディオンを展開または折りたたむと自動的に回転します。詳細については、アイコンのカスタマイズを参照してください。

コンテンツ

content スロットは、アコーディオンの状態に応じて表示または非表示になるアコーディオンの一部として使用されます。ページごとに追加する必要がある ion-content のインスタンスは 1 つのみであるため、別の ion-content インスタンスを除き、ここに何でも配置できます。

カスタマイズ

展開スタイル

compactinset の 2 つの組み込み展開スタイルがあります。この展開スタイルは、ion-accordion-groupexpand プロパティを介して設定されます。

expand="inset" の場合、アコーディオン グループには境界半径が設定されます。md モードでは、開くとアコーディオン全体が下にシフトします。

高度な展開スタイル

アコーディオンの状態に基づいてスタイルを設定することで、展開動作をカスタマイズできます。ion-accordion には 4 つの状態クラスが適用されます。これらのクラスを使用してスタイルを設定すると、高度な状態遷移を作成できます

クラス名説明
.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 はコンポーネントを操作するための完全なキーボードサポートを備えています。次の表は、各キーの動作を詳しく示しています。

キー説明
Space または 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-groupanimated プロパティを使用して、アニメーションを完全に無効にすることを検討できます。

プロパティ

disabled

説明true の場合、アコーディオンを操作できません。
属性disabled
タイプboolean
デフォルトfalse

mode

説明モードは、どのプラットフォームスタイルを使用するかを決定します。
属性mode
タイプ"ios" | "md"
デフォルトundefined

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シャドウパーツ

名前説明
contentコンテンツスロットのラッパー要素。
expanded展開された要素。header および content パーツと組み合わせて使用できます(例:::part(header expanded))。
headerヘッダースロットのラッパー要素。

CSSカスタムプロパティ

このコンポーネントで利用可能な CSS カスタムプロパティはありません。

スロット

名前説明
contentコンテンツはヘッダーの下に配置され、展開状態に基づいて表示または非表示になります。
headerコンテンツは上部に配置され、アコーディオンアイテムを展開または折りたたむために使用されます。