← Chrome 147 reference

v147 · css · interop fix

CSS update: decoupling of Width and Style properties

Limited availability

  • Chrome · decoupled in 147
  • Firefox · border/outline earlier; column-rule in 147
  • Safari · border/outline earlier; column-rule fix in WebKit
  • Edge · no independent record

This behavior change carries no Baseline badge: webstatus.dev has no web-feature tracking the width/style decoupling (queries for border-width, outline-width and column-rule on 2026-10-04 return none). The underlying properties are themselves Baseline Widely available via the borders and outlines web-features. Per-engine status above is from the ChromeStatus API record (“aligns Chrome with Firefox and WebKit, which have already implemented this behavior”), Firefox bug 1998285 (RESOLVED FIXED, target 147 Branch) and WebKit bug 304940 (RESOLVED FIXED). See the full table.

Chrome 147 aligns with Firefox and Safari: the computed values of border-width, outline-width, and column-rule-width are now independent of their corresponding *-style properties. Previously Chrome forced the computed width to 0px when style was none or hidden; now the author-specified width is always preserved in the computed value, and for outline-width and column-rule-width it is also what getComputedStyle() returns. border-width still resolves to the used value — 0px when no border is painted.

what changed

PropertyBefore Chrome 147Chrome 147+
border-width Computed value forced to 0px when border-style: none Computed value reflects the authored value regardless of border-style
outline-width Computed value forced to 0px when outline-style: none Computed value and resolved value both reflect the authored value
column-rule-width Computed value forced to 0px when column-rule-style: none Computed value and resolved value both reflect the authored value

Note the asymmetry: for border-width only the computed value is decoupled. The spec now says explicitly that its resolved value (what getComputedStyle() returns) is the used value, and “if the border-style corresponding to a given border-width is none or hidden, then the used width is 0”. For outline-width and column-rule-width no such used-value clause exists, so their resolved values follow the computed value and report the authored width.

Source: ChromeStatus — CSS update: decoupling of Width and Style properties; CSS Backgrounds & Borders Level 3 §3.3 (resolved-value clause); verified 2026-10-04.

syntax

The value grammar of the three properties is unchanged. What changed is each property’s Computed value line: the trailing special case (“; zero if the … style is none or hidden”) was removed by csswg-drafts PR #11913 (“Adjust *-width zero value special cases per WG resolution”, resolving issue #11494). Value definitions and the current computed-value lines, quoted verbatim from the editor’s drafts (read 2026-10-04):

<line-width> = <length [0,∞]> | thin | medium | thick

/* CSS Backgrounds & Borders Level 3 — §3.3 Line Thickness */
border-top-width, border-right-width, border-bottom-width, border-left-width
  Value:          <line-width>
  Initial:        medium
  Applies to:     all elements except ruby base containers and ruby annotation containers
  Computed value: absolute length, snapped as a border width

border-width
  Value:          <line-width>{1,4}

/* CSS Basic User Interface Level 4 — Outline Thickness */
outline-width
  Value:          <line-width>
  Initial:        medium
  Applies to:     all elements
  Computed value: absolute length, snapped as a border width

/* CSS Multi-column Layout Level 1 — The Width Of Column Rules */
column-rule-width
  Value:          <line-width>
  Initial:        medium
  Applies to:     multicol containers
  Computed value: absolute length, snapped as a border width

/* CSS Gaps Level 1 — Gap decoration width (list-valued extension) */
column-rule-width, row-rule-width
  Applies to:     grid containers, flex containers, multicol containers, and masonry containers
  Computed value: list of absolute lengths, snapped as a border width

The new normative clause added for borders only:

The resolved value for the border-width properties is the used value. If the border-style corresponding to a given border-width is none or hidden, then the used width is 0.
Source: css-backgrounds-3 §3.3; css-ui-4 outline-width; css-multicol-1 §crw; css-gaps-1 gap decoration width; diff verified against PR #11913 (commit 5e14aa0), 2026-10-04.

why it matters

