概要
カレンダーや日付ピッカーのようなサードパーティのウィジェットで<table>
要素が広く使われているため、Bootstrapのテーブルはopt-in式になっています。基本クラス.table
を任意の<table>
に追加し、オプションの修飾子クラスまたはカスタムスタイルで拡張します。すべてのテーブルスタイルがBootstrapで継承されるわけではありません。ネストされたテーブルは、親から独立してスタイルを設定できます。
最も基本的なテーブルのマークアップを使用して、Bootstrapで.table
ベースのテーブルがどのように見えるかを説明します。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
バリエーション
テーブル、テーブルの行、または個々のセルに色を付けるには、コンテクストクラスを使用します。
気をつけてください! テーブルバリエーションを生成するために使用されるより複雑なCSSのため、v6までカラーモード適応型スタイリングが表示されない可能性が高いです。
Class |
Heading |
Heading |
Default |
Cell |
Cell |
Primary |
Cell |
Cell |
Secondary |
Cell |
Cell |
Success |
Cell |
Cell |
Danger |
Cell |
Cell |
Warning |
Cell |
Cell |
Info |
Cell |
Cell |
Light |
Cell |
Cell |
Dark |
Cell |
Cell |
<!-- On tables -->
<table class="table-primary">...</table>
<table class="table-secondary">...</table>
<table class="table-success">...</table>
<table class="table-danger">...</table>
<table class="table-warning">...</table>
<table class="table-info">...</table>
<table class="table-light">...</table>
<table class="table-dark">...</table>
<!-- On rows -->
<tr class="table-primary">...</tr>
<tr class="table-secondary">...</tr>
<tr class="table-success">...</tr>
<tr class="table-danger">...</tr>
<tr class="table-warning">...</tr>
<tr class="table-info">...</tr>
<tr class="table-light">...</tr>
<tr class="table-dark">...</tr>
<!-- On cells (`td` or `th`) -->
<tr>
<td class="table-primary">...</td>
<td class="table-secondary">...</td>
<td class="table-success">...</td>
<td class="table-danger">...</td>
<td class="table-warning">...</td>
<td class="table-info">...</td>
<td class="table-light">...</td>
<td class="table-dark">...</td>
</tr>
支援技術に意味を伝える
色を使用して意味を付加することは、視覚的な表示を提供するだけであり、スクリーンリーダーなどの支援技術の利用者には伝わりません。色で示される情報は、コンテンツ自体(例:可視テキスト)から明らかですが、.visually-hidden
クラスで隠された追加テキストなど、別の手段で含まれていることを確認してください。
アクセントの効いたテーブル
ストライプの行
<tbody>
内のテーブル行にzebra-stripingを追加するには、.table-striped
を使用します。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped">
...
</table>
ストライプの列
.table-striped-columns
を使用すると、任意のテーブルカラムにゼブラストライプを追加することができます。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped-columns">
...
</table>
これらのクラスは、テーブルのバリアントにも追加することができます:
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-striped">
...
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-striped-columns">
...
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-success table-striped">
...
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-success table-striped-columns">
...
</table>
ホバー可能な行
<tbody>
内のテーブル行のホバー状態を有効にするために、.table-hover
を追加しました。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-hover">
...
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-hover">
...
</table>
このホバリング可能な列は、ストライプ列のバリアントと組み合わせることも可能です:
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped table-hover">
...
</table>
アクティブなテーブル
.table-active
クラスを追加することで、表の行やセルを強調表示します。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table">
<thead>
...
</thead>
<tbody>
<tr class="table-active">
...
</tr>
<tr>
...
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2" class="table-active">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark">
<thead>
...
</thead>
<tbody>
<tr class="table-active">
...
</tr>
<tr>
...
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2" class="table-active">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
バリアントやアクセントのあるテーブルの仕組みは?
アクセントのある表 (ストライプの行、ホバー可能な行、アクティブなテーブル)については、これらの効果をすべてのテーブルのバリエーションで使えるようにするためにいくつかのテクニックを使用しました。
--bs-table-bg
カスタムプロパティでテーブルセルの背景を設定します。すべてのテーブルバリアントはこのカスタムプロパティを設定してテーブルセルに色をつけます。このようにすれば、半透明の色をテーブルの背景として使用しても問題になることはありません。
- 次に,
box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
を使用してテーブルセルにインセットボックスシャドウを追加し、指定したbackground-color
の上にレイヤーを追加します。広がりが大きく、ボケがないため、単調になります。 --bs-table-accent-bg
はデフォルトで設定されていないため、デフォルトのボックスシャドウはありません。
.table-striped
、.table-hover
、.table-active
のいずれかのクラスが追加された場合、--bs-table-accent-bg
に半透明の色を設定して背景を着色します。
- 各テーブルバリアントに対して、その色に依存して最も高いコントラストを持つ
--bs-table-accent-bg
色を生成します。例えば、.table-primary
のアクセントカラーは暗めで、.table-dark
のアクセントカラーは明るめです。
- テキストと枠線の色も同じように生成され、その色はデフォルトで継承されます。
下記を参考にしてください。:
@mixin table-variant($state, $background) {
.table-#{$state} {
$color: color-contrast(opaque($body-bg, $background));
$hover-bg: mix($color, $background, percentage($table-hover-bg-factor));
$striped-bg: mix($color, $background, percentage($table-striped-bg-factor));
$active-bg: mix($color, $background, percentage($table-active-bg-factor));
$table-border-color: mix($color, $background, percentage($table-border-factor));
--#{$prefix}table-color: #{$color};
--#{$prefix}table-bg: #{$background};
--#{$prefix}table-border-color: #{$table-border-color};
--#{$prefix}table-striped-bg: #{$striped-bg};
--#{$prefix}table-striped-color: #{color-contrast($striped-bg)};
--#{$prefix}table-active-bg: #{$active-bg};
--#{$prefix}table-active-color: #{color-contrast($active-bg)};
--#{$prefix}table-hover-bg: #{$hover-bg};
--#{$prefix}table-hover-color: #{color-contrast($hover-bg)};
color: var(--#{$prefix}table-color);
border-color: var(--#{$prefix}table-border-color);
}
}
テーブルボーダー
ボーダーありのテーブル
テーブルとセルの四方にボーダーをつけるため、.table-bordered
を追加します。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-bordered">
...
</table>
ボーダーカラーユーティリティを追加して、色を変更することができるようになりました:
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-bordered border-primary">
...
</table>
ボーダーがないテーブル
table-borderless
をテーブルに追加するとボーダーがなくなります。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-borderless">
...
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-borderless">
...
</table>
小型テーブル
.table
をよりコンパクトにするために.table-sm
を追加するとセルのpadding
を半分にできます。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-sm">
...
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-sm">
...
</table>
テーブルグループの仕切り
テーブルグループ(<thead>
、<tbody>
、<tfoot>
)の間に太いボーダーを追加し、暗くします。border-top-color
を変更することで、色をカスタマイズすることができます(現時点では、ユーティリティクラスは提供していません)。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody class="table-group-divider">
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
垂直方向の位置合わせ
<thead>
のテーブルセルは常に下に垂直に配置されます。<tbody>
のテーブルセルは<table>
からアラインメントを継承し、デフォルトでは上にアラインメントされます。必要に応じて垂直方向配列クラスを使って再整列してください。
Heading 1 |
Heading 2 |
Heading 3 |
Heading 4 |
This cell inherits vertical-align: middle; from the table |
This cell inherits vertical-align: middle; from the table |
This cell inherits vertical-align: middle; from the table |
This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells. |
This cell inherits vertical-align: bottom; from the table row |
This cell inherits vertical-align: bottom; from the table row |
This cell inherits vertical-align: bottom; from the table row |
This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells. |
This cell inherits vertical-align: middle; from the table |
This cell inherits vertical-align: middle; from the table |
This cell is aligned to the top. |
This here is some placeholder text, intended to take up quite a bit of vertical space, to demonstrate how the vertical alignment works in the preceding cells. |
<div class="table-responsive">
<table class="table align-middle">
<thead>
<tr>
...
</tr>
</thead>
<tbody>
<tr>
...
</tr>
<tr class="align-bottom">
...
</tr>
<tr>
<td>...</td>
<td>...</td>
<td class="align-top">This cell is aligned to the top.</td>
<td>...</td>
</tr>
</tbody>
</table>
</div>
ネスティング
ボーダースタイル、アクティブスタイル、テーブルバリアントは、入れ子になったテーブルでは継承されません。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
Header |
Header |
Header |
A |
First |
Last |
B |
First |
Last |
C |
First |
Last |
|
3 |
Larry |
the Bird |
@twitter |
<table class="table table-striped table-bordered">
<thead>
...
</thead>
<tbody>
...
<tr>
<td colspan="4">
<table class="table mb-0">
...
</table>
</td>
</tr>
...
</tbody>
</table>
ネスティングの仕組み
ネストしたテーブルにスタイルが漏れるのを防ぐために、CSSでは子コンビネーター(>
)セレクタを使用しています。thead
、tbody
、tfoot
のすべてのtd
とth
を対象にする必要があるため、このセレクタを使用しないとかなり長くなってしまいます。そこで、.table > :not(caption) > * > *
セレクタを使って、.table
のすべてのtd
とth
をターゲットにしますが、入れ子になる可能性のあるテーブルにはターゲットにしません。
なお、テーブルの直接の子として<tr>
を追加した場合、これらの<tr>
はデフォルトで<tbody>
に包まれるため、セレクタは意図したとおりに動作するようになります。
構造
テーブル上部
テーブルやダークテーブルと同様に、モディファイアクラス .table-light
や.table-dark
を使って、<thead>
を明るいグレーや暗いグレーに表示させることができます。
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table">
<thead class="table-light">
...
</thead>
<tbody>
...
</tbody>
</table>
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table">
<thead class="table-dark">
...
</thead>
<tbody>
...
</tbody>
</table>
テーブル下部
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
Footer |
Footer |
Footer |
Footer |
<table class="table">
<thead>
...
</thead>
<tbody>
...
</tbody>
<tfoot>
...
</tfoot>
</table>
キャプション
<caption>
は、表の見出しのような役割を果たします。スクリーンリーダーを使用しているユーザーが表を見つけ、その内容を理解し、読むかどうかを判断するのに役立ちます。
List of users
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-sm">
<caption>List of users</caption>
<thead>
...
</thead>
<tbody>
...
</tbody>
</table>
.caption-top
で表の一番上に<caption>
を置くこともできます。
List of users
# |
First |
Last |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table caption-top">
<caption>List of users</caption>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">First</th>
<th scope="col">Last</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
レスポンシブ対応テーブル
レスポンシブテーブルを使うと、テーブルを簡単に水平方向にスクロールさせることができます。.table
を.table-responsive
でラップすることで、すべてのビューポートに対応したレスポンシブテーブルにすることができます。あるいは、.table-responsive{-sm|md|-lg|-xl|-xxl}
を使用して、レスポンシブテーブルの最大ブレークポイントを指定します。
垂直方向の切り抜き/切り捨て
レスポンシブテーブルはoverflow-y: hidden
を利用しており、テーブルの下端や上端からはみ出したコンテンツを切り取ることができます。特に、これはドロップダウンメニューやサードパーティ製のウィジェットを切り取ることができます。
常にレスポンシブな対応
すべてのブレークポイントにおいて、水平方向にスクロールするテーブルには.table-responsive
を使用します。
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
<div class="table-responsive">
<table class="table">
...
</table>
</div>
ブレークポイント指定
特定のブレークポイントまでのレスポンシブテーブルを作成するには、必要に応じて .table-responsive{-sm|md|-lg|-xl|-xxl}
を使用します。そのブレークポイント以降では、テーブルは正常に動作し、水平方向にはスクロールしません。
これらのテーブルは、特定のビューポート幅でレスポンシブスタイルが適用されるまで壊れているように見えることがあります。
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
# |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
<div class="table-responsive">
<table class="table">
...
</table>
</div>
<div class="table-responsive-sm">
<table class="table">
...
</table>
</div>
<div class="table-responsive-md">
<table class="table">
...
</table>
</div>
<div class="table-responsive-lg">
<table class="table">
...
</table>
</div>
<div class="table-responsive-xl">
<table class="table">
...
</table>
</div>
<div class="table-responsive-xxl">
<table class="table">
...
</table>
</div>
CSS
Sass 変数
$table-cell-padding-y: .5rem;
$table-cell-padding-x: .5rem;
$table-cell-padding-y-sm: .25rem;
$table-cell-padding-x-sm: .25rem;
$table-cell-vertical-align: top;
$table-color: var(--#{$prefix}body-color);
$table-bg: var(--#{$prefix}body-bg);
$table-accent-bg: transparent;
$table-th-font-weight: null;
$table-striped-color: $table-color;
$table-striped-bg-factor: .05;
$table-striped-bg: rgba($black, $table-striped-bg-factor);
$table-active-color: $table-color;
$table-active-bg-factor: .1;
$table-active-bg: rgba($black, $table-active-bg-factor);
$table-hover-color: $table-color;
$table-hover-bg-factor: .075;
$table-hover-bg: rgba($black, $table-hover-bg-factor);
$table-border-factor: .1;
$table-border-width: var(--#{$prefix}border-width);
$table-border-color: var(--#{$prefix}border-color);
$table-striped-order: odd;
$table-striped-columns-order: even;
$table-group-separator-color: currentcolor;
$table-caption-color: var(--#{$prefix}secondary-color);
$table-bg-scale: -80%;
Sassループ
$table-variants: (
"primary": shift-color($primary, $table-bg-scale),
"secondary": shift-color($secondary, $table-bg-scale),
"success": shift-color($success, $table-bg-scale),
"info": shift-color($info, $table-bg-scale),
"warning": shift-color($warning, $table-bg-scale),
"danger": shift-color($danger, $table-bg-scale),
"light": $light,
"dark": $dark,
);
カスタマイズ
- ファクター変数(
$table-striped-bg-factor
、$table-active-bg-factor
& $table-hover-bg-factor
)は、テーブルバリアントのコントラストを決定するために使用されます。
- 明るいテーブルと暗いテーブルのバリエーションとは別に、テーマの色は
$table-bg-level
変数によって明るくなります。