From d40366ff91fe38e57a7be0004afada75962ba296 Mon Sep 17 00:00:00 2001
From: "L. David Baron"
Date: Mon, 18 May 2026 11:59:17 -0400
Subject: [PATCH 01/69] [css-navigation-1] Improve descriptor interactions in
@route and enhance base-url.
This improves the interaction of descriptors inside of the @route rule
by defining the normal error handling behavior for property- or
descriptor-like things.
It also allows the base-url descriptor to work with the pattern
descriptor rather than only with the init-descriptors.
Finally, it gives the base-url descriptor stylesheet (default) and
document values.
---
css-navigation-1/Overview.bs | 113 ++++++++++++++++++++++-------------
1 file changed, 70 insertions(+), 43 deletions(-)
diff --git a/css-navigation-1/Overview.bs b/css-navigation-1/Overview.bs
index 93bf0b5c426..635e33099f8 100644
--- a/css-navigation-1/Overview.bs
+++ b/css-navigation-1/Overview.bs
@@ -44,26 +44,36 @@ is an at-rule that associates a name with a [=URL pattern=].
This name can be referenced in ''@navigation'' rules
and in '':active-navigation()'' pseudo-classes.
-The syntax of the ''@route'' rule is:
+The syntax of the ''@route'' rule is described by the <> production in:
-@route <> {
- [ <> | <> ]
-}
+<> = @route <> { <> }
-based on the following definitions:
+This means that the rule accepts a sequence of descriptors
+that have the syntax of declarations.
+However, in valid style sheets the only descriptors must match
+the <> production below.
+Any other descriptors are ignored.
-
-<> = ;* <> ;*
+
+<> = <> |
+ <> |
+ <>
<> = pattern : <>
-<> = ;* <> [ ;+ <> ]* ;*
<> = <> : <>
<> = protocol | hostname | port | pathname |
- search | hash | base-url
+ search | hash
+<> = base-url : stylesheet | document | <>
-This associates an author-defined keyword with a URL pattern,
+If two valid descriptors in a single rule have the same name,
+the last one is used and the others are ignored.
+If a rule has both a valid <>
+and a valid <>
+then it is ignored.
+
+This rule associates an author-defined keyword with a URL pattern,
so that any URL that matches one of the URL patterns
matches the route named by the keyword.
@@ -71,8 +81,11 @@ The ''@route'' rule can be defined in one of two ways:
: with the pattern descriptor
:: in this case the URL pattern represented is
- the one represented by the <> function
- given as the descriptor's value.
+ the result of invoking
+ [=create a URL pattern for url-pattern()=] given
+ arg as the argument to the ''url-pattern()'' function
+ and baseURLSpecifier as
+ the (optional) value of the rule's <>.
: with the other descriptors named by <>
:: In this case the URL pattern represented is the result of invoking
[=URL pattern/create|create a URL pattern=] given
@@ -80,16 +93,15 @@ The ''@route'' rule can be defined in one of two ways:
constructed from the descriptors and their values.
Each dictionary member is given the value of
the descriptor with the same name,
- except the baseURL member is given the value of
- the base-url descriptor.
- If a base-url descriptor is not given then one is created from
- the [=style resource base URL=] of the rule.
+ except the baseURL member is given the result of
+ [=create a URL for a base descriptor=]
+ given baseURLSpecifier as
+ the (optional) value of the rule's <>.
ISSUE: Should this use <>, <>, or <>
for the route names?
-ISSUE: Is there value in being able to provide a list of <>
-rather than just one?
+ISSUE: Should we use base-url or just base as the descriptor name?
NOTE: The list of allowed init descriptors does not include username
or password since they seem unlikely to be useful.
@@ -147,33 +159,16 @@ which can be used to match URLs.
<> = url-pattern( <> )
-This function represents a [=URL pattern=] that can be created
-using the steps of the create a URL pattern for url-pattern() algorithm:
-
-1. Let arg be the <> argument to the ''url-pattern()'' function.
+This function represents the [=URL pattern=] resulting from
+invoking [=create a URL pattern for url-pattern()=] with its string argument.
-1. Let baseURL be the [=style resource base URL=] of
- the rule or declaration block containing the ''url-pattern()'' function.
+The steps of the create a URL pattern for url-pattern() algorithm,
+given a string arg and
+an optional baseURLSpecifier
+which can be ''document'', ''stylesheet'', or a URL, are:
-
- Do we want this to be the base URL all the time?
- For use of ''url-pattern()'' in ''@navigation'',
- it's likely more useful for the base URL
- to be the document URL rather than the style sheet URL.
- However, it would be very awkward for ''url-pattern()''
- to be inconsistent with ''url()''.
-
- Should we allow the base URL of ''url-pattern()''
- to be defined by the consumer?
- Should we introduce document-url-pattern()?
- Should we do something similar to
- [[css-images-3#ambiguous-urls]]
- (see )?
-
- Also see other proposed uses of {{URLPattern}} in CSS
- in ,
- for '':local-link''.
-
+1. Let baseURL be the result of
+ [=create a URL for a base descriptor=] given baseURLSpecifier.
1. Return the result of [=URL pattern/create|create a URL pattern=] given
arg, baseURL, and an empty [=map=].
@@ -182,6 +177,38 @@ NOTE: This function requires that its argument is quoted.
This differs from the ''url()'' function,
which allows its argument to be quoted or unquoted.
+The create a URL for a base descriptor algorithm, given
+an optional baseURLSpecifier
+which can be ''document'', ''stylesheet'', or a URL, is:
+
+
+
+: if baseURLSpecifier is not present or is ''stylesheet''
+:: the [=style resource base URL=] of
+ the rule or declaration block containing the ''url-pattern()'' function.
+
+: if baseURLSpecifier is ''document''
+:: the [=document base URL=] of the document
+
+: if baseURLSpecifier is a URL
+:: baseURLSpecifier
+
+
+
+
+Should the default always be ''stylesheet''?
+For use of ''url-pattern()'' in ''@navigation'',
+it's likely more useful for the base URL
+to be the document URL rather than the style sheet URL.
+However, it would be very awkward for ''url-pattern()''
+to be inconsistent with ''url()''.
+
+Also see other proposed uses of {{URLPattern}} in CSS
+in ,
+for '':local-link''.
+
+
+
To serialize a ''url-pattern()'' function f,
[=serialize a function=] f,
using [=serialize a string=] on the single argument
From 2078e8ffadfae5b6c8f413bc10fa1a4f75704386 Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 20 May 2026 17:35:04 -0400
Subject: [PATCH 02/69] [selectors-5][editorial] Back to ED, start post-FPWD
changes
---
selectors-5/Overview.bs | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/selectors-5/Overview.bs b/selectors-5/Overview.bs
index 228d15b9916..a684d20385f 100644
--- a/selectors-5/Overview.bs
+++ b/selectors-5/Overview.bs
@@ -3,9 +3,8 @@ Title: Selectors Level 5
Group: CSSWG
Shortname: selectors
Level: 5
-Status: FPWD
-Date: 2026-02-17
-Prepare for TR: yes
+Status: ED
+Prepare for TR: no
!Delta Spec: yes
Work Status: Exploring
ED: https://drafts.csswg.org/selectors-5/
@@ -494,6 +493,16 @@ Grammar
Changes
+
+
+
+ - Moved the column combinator to Selectors 5
+ PR 13424
+
+
+
Changes Since Level 4
From 4a151f350b150117f5b5d75a60a018c6195dadcc Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 20 May 2026 17:44:33 -0400
Subject: [PATCH 03/69] [selectors-5][editorial] Update WPT
---
selectors-5/Overview.bs | 21 +++++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/selectors-5/Overview.bs b/selectors-5/Overview.bs
index a684d20385f..76a88160d39 100644
--- a/selectors-5/Overview.bs
+++ b/selectors-5/Overview.bs
@@ -945,7 +945,6 @@ Acknowledgements
has-style-sharing-pseudo-007.html
has-style-sharing-pseudo-008.html
has-visited.html
- invalidation/attribute-or-elemental-selectors-in-has.html
invalidation/child-indexed-pseudo-classes-in-has.html
invalidation/crashtests/has-pseudoclass-only-crash.html
invalidation/defined-in-has.html
@@ -1259,7 +1258,6 @@ Acknowledgements
- media/media-loading-state.html
media/media-loading-state-timing.sub.html
media/media-playback-state-timing.html
@@ -1484,6 +1482,25 @@ Acknowledgements
webkit-pseudo-element.html
+
+ active-after-relayouts.html
+ active-toplayer-001.html
+ focus-within-toplayer-001.html
+ hash-collision-cssom.html
+ hover-toplayer-001.html
+ invalidation/attribute-or-elemental-selectors-in-has.html
+ invalidation/empty-pseudo-in-has-display-none.html
+ invalidation/has-in-is-non-subject-compound.html
+ invalidation/input-in-range-in-has-with-readonly.html
+ invalidation/option-disabled-when-ancestor-changes.html
+ media/media-loading-state.sub.html
+ media/media-playing-paused-style-invalidation.html
+ selectors-4/lang-singleton-subtag-matching.html
+ selectors-attr-many-2.html
+ toplayer-transition-001.html
+ user-action-pseudo-top-layer.html
+
+
heading.html
invalidation/heading-pseudo-class-in-has.html
From 115233b09aab9df31eb8b152c47148ae6d82a054 Mon Sep 17 00:00:00 2001
From: Guillaume
Date: Thu, 21 May 2026 11:23:39 +0200
Subject: [PATCH 04/69] [animation-triggers-1][editorial] `/` must be written
literally (#13905)
---
animation-triggers-1/Overview.bs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/animation-triggers-1/Overview.bs b/animation-triggers-1/Overview.bs
index 8506335c725..a0e5dbe1a76 100644
--- a/animation-triggers-1/Overview.bs
+++ b/animation-triggers-1/Overview.bs
@@ -391,7 +391,7 @@ urlPrefix: https://www.w3.org/TR/web-animations-1/; type: dfn
Name: timeline-trigger
- Value: none | [ <<'timeline-trigger-name'>> <<'timeline-trigger-source'>> <<'timeline-trigger-activation-range'>> [ '/' <<'timeline-trigger-active-range'>> ]? ]#
+ Value: none | [ <<'timeline-trigger-name'>> <<'timeline-trigger-source'>> <<'timeline-trigger-activation-range'>> [ / <<'timeline-trigger-active-range'>> ]? ]#
The 'timeline-trigger' [=shorthand property=]
From 75c4d3e4c68e58727066079638f2c8df36d13250 Mon Sep 17 00:00:00 2001
From: Daniil Sakhapov
Date: Thu, 21 May 2026 22:46:50 +0200
Subject: [PATCH 05/69] [css-pseudo] Extend CSSPseudoElement to all
standardized non-element-backed tree-abiding pseudo-elements (#13940)
* [css-pseudo] Extend CSSPseudoElement to all standardized non-element-backed tree-abiding pseudo-elements
* Reject non-tree-abiding pseudos
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
---
css-pseudo-4/Overview.bs | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/css-pseudo-4/Overview.bs b/css-pseudo-4/Overview.bs
index 996d4ced6af..331854a6d17 100644
--- a/css-pseudo-4/Overview.bs
+++ b/css-pseudo-4/Overview.bs
@@ -1810,7 +1810,9 @@ Additions to the CSS Object Model
The type attribute
is a string representing the type of the pseudo-element.
- This can be one of the following values:
+ This can be any standardized [=tree-abiding pseudo-element=]
+ that is not an [=element-backed pseudo-element=],
+ for example:
"::before"
@@ -1819,6 +1821,10 @@ Additions to the CSS Object Model
- Represents the ''::after'' pseudo-element.
"::marker"
- Represents the ''::marker'' pseudo-element.
+
"::backdrop"
+ - Represents the ''::backdrop'' pseudo-element.
+
"::view-transition"
+ - Represents the ''::view-transition'' pseudo-element.
The element attribute is the
@@ -1881,7 +1887,13 @@ Additions to the CSS Object Model
2. If |type| is failure,
return null.
- 3. Otherwise, return the {{CSSPseudoElement}} object
+ 3. If |type| is an [=element-backed pseudo-element=],
+ return null.
+
+ 4. If |type| is not a [=tree-abiding pseudo-element=],
+ return null.
+
+ 5. Otherwise, return the {{CSSPseudoElement}} object
representing the pseudo-element
that would match the selector |type|
with [=this=] as its [=originating element=].
From 9e3ee2007bc4f410f24469ed2278e23466d79190 Mon Sep 17 00:00:00 2001
From: Tab Atkins-Bittner
Date: Thu, 21 May 2026 15:59:04 -0700
Subject: [PATCH 06/69] [css-overflow-3] Rephrase the o-c-m:border-box on
scroll containers to not imply something special about the 'act as padding
box' thing.
---
css-overflow-3/Overview.bs | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/css-overflow-3/Overview.bs b/css-overflow-3/Overview.bs
index 5de3123cac5..1906c5fa799 100644
--- a/css-overflow-3/Overview.bs
+++ b/css-overflow-3/Overview.bs
@@ -622,8 +622,9 @@ Expanding Clipping Bounds: the 'overflow-clip-margin' property
* the [=overflow clip edge=] is clamped to stay within the element's [=padding box=].
(This does not affect the [=computed value|computed=] or [=used value=] of this property.)
* the ''overflow-clip-margin/border-box'' value
- behaves as ''overflow-clip-margin/padding-box''
- and ignores any specified offset.
+ ignores any specified offset
+ (and, due to the previous bullet point,
+ effectively acts as ''overflow-clip-margin/padding-box'')
Note: This property was previously defined to only affect ''overflow: clip''.
It now also affects [=scroll containers=],
From b1aba81aa41d86dd0b982050cb379302b977bf40 Mon Sep 17 00:00:00 2001
From: Kevin Babbitt
Date: Fri, 22 May 2026 16:59:13 -0700
Subject: [PATCH 07/69] [css-gaps-1][editorial] Add more links to WPTs
---
css-gaps-1/Overview.bs | 62 ++++++++++++++++++++++++++++++++----------
1 file changed, 48 insertions(+), 14 deletions(-)
diff --git a/css-gaps-1/Overview.bs b/css-gaps-1/Overview.bs
index 82c13511dfb..8647d46df5f 100644
--- a/css-gaps-1/Overview.bs
+++ b/css-gaps-1/Overview.bs
@@ -674,6 +674,7 @@ Gap decoration segments
flex/flex-gap-decorations-060.html
flex/flex-gap-decorations-061.html
flex/flex-gap-decorations-repaint-on-child-resize.html
+ flex/flex-gap-decorations-writing-mode.html
grid/grid-gap-decorations-001.html
grid/grid-gap-decorations-029.html
grid/grid-gap-decorations-030.html
@@ -695,6 +696,7 @@ Gap decoration segments
grid/grid-gap-decorations-repaint-on-child-resize.html
grid/grid-gap-decorations-repaint-on-item-position-change.html
grid/grid-gap-decorations-repaint-on-item-span-change.html
+ grid/grid-gap-decorations-writing-mode.html
grid/subgrid/subgrid-gap-decorations-001.html
grid/subgrid/subgrid-gap-decorations-002.html
grid/subgrid/subgrid-gap-decorations-003.html
@@ -718,7 +720,9 @@ Gap decoration segments
multicol/multicol-gap-decorations-016.html
multicol/multicol-gap-decorations-018.html
multicol/multicol-gap-decorations-024.html
+ multicol/multicol-gap-decorations-040.html
multicol/multicol-gap-decorations-repaint-on-content-resize.html
+ multicol/multicol-gap-decorations-writing-mode.html
From 33de10f1de526c572619abf7f16eea99d55ac5a5 Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 27 May 2026 16:09:26 -0400
Subject: [PATCH 12/69] [selectors-4][editorial] WPT
---
selectors-4/Overview.bs | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/selectors-4/Overview.bs b/selectors-4/Overview.bs
index 16519be8215..6d1d764b2a8 100644
--- a/selectors-4/Overview.bs
+++ b/selectors-4/Overview.bs
@@ -1679,12 +1679,14 @@ The Relational Pseudo-class: '':has()''
invalidation/defined-in-has.html
invalidation/dir-pseudo-class-in-has.html
invalidation/empty-pseudo-in-has.html
+ invalidation/empty-pseudo-in-has-display-none.html
invalidation/fullscreen-pseudo-class-in-has.html
invalidation/has-append-first-node.html
invalidation/has-complexity.html
invalidation/has-css-nesting-shared.html
invalidation/has-in-adjacent-position.html
invalidation/has-in-ancestor-position.html
+ invalidation/has-in-is-non-subject-compound.html
invalidation/has-in-parent-position.html
invalidation/has-in-sibling-position.html
invalidation/has-invalidation-after-removing-non-first-element.html
@@ -2956,6 +2958,7 @@ User Action Pseudo-classes
active-toplayer-001.html
+ active-after-relayouts.html
focus-within-toplayer-001.html
hover-toplayer-001.html
toplayer-transition-001.html
@@ -3230,6 +3233,7 @@ Media Playback State: the '':playing'', '':paused'', and '':seeking'' pseudo-cla
media/media-playback-state.html
media/media-loading-state.sub.html
+ media/media-playing-paused-style-invalidation.html
The :playing pseudo-class represents an element
@@ -3416,6 +3420,7 @@ The '':enabled'' and '':disabled'' Pseudo-classes
invalidation/enabled-disabled.html
+ invalidation/option-disabled-when-ancestor-changes.html
pseudo-enabled-disabled.html
@@ -3725,6 +3730,7 @@ Tree-Structural pseudo-classes
selectors-empty-001.xml
+ invalidation/empty-pseudo-in-has-display-none.html
The :empty pseudo-class represents
From d4cdbfe4913cbddd8ac603245651c19d0c2ccb3a Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 27 May 2026 16:19:02 -0400
Subject: [PATCH 13/69] [selectors-4][editorial] Removed At Risk: the column
combinator as it is now in Selectors 5.
---
selectors-4/Overview.bs | 1 -
1 file changed, 1 deletion(-)
diff --git a/selectors-4/Overview.bs b/selectors-4/Overview.bs
index 6d1d764b2a8..1c5b5d28ced 100644
--- a/selectors-4/Overview.bs
+++ b/selectors-4/Overview.bs
@@ -23,7 +23,6 @@ Former Editor: Peter Linss
Former Editor: John Williams
Abstract: Selectors are patterns that match against elements in a tree, and as such form one of several technologies that can be used to select nodes in a document. Selectors have been optimized for use with HTML and XML, and are designed to be usable in performance-critical code. They are a core component of CSS (Cascading Style Sheets), which uses Selectors to bind style properties to elements in the document.
Abstract: Selectors Level 4 describes the selectors that already exist in [[!SELECT]], and further introduces new selectors for CSS and other languages that may need them.
-At Risk: the column combinator
At Risk: [=user action pseudo-classes=] applying to non-[=tree-abiding pseudo-elements=]
Ignored Terms: function token, Document, DocumentFragment, math, h1, shadow tree, querySelector(), quirks mode, button, a, span, object, p, div, q, area, link, label, input, html, em, li, ol, pre, CSS Value Definition Syntax
Ignored Vars: identifier, i
From c41c832335f2580d656831d27a2d18394106c470 Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 27 May 2026 16:37:07 -0400
Subject: [PATCH 14/69] [selectors-4][editorial] Update changes since Jan 2026
WD
---
selectors-4/Overview.bs | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/selectors-4/Overview.bs b/selectors-4/Overview.bs
index 1c5b5d28ced..5326c40b937 100644
--- a/selectors-4/Overview.bs
+++ b/selectors-4/Overview.bs
@@ -5153,6 +5153,32 @@ while still preserving as much of the usefulness of '':visited'' as pos
Changes
+
+Changes since the 22 January 2026 Working Draft
+
+
+ Significant changes since the
+ 22 January 2026
+ Working Draft:
+
+ * Used infra terminology for ascii case insentivity
+ ( Issue13427)
+ * Responded to review feedback on BCP 47 language codes
+ (Issue 13647)
+ * Added example showing the difference between general case-insensitivity
+ and strict ASCII case insensitivity
+ (Issue 13645)
+ * Defined language range as BCP 47 extended language range
+ (Issue 13646)
+ * Changed introductory :lang example from (zh, "*-hant") to (sr, "*-Cyrl")
+ (Issue 13644)
+ * Moved the column combinator to Selectors 5
+ * Clarified that language codes must be well-formed to match
+ (Issue 8720)
+ * Reworded constraints on language ranges
+ (Issue 8720)
+
+
Changes since the 11 November 2022 Working Draft
From a346e6dc30f9cbd053515eac2944337921728c2a Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 27 May 2026 16:45:40 -0400
Subject: [PATCH 15/69] typo
---
selectors-4/Overview.bs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/selectors-4/Overview.bs b/selectors-4/Overview.bs
index 5326c40b937..b7ebb62786a 100644
--- a/selectors-4/Overview.bs
+++ b/selectors-4/Overview.bs
@@ -5185,7 +5185,7 @@ Changes since the 11 November 2022 Working Draft
Significant changes since the 11 November 2022 Working Draft:
* Defined language range as BCP 47 extended language range
- (Issue 13646>)
+ (Issue 13646)
* Removed the at-risk status from '':read-write'' and '':has()''
* Added '':popover-open'' pseudo-class.
(Issue 8637)
From 4f2b1f13312d48dc362e4c37f3ce29cb7183c093 Mon Sep 17 00:00:00 2001
From: Chris Lilley
Date: Wed, 27 May 2026 16:47:41 -0400
Subject: [PATCH 16/69] spelling
---
selectors-4/Overview.bs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/selectors-4/Overview.bs b/selectors-4/Overview.bs
index b7ebb62786a..3c66770acee 100644
--- a/selectors-4/Overview.bs
+++ b/selectors-4/Overview.bs
@@ -5161,7 +5161,7 @@ Changes since the 22 January 2026 Working Draft
22 January 2026
Working Draft:
- * Used infra terminology for ascii case insentivity
+ * Used infra terminology for ascii case insensitivity
( Issue13427)
* Responded to review feedback on BCP 47 language codes
(Issue 13647)
From bb56a2074f3c36661fe82c15e0afb0453ccef86c Mon Sep 17 00:00:00 2001
From: Koji Ishii
Date: Thu, 28 May 2026 17:23:41 +0900
Subject: [PATCH 17/69] [css-sizing-4] Update responsive-iframes-explainer.md
(#13961)
Replaced `X-Frame-Options` with `Content-Security-Policy` for the [feedback].
Also updated the CSS property to the resolved one.
[feedback]: https://groups.google.com/a/chromium.org/g/blink-dev/c/zBx_uoW7jRQ/m/Ilm304IyBQAJ
---
css-sizing-4/responsive-iframes-explainer.md | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/css-sizing-4/responsive-iframes-explainer.md b/css-sizing-4/responsive-iframes-explainer.md
index a1c0912328f..464487f10cb 100644
--- a/css-sizing-4/responsive-iframes-explainer.md
+++ b/css-sizing-4/responsive-iframes-explainer.md
@@ -29,9 +29,9 @@ In general, there is a lot of demand for this feature, as evidenced by:
## Solution
-The embedding document opts in via the `contain-intrinsic-size: from-element` CSS property on the `