Pages that read getComputedStyle().outlineWidth or columnRuleWidth — for example, to compute layout or animate from a base state — now get the authored value reliably across Chrome, Firefox, and Safari. For border-width the readback is unchanged (0px with border-style: none, because the resolved value is the used value), but its computed value no longer collapses to zero: since the Animation type of these properties is “by computed value”, toggling only border-style no longer makes border-width itself jump 0px → 4px, so a registered transition: border-width is no longer triggered by a pure style toggle, and values inherited with inherit carry the authored width.

Source: ChromeStatus summary; Animation-type and computed-value lines in css-backgrounds-3 §3.3.

examples

/* CSS */
.card {
  border-style: none;   /* no border painted */
  border-width: 4px;    /* preserved in the computed value since Chrome 147 */
  outline-style: none;
  outline-width: 6px;
}
// JavaScript
const cs = getComputedStyle(document.querySelector(".card"));

// outline-width (and column-rule-width): the resolved value now
// reflects the author-specified value even while the style is "none".
cs.outlineWidth;   // Chrome 147+: "6px"   (previously "0px")

// border-width still resolves to the USED value, which is 0 when no
// border is painted — only its COMPUTED value was decoupled.
cs.borderWidth;    // "0px" while border-style is none (unchanged)
Live example from the Chrome Platform Showcase (route verified 200 via GET, 2026-10-04). Sibling concept demos: width/style invariant test, transition continuity, animation pipeline, and compatibility lab.Source: chrome-platform-showcase
Source: value behavior per the ChromeStatus summary and css-backgrounds-3 §3.3; snippet gendn-derived (labelled accordingly), not executed.

browser compatibility

The decoupling change itself is not yet recorded in BCD: css/properties/border-width.json, outline-width.json and column-rule-width.json carry no note about it (raw JSON verified 2026-10-04). Interim data for the behavior change, labelled as such, from ChromeStatus and the vendor trackers:

BrowserWidth/style decouplingEvidence (interim, not BCD)
Chrome147 (desktop, Android, WebView)ChromeStatus API record; crbug 393631108
EdgeNo independent recordChromium-derived; no Edge-specific signal found (2026-10-04)
Firefoxborder/outline: earlier; column-rule-width: 147ChromeStatus: “Firefox … already implemented this behavior”; bug 1998285 RESOLVED FIXED, target 147 Branch
Safariborder/outline: earlier; column-rule-width: fixed in WebKit, release not recordedChromeStatus: “WebKit … already implemented this behavior”; WebKit bug 304940 RESOLVED FIXED

Per-version support for the three properties themselves, from BCD (verified 2026-10-04):

PropertyChromeEdgeFirefoxSafari
border-width11211
outline-width1121.51.2
column-rule-width50 (-webkit- since 1)1252 (-moz- 3.5–74)9 (-webkit- since 3)
Source: BCD border-width.json, outline-width.json, column-rule-width.json; ChromeStatus API record.

quick reference

Affected propertiesborder-width · outline-width · column-rule-width
InteropNow matches Firefox and Safari behaviour
Shipped inChrome 147 (desktop + Android + WebView) — listed under “Enabled by default” in the milestone=147 listing
Intent to Shipblink-dev thread (resolved from the ChromeStatus record’s message-id link)
ChromeStatus5133099851317248 — CSS update: decoupling of Width and Style properties
SpecCSS Backgrounds and Borders Level 3 (see Specifications for all four modules)
Source: ChromeStatus API record (re-read 2026-10-04); milestone=147 listing.

specifications

SpecificationSection
CSS Backgrounds and Borders Module Level 3§3.3 Line Thickness: the border-width properties
CSS Basic User Interface Module Level 4Outline Thickness: the outline-width property
CSS Multi-column Layout Module Level 1The Width Of Column Rules: the column-rule-width property
CSS Gaps Module Level 1Gap decoration width: column-rule-width and row-rule-width
csswg-drafts PR #11913The change itself, per WG resolution of issue #11494
Source: editor’s drafts CSS Backgrounds, CSS UI, CSS Multicol and CSS Gaps read 2026-10-04; csswg-drafts PR diff (commit 5e14aa0).

see also