mirror of
https://github.com/WordPress/WordPress.git
synced 2024-12-29 04:28:07 +01:00
b3bb99b3d7
This change restructures the Button element styles for better a11y and expected color behaviors. Here what has changed: - The `button-style()` mixin is now the ''single source or truth'' for how Button should look site-wide. - Button Block, File Block, and Search form Blocks all rely on this one mixin. - The same styles is also applied to the `<button>` element which appears in widgets, the 404 search form and comments form. - Improves expected button styles for various conditions and contexts as follows: - User color palette selections for Buttons are retained regardless of a parent block’s color settings or dark-mode. - Supports both Default/Filled styles and Outline styles. - More consistent `:hover` and `:active` styles. - `:focus` styles are now always visible and legible. - Adds a `--local-color` color variable to scope color relationships to nested blocks. - Reduces selectors in `style.css` output. - 1:1 experience between editor and front end button styles. - Properly supports Dark-mode. Props allancole, poena, scruffian, megphillips91. Fixes #51927. Built from https://develop.svn.wordpress.org/trunk@49987 git-svn-id: http://core.svn.wordpress.org/trunk@49688 1a063a9b-81f0-0310-95a4-ce76da25c4cd
102 lines
2.2 KiB
SCSS
102 lines
2.2 KiB
SCSS
// Responsive breakpoints mixin
|
|
@mixin add_variables( $view: frontend ) {
|
|
|
|
@if frontend == $view {
|
|
|
|
:root {
|
|
@content;
|
|
}
|
|
}
|
|
|
|
@if editor == $view {
|
|
|
|
:root,
|
|
body {
|
|
@content;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Button style
|
|
// - Applies button styles to blocks and elements that share them.
|
|
@mixin button-style() {
|
|
border: var(--button--border-width) solid transparent;
|
|
border-radius: var(--button--border-radius);
|
|
cursor: pointer;
|
|
display: block;
|
|
font-weight: var(--button--font-weight);
|
|
font-family: var(--button--font-family);
|
|
font-size: var(--button--font-size);
|
|
line-height: var(--button--line-height);
|
|
padding: var(--button--padding-vertical) var(--button--padding-horizontal);
|
|
text-decoration: none;
|
|
|
|
// Standard Button Color Relationship Logic
|
|
&:not(:hover):not(:active) {
|
|
|
|
// Text colors
|
|
&:not(.has-text-color) {
|
|
color: var(--global--color-background);
|
|
|
|
// Nested
|
|
.has-background & {
|
|
color: var(--local--color-background, var(--global--color-primary));
|
|
|
|
&.has-background {
|
|
color: var(--global--color-primary);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Background-colors
|
|
&:not(.has-background) {
|
|
background-color: var(--global--color-primary);
|
|
|
|
// Nested
|
|
.has-background & {
|
|
background-color: var(--local--color-primary, var(--global--color-primary));
|
|
}
|
|
}
|
|
}
|
|
|
|
// Hover Button color should match parent element foreground color
|
|
&:hover,
|
|
&:active {
|
|
background-color: transparent;
|
|
border-color: currentColor;
|
|
color: inherit;
|
|
}
|
|
|
|
// Focus Button outline color should always match the current text color
|
|
&:focus {
|
|
outline-offset: -6px;
|
|
outline: 2px dotted currentColor;
|
|
}
|
|
|
|
// Disabled Button colors
|
|
&:disabled {
|
|
background-color: var(--global--color-white-50);
|
|
border-color: var(--global--color-white-50);
|
|
color: var(--button--color-text-active);
|
|
}
|
|
}
|
|
|
|
@mixin innerblock-margin-clear($container) {
|
|
|
|
// Clear the top margin for the first-child.
|
|
> #{$container} > *:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
// Last child that is not the appender.
|
|
> #{$container} > *:last-child:not(.block-list-appender) {
|
|
margin-bottom: 0;
|
|
}
|
|
|
|
// When selected, the last item becomes the second last because of the appender.
|
|
&.has-child-selected > #{$container} > *:nth-last-child(2),
|
|
&.is-selected > #{$container} > *:nth-last-child(2) {
|
|
margin-bottom: 0;
|
|
}
|
|
}
|