Hi,
Thanks for the questions. Find below my responses:
- Question: As a non-CSS expert, can you help me better understand what
"applying that special-case becomes ambiguous and difficult to define
consistently"? Is this in terms of code that authors would write, or prose
for spec authors? An example would be helpful here.
- Answer: The ambiguity is primarily around spec semantics. Gap
decorations extended the column-rule-* properties to accept value lists
and
`repeat()` patterns. The previous rule (“if style is none/hidden, then
computed width is 0”) is straightforward for a single value, but with
lists
and repeats you no longer have a clean, well-defined way of expressing
this
behavior. For example, from the CSSWG discussion:
- column-rule-style: solid dashed none;
- column-rule-width: 1px 2px;
- This cycles to: “1px solid, 2px dashed, (1px) none, 2px solid, 1px
dashed, (2px) none …”.
- Setting the width to zero in this case depending on the style at
any point in the expansion isn’t well-defined.
- Also, `repeat()` syntax is preserved at computed-value time, which
further prevents expanding lists and applying a clean index-based rule:
- column-rule-style: repeat(2, solid none dashed);
- column-rule-width: 1px 2px;
- This would expand to: “1px (solid), 2px (none), 1px(dashed),
2px(solid), 1px(none), 2px (dashed) …” But computed values explicitly do
not perform this expansion, so any rule that depends on per-index
alignment
between style and width cannot be spec'd in a well-defined way.
- Question: 2.37% of page views is a lot of page views. Why do we feel
confident that border-width needs backwards compat considerations for
getComputedStyle but column-rule-width and outline-width don't? Are you
saying that 2.37% of the use counters are coming from fingerprinting? I'm
also not sure what it means for a scraper to trigger a UseCounter - can you
clarify? I've typically thought of scraping as a server-side operation -
are these web extensions?
- Why do we feel confident that border-width needs backwards compat
considerations for getComputedStyle and column-rule-width and
outline-width
don’t?
- `border-*-width` properties are more commonly used and are tied
to the box model, so changing what getComputedStyle() returns is more
likely to affect existing scripts that compute geometry or layout
related
behavior. In contrast, outline-width and column-rule-width are less
commonly used and are only used for visual decoration so returning the
author-specified width rather than 0px should not affect the element’s
geometry, making user-visible regressions less likely.
- On the 2.37%
- The use counter added was scoped to trigger when the resolved
value gotten from getComputedStyle is called on an element where style
is
none/hidden but width is non-zero. While 2.37% is high we believe the
traffic is dominated by:
- Fingerprinting/Telemetry scripts that typically iterate over
every CSS property to build a unique “fingerprint” of the browser.
- Generic serializers that read all styles to copy/paste or
inspect elements
- The default for these properties is *-width: medium and *-style:
none. This is also a contributing factor to this high percentage. So
even
if a site doesn’t explicitly set these values and is being scraped, by
virtue of the defaults, the counter will get hit.
- On scrapers being server side
- In recent times, we’ve seen scrapers be headless browser
automation like Puppeteer or Selenium or client-side scripts in
real
browsers. They can execute Javascript and call getComputedStyle
which in
this case would expect the counter to be hit.
These tools often query hundreds of properties which signals
that a high query rate does not necessarily imply meaningful
web-facing
dependence on the current behavior.
- Also, we are not first movers in this case, Webkit and Gecko
have shipped this.
- + [email protected] for more details on this.
On Thursday, January 22, 2026 at 6:21:07 PM UTC-8 Mike Taylor wrote:
> On 1/21/26 1:46 p.m., Chromestatus wrote:
>
> *Contact emails*
> [email protected], [email protected]
>
> *Explainer*
> *No information provided*
>
> *Specification*
> https://github.com/w3c/csswg-drafts/pull/11913/files
>
> *Summary*
> This proposal untangles ‘border-width’, ‘outline-width’, and
> ‘column-rule-width’ from their corresponding ‘*-style’ properties.
> Previously, if a ‘*-style’ property, such as ‘border-style’, was set to
> ‘none’ or ‘hidden’, the computed ‘*-width’, such as ‘border-width’, would
> resolve to ‘0px’, even if the width was explicitly set to ‘10px’. Following
> a resolution in the CSSWG [1], the computed values of ‘border-width’,
> ‘outline-width’, and ‘column-rule-width’ will now reflect their specified
> values, regardless of the associated style property's value. Similarly, the
> resolved values of ‘outline-width’, and ‘column-rule-width’ will now
> reflect their specified values, regardless of the associated style
> property's value. [1]:
> https://github.com/w3c/csswg-drafts/issues/11494#issuecomment-2675800489
>
> *Blink component*
> Blink>CSS
> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ECSS%22>
>
> *Web Feature ID*
> *No information provided*
>
> *Motivation*
> Today, CSS special-cases ‘border-*-width’, ‘outline-width’, and
> ‘column-rule-width’ so that their computed value becomes ‘0px’ when the
> corresponding ‘*-style’ is ‘none’ or ‘hidden’, even if the author specified
> a nonzero width. With Gap Decorations extending ‘column-rule-*’ properties
> to support lists/repeaters, applying that special-case becomes ambiguous
> and difficult to define consistently. Having ‘*-width’ values independent
> of ‘*-style’, provides an intuitive model for these properties and better
> reflects the author-specified value.
>
> As a non-CSS expert, can you help me better understand what "applying that
> special-case becomes ambiguous and difficult to define consistently"? Is
> this in terms of code that authors would write, or prose for spec authors?
> An example would be helpful here.
>
>
> *Initial public proposal*
> https://github.com/w3c/csswg-drafts/issues/11494
>
> *Search tags*
> column-rule-width <http:///features#tags:column-rule-width>, border-width
> <http:///features#tags:border-width>, outline-width
> <http:///features#tags:outline-width>
>
> *TAG review*
> *No information provided*
>
> *TAG review status*
> Not applicable
>
> *Risks*
>
>
> *Interoperability and Compatibility*
> The interoperability risk is low as both Gecko and Webkit have already
> implemented these changes. Compatibility risk is also low. The resolved
> value for `border-width` via `getComputedStyle()` will remain 0px when
> `border-style` is set to `none`/ `hidden`, maintaining backward
> compatibility. For `outline-width` and `column-rule-width`, both computed
> and resolved values will show the specified values, as these properties are
> rarely queried and unlikely to impact existing content. To support the
> claim, we collected UseCounter data measuring how often these values are
> queried. The computed‑value counters for these properties are extremely low
> (<0.0001%). The resolved‑value counters for ‘column-rule-width’ and
> ‘outline-width’ show ~2.37% usage, which reflects calls to
> ‘getComputedStyle()’ rather than observable rendering usage. Since
> ‘getComputedStyle()’ is frequently queried by automated tooling (e.g.
> scrapers and fingerprinting scripts) that do not depend on property
> semantics, this usage does not indicate meaningful web‑facing reliance. As
> a result, the compatibility risk remains low.
>
> 2.37% of page views is a lot of page views. Why do we feel confident that
> border-width needs backwards compat considerations for getComputedStyle but
> column-rule-width and outline-width don't? Are you saying that 2.37% of the
> use counters are coming from fingerprinting? I'm also not sure what it
> means for a scraper to trigger a UseCounter - can you clarify? I've
> typically thought of scraping as a server-side operation - are these web
> extensions?
>
> thanks!
>
>
> *Gecko*: Shipped/Shipping (
> https://bugzilla.mozilla.org/show_bug.cgi?id=1998285)
>
> *WebKit*: Shipped/Shipping (https://bugs.webkit.org/show_bug.cgi?id=304940
> )
>
> *Web developers*: No signals
>
> *Other signals*:
>
> *WebView application risks*
>
> Does this intent deprecate or change behavior of existing APIs, such that
> it has potentially high risk for Android WebView-based applications?
> *No information provided*
>
>
> *Debuggability*
> No extra functionality is needed in Devtools to debug this feature update.
>
> *Will this feature be supported on all six Blink platforms (Windows, Mac,
> Linux, ChromeOS, Android, and Android WebView)?*
> Yes
>
> *Is this feature fully tested by web-platform-tests
> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>?*
> Yes
>
> https://wpt.fyi/results/css/css-backgrounds/animations/border-width-interpolation.html
>
> https://wpt.fyi/results/css/CSS2/ui/outline-width-096.xht
> https://wpt.fyi/results/css/CSS2/borders/border-width-011.xht
> https://wpt.fyi/results/css/CSS2/borders/border-width-012.xht
> https://wpt.fyi/results/css/css-ui/parsing/outline-width-computed.html
> https://wpt.fyi/results/css/css-ui/outline-009.html
> https://wpt.fyi/results/css/css-ui/animation/outline-width-interpolation.html
> https://wpt.fyi/results/css/css-multicol/parsing/column-rule-width-computed.html
>
> https://wpt.fyi/results/css/css-multicol/parsing/column-rule-computed.html
> https://wpt.fyi/results/css/css-backgrounds/animations/border-width-interpolation.html
>
> *Flag name on about://flags*
> *No information provided*
>
> *Finch feature name*
> DecoupleComputedBorderWidthFromStyle,DecoupleResolvedColumnRuleWidthFromStyleEnabled
>
>
>
> *Rollout plan*
> Will ship enabled for all users
>
> *Requires code in //chrome?*
> False
>
> *Tracking bug*
> https://issues.chromium.org/issues/393631108
>
> *Estimated milestones*
> Shipping on desktop 146
> Shipping on Android 146
> Shipping on WebView 146
>
> *Anticipated spec changes*
>
> Open questions about a feature may be a source of future web compat or
> interop issues. Please list open issues (e.g. links to known github issues
> in the project for the feature specification) whose resolution may
> introduce web compat/interop risk (e.g., changing to naming or structure of
> the API in a non-backward-compatible way).
> *No information provided*
>
> *Link to entry on the Chrome Platform Status*
> https://chromestatus.com/feature/5133099851317248?gate=5201902006173696
>
> This intent message was generated by Chrome Platform Status
> <https://chromestatus.com>.
>
> --
> You received this message because you are subscribed to the Google Groups
> "blink-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion visit
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69711ef3.710a0220.3080c5.02c3.GAE%40google.com
>
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/69711ef3.710a0220.3080c5.02c3.GAE%40google.com?utm_medium=email&utm_source=footer>
> .
>
>
--
You received this message because you are subscribed to the Google Groups
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/bbb9af14-4d90-4a0f-a6dd-60f97f274279n%40chromium.org.