diff --git a/scss/_mixins.scss b/scss/_mixins.scss
index 5a04655d54..b48761de9e 100644
--- a/scss/_mixins.scss
+++ b/scss/_mixins.scss
@@ -27,7 +27,7 @@
@import "mixins/lists";
@import "mixins/list-group";
@import "mixins/forms";
-@import "mixins/table-row";
+@import "mixins/table-variants";
// Skins
@import "mixins/background-variant";
diff --git a/scss/_reboot.scss b/scss/_reboot.scss
index c6b10d59fe..4c5dfcba41 100644
--- a/scss/_reboot.scss
+++ b/scss/_reboot.scss
@@ -374,6 +374,17 @@ th {
text-align: -webkit-match-parent; // 2
}
+thead,
+tbody,
+tfoot,
+tr,
+td,
+th {
+ border-color: inherit;
+ border-style: solid;
+ border-width: 0;
+}
+
// Forms
//
diff --git a/scss/_tables.scss b/scss/_tables.scss
index 253282c98d..4969d89496 100644
--- a/scss/_tables.scss
+++ b/scss/_tables.scss
@@ -3,29 +3,45 @@
//
.table {
+ --table-bg: #{$table-bg};
+ --table-accent-bg: transparent;
+ --table-striped-color: #{$table-striped-color};
+ --table-striped-bg: #{$table-striped-bg};
+ --table-active-color: #{$table-active-color};
+ --table-active-bg: #{$table-active-bg};
+ --table-hover-color: #{$table-hover-color};
+ --table-hover-bg: #{$table-hover-bg};
+
width: 100%;
margin-bottom: $spacer;
color: $table-color;
vertical-align: $table-cell-vertical-align;
- background-color: $table-bg; // Reset for nesting within parents with `background-color`.
+ border-color: $table-border-color;
- th,
- td {
+ // Target th & td
+ // We need the child combinator to prevent styles leaking to nested tables which doesn't have a `.table` class.
+ // We use the universal selectors here to simplify the selector (else we would need 6 different selectors).
+ // Another advantage is that this generates less code and makes the selector less specific making it easier to override.
+ // stylelint-disable-next-line selector-max-universal
+ > :not(caption) > * > * {
padding: $table-cell-padding;
- border-bottom: $table-border-width solid $table-border-color;
+ background-color: var(--table-bg);
+ background-image: linear-gradient(var(--table-accent-bg), var(--table-accent-bg));
+ border-bottom-width: $table-border-width;
}
- tbody {
+ > tbody {
vertical-align: inherit;
}
- thead th {
+ > thead {
vertical-align: bottom;
- border-bottom-color: $table-head-border-color;
}
- tbody + tbody {
- border-top: (2 * $table-border-width) solid $table-border-color;
+ // Highlight border color between thead, tbody and tfoot.
+ // stylelint-disable-next-line selector-max-universal
+ > :not(:last-child) > :last-child > * {
+ border-bottom-color: currentColor;
}
}
@@ -34,7 +50,9 @@
// Change placement of captions with a class
//
-.caption-top { caption-side: top; }
+.caption-top {
+ caption-side: top;
+}
//
@@ -42,8 +60,8 @@
//
.table-sm {
- th,
- td {
+ // stylelint-disable-next-line selector-max-universal
+ > :not(caption) > * > * {
padding: $table-cell-padding-sm;
}
}
@@ -52,29 +70,28 @@
// Border versions
//
// Add or remove borders all around the table and between all the columns.
+//
+// When borders are added on all sides of the cells, the corners can render odd when
+// these borders do not have the same color or if they are semi-transparent.
+// Therefor we add top and border bottoms to the `tr`s and left and right borders
+// to the `td`s or `th`s
.table-bordered {
- border: $table-border-width solid $table-border-color;
+ // stylelint-disable-next-line selector-max-universal
+ > :not(caption) > * {
+ border-width: $table-border-width 0;
- th,
- td {
- border: $table-border-width solid $table-border-color;
- }
-
- thead {
- th,
- td {
- border-bottom-width: 2 * $table-border-width;
+ // stylelint-disable-next-line selector-max-universal
+ > * {
+ border-width: 0 $table-border-width;
}
}
}
.table-borderless {
- th,
- td,
- thead th,
- tbody + tbody {
- border: 0;
+ // stylelint-disable-next-line selector-max-universal
+ > :not(caption) > * > * {
+ border-bottom-width: 0;
}
}
@@ -83,92 +100,42 @@
// Default zebra-stripe styles (alternating gray and transparent backgrounds)
.table-striped {
- tbody tr:nth-of-type(#{$table-striped-order}) {
- background-color: $table-accent-bg;
+ > tbody > tr:nth-of-type(#{$table-striped-order}) {
+ --table-accent-bg: var(--table-striped-bg);
+ color: var(--table-striped-color);
}
}
+// Active table
+//
+// The `.table-active` class can be added to highlight rows or cells
+
+.table-active {
+ --table-accent-bg: var(--table-active-bg);
+ color: var(--table-active-color);
+}
// Hover effect
//
// Placed here since it has to come after the potential zebra striping
.table-hover {
- tbody tr {
- &:hover {
- color: $table-hover-color;
- background-color: $table-hover-bg;
- }
+ > tbody > tr:hover {
+ --table-accent-bg: var(--table-hover-bg);
+ color: var(--table-hover-color);
}
}
-// Table backgrounds
+// Table variants
//
-// Exact selectors below required to override `.table-striped` and prevent
-// inheritance to nested tables.
+// Table variants set the table cell backgrounds, border colors
+// and the colors of the striped, hovered & active tables
-@each $color, $value in $theme-colors {
- @include table-row-variant($color, color-level($value, $table-bg-level), color-level($value, $table-border-level));
+@each $color, $value in $table-variants {
+ @include table-variant($color, $value);
}
-@include table-row-variant(active, $table-active-bg);
-
-
-// Dark styles
-//
-// Same table markup, but inverted color scheme: dark background and light text.
-
-// stylelint-disable-next-line no-duplicate-selectors
-.table {
- .thead-dark {
- th {
- color: $table-dark-color;
- background-color: $table-dark-bg;
- border-color: $table-dark-border-color;
- }
- }
-
- .thead-light {
- th {
- color: $table-head-color;
- background-color: $table-head-bg;
- border-color: $table-border-color;
- }
- }
-}
-
-.table-dark {
- color: $table-dark-color;
- background-color: $table-dark-bg;
-
- th,
- td,
- thead th {
- border-color: $table-dark-border-color;
- }
-
- &.table-bordered {
- border: 0;
- }
-
- &.table-striped {
- tbody tr:nth-of-type(#{$table-striped-order}) {
- background-color: $table-dark-accent-bg;
- }
- }
-
- &.table-hover {
- tbody tr {
- &:hover {
- color: $table-dark-hover-color;
- background-color: $table-dark-hover-bg;
- }
- }
- }
-}
-
-
// Responsive tables
//
// Generate series of `.table-responsive-*` classes for configuring the screen
diff --git a/scss/_variables.scss b/scss/_variables.scss
index fb71319866..9a2348df66 100644
--- a/scss/_variables.scss
+++ b/scss/_variables.scss
@@ -465,38 +465,48 @@ $mark-bg: #fcf8e3 !default;
//
// Customizes the `.table` component with basic values, each used across all table variations.
+// scss-docs-start table-variables
$table-cell-padding: .5rem !default;
$table-cell-padding-sm: .25rem !default;
$table-cell-vertical-align: top !default;
$table-color: $body-color !default;
-$table-bg: null !default;
-$table-accent-bg: rgba($black, .05) !default;
-$table-hover-color: $table-color !default;
-$table-hover-bg: rgba($black, .075) !default;
-$table-active-bg: $table-hover-bg !default;
+$table-bg: transparent !default;
+$table-striped-color: $table-color !default;
+$table-striped-bg-factor: .05 !default;
+$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;
+
+$table-active-color: $table-color !default;
+$table-active-bg-factor: .1 !default;
+$table-active-bg: rgba($black, $table-active-bg-factor) !default;
+
+$table-hover-color: $table-color !default;
+$table-hover-bg-factor: .075 !default;
+$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;
+
+$table-border-factor: .1 !default;
$table-border-width: $border-width !default;
$table-border-color: $border-color !default;
-$table-head-bg: $gray-200 !default;
-$table-head-color: $gray-700 !default;
-$table-head-border-color: $gray-700 !default;
-
-$table-dark-color: $white !default;
-$table-dark-bg: $gray-800 !default;
-$table-dark-accent-bg: rgba($white, .05) !default;
-$table-dark-hover-color: $table-dark-color !default;
-$table-dark-hover-bg: rgba($white, .075) !default;
-$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;
-
$table-striped-order: odd !default;
$table-caption-color: $text-muted !default;
$table-bg-level: -9 !default;
-$table-border-level: -6 !default;
+
+$table-variants: (
+ "primary": color-level($primary, $table-bg-level),
+ "secondary": color-level($secondary, $table-bg-level),
+ "success": color-level($success, $table-bg-level),
+ "info": color-level($info, $table-bg-level),
+ "warning": color-level($warning, $table-bg-level),
+ "danger": color-level($danger, $table-bg-level),
+ "light": $light,
+ "dark": $dark,
+) !default;
+// scss-docs-end table-variables
// Buttons + Forms
diff --git a/scss/mixins/_table-row.scss b/scss/mixins/_table-row.scss
deleted file mode 100644
index 517229e1a7..0000000000
--- a/scss/mixins/_table-row.scss
+++ /dev/null
@@ -1,39 +0,0 @@
-// Tables
-
-@mixin table-row-variant($state, $background, $border: null) {
- // Exact selectors below required to override `.table-striped` and prevent
- // inheritance to nested tables.
- .table-#{$state} {
- &,
- > th,
- > td {
- background-color: $background;
- }
-
- @if $border != null {
- th,
- td,
- thead th,
- tbody + tbody {
- border-color: $border;
- }
- }
- }
-
- // Hover states for `.table-hover`
- // Note: this is not available for cells or rows within `thead` or `tfoot`.
- .table-hover {
- $hover-background: darken($background, 5%);
-
- .table-#{$state} {
- &:hover {
- background-color: $hover-background;
-
- > td,
- > th {
- background-color: $hover-background;
- }
- }
- }
- }
-}
diff --git a/scss/mixins/_table-variants.scss b/scss/mixins/_table-variants.scss
new file mode 100644
index 0000000000..9fd066edbc
--- /dev/null
+++ b/scss/mixins/_table-variants.scss
@@ -0,0 +1,21 @@
+// scss-docs-start table-variant
+@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-bg: #{$background};
+ --table-striped-bg: #{$striped-bg};
+ --table-striped-color: #{color-contrast($striped-bg)};
+ --table-active-bg: #{$active-bg};
+ --table-active-color: #{color-contrast($active-bg)};
+ --table-hover-bg: #{$hover-bg};
+ --table-hover-color: #{color-contrast($hover-bg)};
+
+ color: $color;
+ border-color: mix($color, $background, percentage($table-border-factor));
+ }
+}
+// scss-docs-end table-variant
diff --git a/site/content/docs/4.3/content/tables.md b/site/content/docs/4.3/content/tables.md
index 76b799fca3..bcf4007205 100644
--- a/site/content/docs/4.3/content/tables.md
+++ b/site/content/docs/4.3/content/tables.md
@@ -8,436 +8,15 @@ toc: true
## Overview
-Due to the widespread use of `
` elements across third-party widgets like calendars and date pickers, Bootstrap's tables are **opt-in**. Add the base class `.table` to any ``, then extend with our optional modifier classes or custom styles. **All table styles are inherited in Bootstrap**, meaning any nested tables will be styled in the same manner as the parent.
+Due to the widespread use of `` elements across third-party widgets like calendars and date pickers, Bootstrap's tables are **opt-in**. Add the base class `.table` to any ``, then extend with our optional modifier classes or custom styles. All table styles are not inherited in Bootstrap, meaning any nested tables can be styled independent from the parent.
Using the most basic table markup, here's how `.table`-based tables look in Bootstrap.
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry |
- the Bird |
- @twitter |
-
-
-
-{{< /example >}}
+{{< table class="table" simplified="false" >}}
-## Options
+## Variants
-### Inverted
-
-You can also invert the colors—with light text on dark backgrounds—with `.table-dark`.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry |
- the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-### Striped rows
-
-Use `.table-striped` to add zebra-striping to any table row within the ``.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry |
- the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry |
- the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-### Bordered
-
-Add `.table-bordered` for borders on all sides of the table and cells.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-### No borders
-
-Add `.table-borderless` for a table without borders.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-`.table-borderless` can also be used on dark tables.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-### Hoverable rows
-
-Add `.table-hover` to enable a hover state on table rows within a ``.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-### Small tables
-
-Add `.table-sm` to make any `.table` more compact by cutting all cell `padding` in half.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry the Bird |
- @twitter |
-
-
-
-{{< /example >}}
-
-## Vertical alignment
-
-Table cells of `` are always vertical aligned to the bottom. Table cells in `` inherit their alignment from `` and are aligned to the the top by default.
-
-{{< example >}}
-
-
-
-
- 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 |
- Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. |
-
-
- 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 |
- Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. |
-
-
- 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. |
- Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. |
-
-
-
-
-{{< /example >}}
-
-### Variants
-
-Use contextual classes to color table rows or individual cells.
+Use contextual classes to color tables, table rows or individual cells.
@@ -449,11 +28,6 @@ Use contextual classes to color table rows or individual cells.
-
- Active |
- Cell |
- Cell |
-
Default |
Cell |
@@ -473,18 +47,20 @@ Use contextual classes to color table rows or individual cells.
{{< highlight html >}}
-
-
...
-{{< table.inline >}}
+{{< table.inline >}}
+{{- range (index $.Site.Data "theme-colors") }}
+
+{{- end -}}
+{{< /table.inline >}}
+
+{{< table.inline >}}
{{- range (index $.Site.Data "theme-colors") }}
...
{{- end -}}
{{< /table.inline >}}
-
- ... |
-{{< table.inline >}}
+
{{< table.inline >}}
{{- range (index $.Site.Data "theme-colors") }}
... |
{{- end -}}
@@ -492,166 +68,261 @@ Use contextual classes to color table rows or individual cells.
{{< /highlight >}}
-Regular table background variants are not available with the dark table, however, you may use [text or background utilities]({{< docsref "/utilities/colors" >}}) to achieve similar styles.
+{{< callout info >}}
+{{< partial "callout-warning-color-assistive-technologies.md" >}}
+{{< /callout >}}
+
+## Accented tables
+
+### Striped rows
+
+Use `.table-striped` to add zebra-striping to any table row within the ``.
+
+{{< table class="table table-striped" >}}
+
+These classes can also be added to table variants:
+
+{{< table class="table table-dark table-striped" >}}
+
+{{< table class="table table-success table-striped" >}}
+
+### Hoverable rows
+
+Add `.table-hover` to enable a hover state on table rows within a ``.
+
+{{< table class="table table-hover" >}}
+
+{{< table class="table table-dark table-hover" >}}
+
+These hoverable rows can also be combined with the striped variant:
+
+{{< table class="table table-striped table-hover" >}}
+
+### Active tables
+
+Highlight a table row or cell by adding a `.table-active` class.
-
+
# |
- Heading |
- Heading |
+ First |
+ Last |
+ Handle |
-
+
1 |
- Cell |
- Cell |
+ Mark |
+ Otto |
+ @mdo |
2 |
- Cell |
- Cell |
+ Jacob |
+ Thornton |
+ @fat |
-
+
3 |
- Cell |
- Cell |
-
-
- 4 |
- Cell |
- Cell |
-
-
- 5 |
- Cell |
- Cell |
-
-
- 6 |
- Cell |
- Cell |
-
-
- 7 |
- Cell |
- Cell |
-
-
- 8 |
- Cell |
- Cell |
-
-
- 9 |
- Cell |
- Cell |
+ Larry the Bird |
+ @twitter |
{{< highlight html >}}
-
-...
-...
-...
-...
-...
-
-
-
- ... |
- ... |
- ... |
- ... |
- ... |
-
+
+
+ ...
+
+
+
+ ...
+
+
+ ...
+
+
+ 3 |
+ Larry the Bird |
+ @twitter |
+
+
+
{{< /highlight >}}
-{{< callout info >}}
-{{< partial "callout-warning-color-assistive-technologies.md" >}}
-{{< /callout >}}
+
+
+
+
+ # |
+ First |
+ Last |
+ Handle |
+
+
+
+
+ 1 |
+ Mark |
+ Otto |
+ @mdo |
+
+
+ 2 |
+ Jacob |
+ Thornton |
+ @fat |
+
+
+ 3 |
+ Larry the Bird |
+ @twitter |
+
+
+
+
-## Anatomy
-
-### Table head
-
-Similar to tables and dark tables, use the modifier classes `.thead-light` or `.thead-dark` to make ``s appear light or dark gray.
-
-{{< example >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
+{{< highlight html >}}
+
+
+ ...
-
- 1 |
- Mark |
- Otto |
- @mdo |
+
+ ...
- 2 |
- Jacob |
- Thornton |
- @fat |
+ ...
3 |
- Larry |
- the Bird |
+ Larry the Bird |
@twitter |
+{{< /highlight >}}
-
-
-
- # |
- First |
- Last |
- Handle |
-
-
-
-
- 1 |
- Mark |
- Otto |
- @mdo |
-
-
- 2 |
- Jacob |
- Thornton |
- @fat |
-
-
- 3 |
- Larry |
- the Bird |
- @twitter |
-
-
+## How do the variants and accented tables work?
+
+For the accented tables ([striped rows](#striped-rows), [hoverable rows](#hoverable-rows) and [active tables](#active-tables)), we used some techniques to make these effects work for all our [table variants](#variants):
+
+- First of all we set the background of a table cell with the `--table-bg` custom property. All table variants then set that custom property to colorize the table cells. This way, we don't get into trouble if semi-transparent colors are used as table backgrounds.
+- Then we add a linear background to the table cells with `background-image: linear-gradient(var(--table-accent-bg), var(--table-accent-bg));`. Since `--table-accent-bg` is transparent by default, we have an invisible transparent linear gradient by default.
+- When either `.table-striped`, `.table-hover` or `.table-active` classes are added, the `--table-accent-bg` is set to a semitransparent color to colorize the background.
+- For each table variant the `--table-accent-bg` color with the most contrast is generated, therefor `.table-primary` has a darkened accent color and `.table-dark` has a lightened accent color.
+- The text color and border color are also generated the same way. The colors and border colors are inherited by default.
+
+Behind the scenes it looks like this:
+
+{{< scss-docs name="table-variant" file="scss/mixins/_table-variants.scss" >}}
+
+## Table borders
+
+### Bordered tables
+
+Add `.table-bordered` for borders on all sides of the table and cells.
+
+{{< table class="table table-bordered" >}}
+
+[Border color utilities]({{< docsref "/utilities/borders#border-color" >}}) can be added to change colors:
+
+{{< table class="table table-bordered border-primary" >}}
+
+### Tables without borders
+
+Add `.table-borderless` for a table without borders.
+
+{{< table class="table table-borderless" >}}
+
+{{< table class="table table-dark table-borderless" >}}
+
+### Small tables
+
+Add `.table-sm` to make any `.table` more compact by cutting all cell `padding` in half.
+
+{{< table class="table table-sm" >}}
+
+{{< table class="table table-dark table-sm" >}}
+
+## Vertical alignment
+
+Table cells of `` are always vertical aligned to the bottom. Table cells in `` inherit their alignment from `` and are aligned to the the top by default. Use the [vertical align]({{< docsref "/utilities/vertical-align" >}}) classes to re-align where needed.
+
+
+
+
+
+
+ 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 |
+ Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. |
+
+
+ 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 |
+ Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. |
+
+
+ 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. |
+ Nulla vitae elit libero, a pharetra augue. Cras mattis consectetur purus sit amet fermentum. Vestibulum id ligula porta felis euismod semper. |
+
+
+
+
+
+
+{{< highlight html >}}
+
+
+
+
+
+ ...
+
+
+
+
+ ...
+
+
+ ...
+
+
+ ... |
+ ... |
+ This cell is aligned to the top. |
+ ... |
+
+
+
+
-{{< /example >}}
+{{< /highlight >}}
-### Captions
+## Nesting
-A `` functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
+Neither border styles, active styles nor table variants are inherited by nested tables:
-{{< example >}}
-
- List of users
+
+
# |
@@ -660,6 +331,92 @@ A `` functions like a heading for a table. It helps users with screen r
Handle |
+
+
+ 1 |
+ Mark |
+ Otto |
+ @mdo |
+
+
+
+
+
+
+ Header |
+ Header |
+ Header |
+
+
+
+
+ A |
+ First |
+ Last |
+
+
+ B |
+ First |
+ Last |
+
+
+ C |
+ First |
+ Last |
+
+
+
+ |
+
+
+ 3 |
+ Larry |
+ the Bird |
+ @twitter |
+
+
+
+
+
+{{< highlight html >}}
+
+
+ ...
+
+
+ ...
+
+
+
+ |
+
+ ...
+
+
+{{< /highlight >}}
+
+## How nesting works
+
+To prevent **any** style from leaking to nested tables we worked with the child combinator (`>`). Since we needed to target all the `td`s and `th`s in the `thead`, `tbody` and `tfoot`, our selector would look pretty long. Therefor we use the rather odd looking `.table > :not(caption) > * > * ` selector to target all `td`s and `th`s of the `.table` and not a nested table. Note: if you add ``s as direct children of a table, those `
` will be wrapped in a `
` by default and therefor making the selector work.
+
+## Anatomy
+
+### Table head
+
+Similar to tables and dark tables, use the modifier classes `.table-light` or `.table-dark` to make ``s appear light or dark gray.
+
+
+
+
+
+ # |
+ First |
+ Last |
+ Handle |
+
+
1 |
@@ -681,7 +438,143 @@ A `` functions like a heading for a table. It helps users with screen r
-{{< /example >}}
+
+
+{{< highlight html >}}
+
+{{< /highlight >}}
+
+
+
+
+
+ # |
+ First |
+ Last |
+ Handle |
+
+
+
+
+ 1 |
+ Mark |
+ Otto |
+ @mdo |
+
+
+ 2 |
+ Jacob |
+ Thornton |
+ @fat |
+
+
+ 3 |
+ Larry |
+ the Bird |
+ @twitter |
+
+
+
+
+
+{{< highlight html >}}
+
+{{< /highlight >}}
+
+
+### Table foot
+
+
+
+
+
+ # |
+ First |
+ Last |
+ Handle |
+
+
+
+
+ 1 |
+ Mark |
+ Otto |
+ @mdo |
+
+
+ 2 |
+ Jacob |
+ Thornton |
+ @fat |
+
+
+ 3 |
+ Larry |
+ the Bird |
+ @twitter |
+
+
+
+
+ Footer |
+ Footer |
+ Footer |
+ Footer |
+
+
+
+
+
+{{< highlight html >}}
+
+
+ ...
+
+
+ ...
+
+
+ ...
+
+
+{{< /highlight >}}
+
+### Captions
+
+A `` functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
+
+
+
+ List of users
+ {{< partial "table-content.html" >}}
+
+
+
+{{< highlight html >}}
+
+ List of users
+
+ ...
+
+
+ ...
+
+
+{{< /highlight >}}
You can also put the `` on the top of the table with `.caption-top`.
@@ -880,3 +773,10 @@ Use `.table-responsive{-sm|-md|-lg|-xl|-xxl}` as needed to create responsive tab
{{- end -}}
{{< /tables.inline >}}
{{< /highlight >}}
+
+## Customizing in Sass
+
+- The factor variables (`$table-striped-bg-factor`, `$table-active-bg-factor` & `$table-hover-bg-factor`) are used to determine the contrast in table variants.
+- Apart from the light & dark table variants, theme colors are lightened by the `$table-bg-level` variable.
+
+{{< scss-docs name="table-variables" file="scss/_variables.scss" >}}
diff --git a/site/content/docs/4.3/migration.md b/site/content/docs/4.3/migration.md
index 34f8dc9f0f..3806b6049a 100644
--- a/site/content/docs/4.3/migration.md
+++ b/site/content/docs/4.3/migration.md
@@ -72,7 +72,10 @@ Changes to Reboot, typography, tables, and more.
- [RFS]({{< docsref "/getting-started/rfs" >}}) enabled for automated font size rescaling. [See #29152](https://github.com/twbs/bootstrap/pull/29152)
- Reset default horizontal `padding-left` on `` and `` elements from browser default `40px` to `2rem`.
-- Simplified table styles (no more 2px border on `thead > th` elements) and tightened cell padding.
+- Simplified table styles (no more odd top border) and tightened cell padding.
+- Nested tables do not inherit styles anymore.
+- `.thead-light` and `.thead-dark` are dropped in favor of the `.table-*` variant classes which can be used for all table elements (`thead`, `tbody`, `tfoot`, `tr`, `th` and `td`).
+- The `table-row-variant()` mixin is renamed to `table-variant()` and accepts only 2 parameters: `$color` (colon name) and `$value` (color code). The border color and accent colors are automatically calculated based on the table factor variables.
- Dropped `.pre-scrollable` class. [See #29135](https://github.com/twbs/bootstrap/pull/29135)
- `.text-*` utilities do not add hover and focus states to links anymore. `.link-*` helper classes can be used instead. [See #29267](https://github.com/twbs/bootstrap/pull/29267)
- Drop `.text-justify` class. [See #229793](https://github.com/twbs/bootstrap/pull/29793)
diff --git a/site/layouts/partials/table-content.html b/site/layouts/partials/table-content.html
new file mode 100644
index 0000000000..71fca1d488
--- /dev/null
+++ b/site/layouts/partials/table-content.html
@@ -0,0 +1,27 @@
+
+
+ # |
+ First |
+ Last |
+ Handle |
+
+
+
+
+ 1 |
+ Mark |
+ Otto |
+ @mdo |
+
+
+ 2 |
+ Jacob |
+ Thornton |
+ @fat |
+
+
+ 3 |
+ Larry the Bird |
+ @twitter |
+
+
diff --git a/site/layouts/shortcodes/table.html b/site/layouts/shortcodes/table.html
new file mode 100644
index 0000000000..43f230ab84
--- /dev/null
+++ b/site/layouts/shortcodes/table.html
@@ -0,0 +1,30 @@
+{{- /*
+ Usage: `table [args]`
+
+ `args` are optional and can be one of the following:
+ class: any class(es) to be added to the `table` - default ""
+ simplified: show a simplified version in the examples - default `true`
+*/ -}}
+
+{{- $simplified := .Get "simplified" | default true -}}
+
+{{- $table_attributes := "" -}}
+{{- $table_content := " ...\n" -}}
+
+{{- with .Get "class" -}}
+{{- $table_attributes = printf ` class="%s"` . -}}
+{{- end -}}
+
+{{- if eq $simplified "false" -}}
+{{- $table_content = partialCached "table-content" . -}}
+{{- end -}}
+
+{{- $table := printf "" $table_attributes $table_content -}}
+
+
+
+ {{ partialCached "table-content" . }}
+
+
+
+{{- highlight $table "html" "" -}}