概述
由于日历和日期选择器等第三方 widget 广泛使用 <table>
元素,因此 Bootstrap 的表格是可选的 。将基类 .table
添加到任何 <table>
中,然后使用我们的可选修饰类或自定义样式进行扩展。在 Bootstrap 中,所有表格样式都不会被继承,这意味着任何嵌套表格的样式都可以独立于父表格。
使用最基本的表格标记,下面是基于 .table
的表格在 Bootstrap 中的样子。
#
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 更加复杂,因此在第 6 版之前,它们很可能无法看到颜色模式自适应样式。
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
类隐藏的附加文本)明显看出含义。
强调表格
条纹行
使用.table-striped
可为<tbody>
中的任何表格行添加斑马纹。
#
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 >
可悬停的行
添加.table-hover
,以便在<tbody>
中的表格行上启用悬停状态。
#
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-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));
为表格单元格添加内嵌盒状阴影,以覆盖任何指定的background-color
。它使用自定义级联来覆盖 box-shadow
,而不考虑 CSS 的特殊性。由于我们使用的是大面积展开且无模糊效果,因此颜色将是单色的。由于 --bs-table-accent-bg
默认设置为 transparent
,因此我们没有默认的框阴影。
当添加 .table-striped
、.table-striped-columns
、.table-hover
或 .table-active
类时,--bs-table-bg-type
或 --bs-table-bg-state
(默认设置为 initial
)会被设置为半透明颜色(--bs-table-striped-bg
、--bs-table-active-bg
或 --bs-table-hover-bg
),以着色背景并覆盖默认的 --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-sm
,通过将所有单元格的 padding
减少一半,使任何 .table
更紧凑。
#
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 >
表格分组分隔条
使用 .table-group-divider
,在表格组<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>
,默认为顶部对齐。在需要时,使用 vertical align 类重新对齐。
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 >
嵌套如何工作
为了防止 any 样式泄漏到嵌套表格中,我们在 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-responsive
封装.table
,使任何表格在所有视口都能响应。或者,通过使用 .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 : .5 rem ;
$table-cell-padding-x : .5 rem ;
$table-cell-padding-y-sm : .25 rem ;
$table-cell-padding-x-sm : .25 rem ;
$table-cell-vertical-align : top ;
$table-color : var ( -- #{ $prefix } emphasis-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 ( var ( -- #{ $prefix } emphasis-color-rgb ) , $table-striped-bg-factor );
$table-active-color : $table-color ;
$table-active-bg-factor : .1 ;
$table-active-bg : rgba ( var ( -- #{ $prefix } emphasis-color-rgb ) , $table-active-bg-factor );
$table-hover-color : $table-color ;
$table-hover-bg-factor : .075 ;
$table-hover-bg : rgba ( var ( -- #{ $prefix } emphasis-color-rgb ) , $table-hover-bg-factor );
$table-border-factor : .2 ;
$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-scale
变量变浅。