Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tables: Set simpler selectors to decrease specificity #39608

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
30 changes: 14 additions & 16 deletions scss/_tables.scss
Expand Up @@ -11,6 +11,7 @@
// End of reset
--#{$prefix}table-color: #{$table-color};
--#{$prefix}table-bg: #{$table-bg};
--#{$prefix}table-padding: #{$table-cell-padding-y $table-cell-padding-x};
--#{$prefix}table-border-color: #{$table-border-color};
--#{$prefix}table-accent-bg: #{$table-accent-bg};
--#{$prefix}table-striped-color: #{$table-striped-color};
Expand All @@ -25,13 +26,9 @@
vertical-align: $table-cell-vertical-align;
border-color: var(--#{$prefix}table-border-color);

// 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-y $table-cell-padding-x;
td,
th {
padding: var(--#{$prefix}table-padding);
// Following the precept of cascades: https://codepen.io/miriamsuzanne/full/vYNgodb
color: var(--#{$prefix}table-color-state, var(--#{$prefix}table-color-type, var(--#{$prefix}table-color)));
background-color: var(--#{$prefix}table-bg);
Expand Down Expand Up @@ -66,10 +63,7 @@
//

.table-sm {
// stylelint-disable-next-line selector-max-universal
> :not(caption) > * > * {
padding: $table-cell-padding-y-sm $table-cell-padding-x-sm;
}
--#{$prefix}table-padding: #{$table-cell-padding-y-sm $table-cell-padding-x-sm};
}


Expand All @@ -83,19 +77,20 @@
// to the `td`s or `th`s

.table-bordered {
> :not(caption) > * {
> tr,
> :not(caption) > tr {
border-width: $table-border-width 0;

// stylelint-disable-next-line selector-max-universal
> * {
> td,
> th {
border-width: 0 $table-border-width;
}
}
}

.table-borderless {
// stylelint-disable-next-line selector-max-universal
> :not(caption) > * > * {
> tr > *,
> :not(caption) > tr > * {
border-bottom-width: 0;
}

Expand All @@ -110,6 +105,7 @@

// For rows
.table-striped {
> tr:nth-of-type(#{$table-striped-order}) > *,
> tbody > tr:nth-of-type(#{$table-striped-order}) > * {
--#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);
--#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);
Expand All @@ -118,6 +114,7 @@

// For columns
.table-striped-columns {
> tr > :nth-child(#{$table-striped-columns-order}),
> :not(caption) > tr > :nth-child(#{$table-striped-columns-order}) {
--#{$prefix}table-color-type: var(--#{$prefix}table-striped-color);
--#{$prefix}table-bg-type: var(--#{$prefix}table-striped-bg);
Expand All @@ -138,6 +135,7 @@
// Placed here since it has to come after the potential zebra striping

.table-hover {
> tr:hover > *,
> tbody > tr:hover > * {
--#{$prefix}table-color-state: var(--#{$prefix}table-hover-color);
--#{$prefix}table-bg-state: var(--#{$prefix}table-hover-bg);
Expand Down