[wp-trac] [WordPress Trac] #64094: Button variation element styling in theme.json overridden by outline default style
WordPress Trac
noreply at wordpress.org
Tue Oct 14 09:33:59 UTC 2025
#64094: Button variation element styling in theme.json overridden by outline
default style
--------------------------+-----------------------------
Reporter: peroks | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: General | Version: 6.8.3
Severity: normal | Keywords:
Focuses: |
--------------------------+-----------------------------
# Issue
When using a `core/button` `outline` style with `outline.elements.button`
styling in theme.json, the default `outline` styles override the
`outline.elements.button` styles. Some of the `outline.elements.button`
properties can be applied directly to the `outline` object, but not all,
i.e. `:hover`, `:focus`, etc.
This is an issue, because the only way to apply a **hover** effect to the
default outline button in theme.json is to use the `css` property, as seen
in the Twenty Twenty Five theme. The expected behaviour is that the
`elements.button` styles in theme.json take priority over the default
`outline` styles (not defined in theme.json). Or more general: that
theme.json styling take priority over default styling.
The cause for this issue is the **order** of the generated css. All
selectors have a specificity of (0,1,0), but the default `outline` styles
are positioned **after** the `elements` styles and thus override them.
This only applies to the `outline` style. When using a custom style, i.e.
`variations.custom-outline`, element styling works as expected on the
**frontend** (but not in the editor, see below).
# How to reproduce
In Twenty Twenty Five theme.json, replace
`styles.blocks.core/button.variations.outline` with
"outline": {
"elements": {
"button": {
"color": {
"background": "var:preset|color|accent-2"
},
":hover": {
"color": {
"background":
"var:preset|color|accent-3"
}
}
}
}
}
You will see that the background colors don't apply. They do when using a
`custom-outline` style.
This is what the generated css looks like
:root :where(.is-style-outline--2 .wp-element-button, .is-style-outline--2
.wp-block-button__link) {
background-color: var(--wp--preset--color--accent-2);
}
:root :where(.is-style-outline--2 .wp-element-button:hover, .is-style-
outline--2 .wp-block-button__link:hover) {
background-color: var(--wp--preset--color--accent-3);
}
:root :where(.wp-block-button.is-style-outline--2 .wp-block-button__link)
{
background: transparent none;
border-color: currentColor;
border-width: 2px;
border-style: solid;
color: currentColor;
padding-top: 0.667em;
padding-right: 1.33em;
padding-bottom: 0.667em;
padding-left: 1.33em;
}
You see that the `elements` styles are created, but are overridden by the
default non-theme.json `outline` styles coming **after** the `element`
styles.
Due to the use of the `css` property for hover styling in Twenty Twenty
Five theme.json, I guess this issue is kind of known (to some), but I
didn't find a corresponding issue and think this is bug which should be
fixed.
# Additional editor issue
For custom button styles, element styling works as expected on the
frontend, but not in the **editor**. There, the element styles like the
background colors don't apply.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/64094>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list