Card (カード)
Ignite UI for Angular Card は、関連するメディア、テキスト、アクションを 1 つの柔軟なコンテンツ コンテナーにまとめます。
Card を使用して、製品、記事、連絡先、場所、ダッシュボード アイテムなど、単一の対象に関するコンテンツをグループ化します。
ライブ デモ
構造
Card は、ヘッダー、メディア、コンテンツ、アクションを標準的な構成要素とするコンテナーです。
igx-card // host - groups related content
|- igx-card-media // optional media region
| `- default content // image, video, or other media content
|- igx-card-header // optional header region
| |- [igxCardThumbnail] // optional avatar, icon, or small image
| |- [igxCardHeaderTitle] // card title
| `- [igxCardHeaderSubtitle] // optional card subtitle
|- igx-card-content // optional body region
| `- default content // text, lists, or custom content
`- igx-card-actions // optional action region
|- [igxStart] // leading actions
`- [igxEnd] // trailing actions
作業の開始
Angular Card を使用するには、基本的なプロジェクトのセットアップについて Ignite UI for Angular の作業の開始 トピックを参照し、対象プラットフォーム向けにコンポーネントを登録します。
igniteui-angular パッケージを使用する Angular の場合、パッケージをインストールします:
npm install igniteui-angular
次に、コンポーネントの imports コレクションに IGX_CARD_DIRECTIVES トークンをインポートします。このトークンにより、Card とそのすべてのサポート コンポーネントおよびディレクティブが使用可能になります。
import { IGX_CARD_DIRECTIVES } from 'igniteui-angular/card';
IgxButtonDirective、IgxIconButtonDirective、IgxIconComponent、IgxRippleDirective など、カード コンテンツで使用するその他のディレクティブは igniteui-angular からインポートします。
Card を使用する最も簡単な方法は次のとおりです:
<igx-card>
<igx-card-header>
<h3 igxCardHeaderTitle>Title</h3>
</igx-card-header>
<igx-card-content>
<p>Content</p>
</igx-card-content>
</igx-card>
使用方法
Card コンテナーと、コンテンツに必要なサブコンポーネントを組み合わせてカードを構成します。
メディア
IgxCardMediaDirective を使用して、画像、ビデオ、その他のメディア コンテンツをカードに配置します。
<igx-card-media height="196px">
<img src="https://images.unsplash.com/photo-1518235506717-e1ed3306a89b?ixlib=rb-1.2.1&auto=format&fit=crop&w=640&q=50" alt="New York city skyline" />
</igx-card-media>
位置
メディアをヘッダーの上または下に配置します。Card は追加された順序で各領域をレンダリングするため、マークアップ内の要素の順序によってメディアの位置が決まります。
ヘッダー スロット
ヘッダー スロットを使用して、サムネイル、タイトル、サブタイトル、および追加のヘッダー コンテンツを定義します。
<igx-card-header>
<div igxCardThumbnail>
<igx-icon>place</igx-icon>
</div>
<h3 igxCardHeaderTitle>Title</h3>
<span igxCardHeaderSubtitle>Subtitle</span>
</igx-card-header>
カードがドキュメントのアウトラインに含まれるように、igxCardHeaderTitle を <h3> などの見出し要素に適用し、igxCardHeaderSubtitle を <span> などの中立的なインライン要素に適用します。
コンテンツ
IgxCardContentDirective は、カードの本文テキスト、リスト、またはカスタム コンテンツに使用します。
<igx-card-content>
<p>New York City comprises five boroughs where the Hudson River meets the Atlantic Ocean.</p>
</igx-card-content>
エレベーション
カードにエレベーションのある外観を使用する場合は、elevated を設定します。
<igx-card elevated>
...
</igx-card>
アクション スロット
アクション スロットを使用して、先頭、中央、末尾のアクションを CardActions に配置します。
<igx-card-actions>
<button igxButton igxStart>Like</button>
<button igxButton>Comment</button>
<button igxIconButton="flat" igxEnd>
<igx-icon>more_vert</igx-icon>
</button>
</igx-card-actions>
アクションの方向
アクションを垂直に配置する場合は、igx-card-actions に vertical を設定します。
<igx-card-actions [vertical]="true">
<button igxButton>Like</button>
<button igxButton>Share</button>
<button igxIconButton="flat">
<igx-icon>more_vert</igx-icon>
</button>
</igx-card-actions>
レイアウト
カードのセクションを水平に配置したり、メディアとコンテンツの領域に分割したりする場合は、レイアウト ラッパーを使用します。
水平カードの場合、ヘッダーとコンテンツを 1 つのラッパーにグループ化し、そのラッパーの横にアクションを追加して、カード コンテンツに行方向の flex レイアウトを適用します。
<igx-card [horizontal]="true">
<div igxLayout igxLayoutDir="column" igxFlex [igxFlexGrow]="1">
<igx-card-header>
<h5 igxCardHeaderTitle>Rozes</h5>
<h5 igxCardHeaderSubtitle>Under the Grave (2016)</h5>
<igx-card-media width="64px" height="64px">
<img src="https://dl.infragistics.com/x/img/music/rozes.jpg" alt="Rozes album cover" />
</igx-card-media>
</igx-card-header>
<igx-card-content>
<p>As I have always said: I write what's real and what's true, even if it means throwing myself under the bus.</p>
</igx-card-content>
</div>
<igx-divider [vertical]="true"></igx-divider>
<igx-card-actions layout="justify">
<button igxIconButton="flat" igxRipple [igxRippleCentered]="true" igxEnd aria-label="Previous track">
<igx-icon>skip_previous</igx-icon>
</button>
<button igxIconButton="flat" igxRipple [igxRippleCentered]="true" igxEnd aria-label="Play">
<igx-icon>play_arrow</igx-icon>
</button>
<button igxIconButton="flat" igxRipple [igxRippleCentered]="true" igxEnd aria-label="Next track">
<igx-icon>skip_next</igx-icon>
</button>
</igx-card-actions>
</igx-card>
.card-wrapper {
max-width: 400px;
min-width: 250px;
}
セミ水平カードの場合、ヘッダー、コンテンツ、アクションを 1 つの列に積み重ねたまま、その列の横にメディア セクションを配置します。
<igx-card [horizontal]="true" elevated>
<div igxLayout igxLayoutDir="column" igxFlex [igxFlexGrow]="1">
<igx-card-header>
<igx-avatar src="https://dl.infragistics.com/x/img/music/singer_with_mic.jpg"></igx-avatar>
<h5 igxCardHeaderTitle>HERE</h5>
<h5 igxCardHeaderSubtitle>by Mellow D</h5>
</igx-card-header>
<igx-card-content>
<p>Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts.</p>
</igx-card-content>
<igx-card-actions [vertical]="false">
<button igxButton="flat" igxRipple igxStart>Play Album</button>
</igx-card-actions>
</div>
<igx-card-media width="96px">
<img src="https://dl.infragistics.com/x/img/music/singer_female.jpg" alt="Singer" />
</igx-card-media>
</igx-card>
.card-wrapper {
max-width: 400px;
min-width: 250px;
}
推奨/非推奨
Card は通常、概要 UI であり、より詳細な情報へのエントリ ポイントとして機能します。情報を詰め込みすぎないようにしてください。また、Card を使用してダッシュボードを作成する場合は、カード間の水平および垂直の間隔が等しいレイアウト グリッドを形成するように、カードのサイズと配置を統一します。


プロパティ
Card API は、コンテナーの外観、アクションのレイアウト、およびメディア サイズを制御するプロパティを公開します。
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
elevated |
boolean |
false |
カードに影付きのエレベーションのある外観を使用するように設定します。 |
horizontal |
boolean |
false |
カードのセクションを水平に配置します。 |
vertical |
boolean |
カードの horizontal 入力の値 |
アクションを垂直に配置します。設定されていない場合、親カードの horizontal 入力に従います。 |
layout |
"start" | "justify" |
"start" |
アクションの配分方法を設定します。justify を指定すると、アクション軸に沿って均等に配置されます。 |
width |
string |
"auto" |
メディア コンテナーの width と min-width を設定します。 |
height |
string |
"auto" |
メディア コンテナーの height を設定します。 |
スタイル設定
カードの外観はテーマ変数で制御されます。
| 変数 | 変更内容 |
|---|---|
--ig-card-background |
カードの背景色。 |
--ig-card-outline-color |
カードのアウトライン色。 |
--ig-card-header-text-color |
カード タイトルのテキスト色。 |
--ig-card-subtitle-text-color |
カード サブタイトルのテキスト色。 |
--ig-card-content-text-color |
カード コンテンツのテキスト色。 |
--ig-card-actions-text-color |
カード アクションのテキスト色。 |
--ig-card-resting-shadow |
通常状態のカードの影。 |
--ig-card-hover-shadow |
ホバー状態のカードの影。 |
--ig-card-border-radius |
カードの角丸の半径。 |
Sass テーマ
アプリケーションが Sass を通じて Ignite UI テーマをカスタマイズする場合は、card-theme 関数を使用します。
@use "igniteui-theming/sass/themes" as *;
$custom-card-theme: card-theme(
$background: #1f2937,
$border-radius: 12px,
$header-text-color: #ffffff,
$content-text-color: #e5e7eb
);
:root {
@include tokens($custom-card-theme);
}
CSS 変数
Sass のビルド ステップなしでローカルにスタイルを設定する場合は、コンポーネントの CSS 変数を直接設定します。
igx-card {
--background: var(--ig-secondary-900);
--header-text-color: var(--ig-secondary-900-contrast);
--content-text-color: var(--ig-secondary-900-contrast);
}
igx-card-header {
--subtitle-text-color: var(--ig-warn-500);
}
Tailwind によるスタイル設定
Angular アプリケーションがすでに Tailwind を通じて Ignite UI コンポーネントのスタイルを設定している場合は、Tailwind ユーティリティ クラスを使用します。
アクセシビリティ
Card はコンテナーです。グループ化とメディアのセマンティクスはカードの各領域から提供され、キーボード操作性とアクセシブルな名前は、その中に配置するコンテンツから提供されます。
キーボード インタラクション
Card とそのヘッダー、メディア、コンテンツ、アクションの各領域は、キー ハンドラーを宣言せず、タブ順序にも含まれません。フォーカスは、その中に配置したフォーカス可能なコンテンツの間を DOM 順に移動します。
| キー | アクション |
|---|---|
| Tab | コンテンツまたはアクション領域のボタンやリンクなど、カード内の次のフォーカス可能な要素にフォーカスを移動します。 |
| Shift + Tab | カード内の前のフォーカス可能な要素にフォーカスを移動します。 |
アクション領域は常に、先頭の領域、中央のコンテンツ、末尾の領域の順にレンダリングされます。アクションを垂直レイアウトに切り替えても、DOM の順序は変更されずにスタイルのみが変更されるため、キーボードとスクリーン リーダーの順序は変わりません。
スクリーン リーダー / ARIA
- カード ホストは
role="group"と、igx-card-1の形式で生成されたidをレンダリングします。情報アーキテクチャに別のグループ化ロールが適している場合はrole入力を設定し、グループにアクセシブルな名前を付けるために、カード タイトルをaria-labelledbyで参照します。 igx-card-mediaはrole="img"をレンダリングします。これによりメディア領域全体が単一の画像として公開され、その子要素はプレゼンテーション扱いになるため、内部の画像のalt属性では名前を付けられません。領域自体にaria-labelまたはaria-labelledbyで名前を付けるか、メディアが装飾目的の場合はrole入力をpresentationに設定します。- ヘッダー、タイトル、サブタイトル、コンテンツ、アクションの各メンバーは、スタイル クラスのみを追加します。ロールや
aria-*属性は追加しません。 - アクション領域のアイコンのみのボタンには、アクセシブルな名前を付けてください。アイコンだけでは名前は提供されません。
- カード全体で 1 つのアクションを実行する場合は、コンテナーにクリック ハンドラーを割り当てるのではなく、単一のインタラクティブな要素を使用して、アクションがロールと名前を保持するようにします。
アクセシビリティ準拠
Infragistics は、Ignite UI for Angular のアクセシビリティ サポートについて、Section 508 および WCAG 2.1 ガイドライン領域への対応をアクセシビリティ準拠 トピックで文書化しています。
| 基準 | コンポーネントの準拠方法 |
|---|---|
| 1.3.1 情報及び関係性 | Card はそのホストをグループとして公開し、カードの各領域はコンテンツを書き換えずに投影するため、見出し、テキスト、リスト、メディア、コントロールはネイティブのセマンティクスを維持します。 |
| 2.1.1 キーボード | Card は独自のキー処理やフォーカス トラップを追加しないため、その中のキーボード操作可能なコンテンツは操作可能なままです。 |
| 2.4.3 フォーカス順序 | アクション領域は、先頭、中央、末尾の領域を固定された DOM 順序でレンダリングし、垂直レイアウトでもこの順序は変更されません。 |
| 4.1.2 名前、役割、値 | カード ホストは role="group" を、メディア領域は role="img" を公開します。どちらもアクセシブルな名前を設定しないため、カード タイトルを指す aria-labelledby でカードに名前を付け、メディア領域には aria-label または aria-labelledby で名前を付けるか、装飾目的の場合は role を presentation に設定します。 |
ユーザーの責任:
- カードがドキュメントのアウトラインに含まれるように、タイトルには実際の見出し要素を渡し、サブタイトルはプレーン テキストにします。
- 意味のあるメディアには代替テキストを提供し、画像として公開される場合は、メディア領域にアクセシブルな名前を付けます。
- アイコンのみのアクション ボタンには、アクセシブルな名前を付けます。
- CSS で水平カードや分割カードのレイアウトを構築する場合は、DOM の順序と視覚的な順序を一致させます。
- カードの色をオーバーライドする場合は、十分なコントラストを維持します。
API リファレンス
Card、カード セクション、およびサポート コンポーネントの完全な API については、以下の API リファレンスを参照してください。
Card
CardActions
IgxCardContentDirective
CardHeader
IgxCardMediaDirective
Avatar
IgxButtonDirective
IgxIconButtonDirective
Icon
IgxRippleDirective
依存関係
Card は、独自のヘッダー、メディア、コンテンツ、アクションの各サブコンポーネントを使用します。サムネイル、アクション、アイコン、リップルを含むカードは、対応する Avatar、IgxButtonDirective、IgxIconButtonDirective、Icon、IgxRippleDirective コンポーネントおよびディレクティブにも依存します。
その他のリソース
Ignite UI for Angular Card のサポート、ソース、および関連するレイアウトのガイダンスについては、以下のリソースを参照してください。
関連コンポーネント
ソート、フィルタリング、列レベルの操作を伴う高密度な表形式データが必要な場合は、Grid を使用します。繰り返しアイテムをコンパクトに保ち、主に縦方向に表示する場合は、List を使用します。
FAQ
Card は単純なコンテナーでありインタラクティブな動作を追加しないため、カード全体をリンクで囲むのは一般的ですが有害な近道です。そのリンクのアクセシブルな名前が、カード内のすべてのテキストになってしまうためです。代わりに、カード タイトルに実際のリンクまたはボタンを配置し、カード ボックス全体を覆う絶対配置の擬似要素でカード全体に広げます。これにより、タイトルがアクセシブルな名前のまま維持され、四角形全体がクリック可能なままで、テキスト選択や中クリックも引き続き機能します。
Card はコンテンツに応じてサイズが決まり、兄弟要素間で高さを揃えることはありません。各カードが行の高さに伸びるように、カードを CSS グリッドまたは行方向の flex レイアウトに配置し、メディア領域に固定の高さまたは aspect-ratio を指定し、-webkit-line-clamp でタイトルと本文を指定した行数に制限します。カードの高さが揃わない原因は、ほとんどの場合、各画像と各段落が自身の高さを決めてしまうことです。
Card のメディア領域は、含まれるメディアのサイズを制御するため、画像ではなく領域のサイズを設定してください。igx-card-media の height および width 入力を設定し、カードの行が揃うように、カード間で一貫したアスペクト比を使用します。
カード アクション領域は、記述順ではなくセレクターによってコンテンツを投影します。igxEnd のない igxButton を持つ要素は先頭の領域に配置され、igxStart のない igxIconButton を持つ要素または igx-icon は末尾の領域に配置されます。どちらのセレクターにも一致しないコンテンツのみが中央に残ります。アクションを目的の場所に配置するには、igxStart または igxEnd を明示的に設定します。
データが高密度で表形式であり、読み手が列をまたいでスキャン、ソート、比較する必要がある場合は Grid を使用し、多数の短く均一な行を狭いスペースに収める必要がある場合は List を使用します。各アイテムに独自のメディア、長めのテキスト、独自のアクションが必要な場合は Card を使用します。長くスクロールするほどカードを並べている場合、多くは形を変えた List です。