On Tue, May 13, 2025 at 9:20 AM Rune Lillesveen <futh...@chromium.org> wrote:
> On Tue, May 13, 2025 at 8:34 AM Rune Lillesveen <futh...@chromium.org> > wrote: > >> On Tue, May 13, 2025 at 7:43 AM Domenic Denicola <dome...@chromium.org> >> wrote: >> >>> I'm very slightly worried about the cases which we seem to accept, but >>> the latest on the CSSWG thread suggests we should disallow. Namely, >>> @container and @page. How sure are you that changing those to be invalid in >>> the future, to follow the latest CSSWG decisions, will not cause compat >>> problems? >>> >> >> For @page, I wouldn't be worried at all. It's unlikely someone will start >> using the feature and rely on a constant sibling-index()/sibling-count() in >> @page. >> >> For @container, I agree that it's safer to be conservative and wait for >> the resolution, since for @container there are clear use cases and and a >> more or less obvious behavior in that context. >> > > Some more details below. > > For @container, this is relevant for size queries and style() queries. > > Size queries are currently always evaluated in an element context, > although falling back to viewport has been discussed, and container units > fall back to small viewport units. Relative units (like ems below) are > evaluated against the computed values of the container element: > > @container (width > calc(sibling-index() * 50px)) {} > @container (width > 10em)) {} > > > For style queries, the right hand of the query is evaluated against the > container element and its computed styles for registered custom properties. > Note that for non-registered custom properties, sibling-index() would just > be part of the string/tokens without any specific meaning. > > I think it would be inconsistent to reference relative units (like em > below) and resolve custom properties references (like var(--a) below), but > specifically throw away sibling-index() when evaluating the value against > the registered syntax: > > @container style(--registered-length: calc(sibling-index() * 20px)) {} > @container style(--registered-length: 10em) {} > @container style(--registered-length: var(--a)) {} > I'll make my position clearer. I think we should ship with support for tree counting functions in @container because 1. @container queries are currently always in a (container) element context and there are valid use cases 2. Supporting tree counting functions in @container does not break with the current spec 3. I don't think it's likely there will be a resolution that disallows tree counting functions in @container 4. In particular, disallowing tree counting functions in style() queries would be inconsistent with e.g. relative units On Tuesday, May 13, 2025 at 6:37:14 AM UTC+9 Mike Taylor wrote: >>> >>>> LGTM1 >>>> On 5/9/25 9:47 AM, Rune Lillesveen wrote: >>>> >>>> Contact emails futh...@chromium.org, se...@chromium.org >>>> >>>> Explainer >>>> https://github.com/w3c/csswg-drafts/blob/main/css-values-5/tree-counting-explainer.md >>>> >>>> Specification https://drafts.csswg.org/css-values-5/#tree-counting >>>> >>>> Design docs >>>> >>>> https://github.com/w3c/csswg-drafts/blob/main/css-values-5/tree-counting-explainer.md >>>> >>>> Summary >>>> >>>> sibling-index() and sibling-count() can be used as integers in CSS >>>> property values to style elements based on their position among its >>>> siblings, or the total number of siblings respectively. These functions can >>>> be used directly as integer values, but more interestingly inside calc() >>>> expressions. Example: li { margin-left: calc(10px * sibling-index()); } >>>> >>>> >>>> Blink component Blink>CSS >>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ECSS%22> >>>> >>>> TAG review https://github.com/w3ctag/design-reviews/issues/1068 >>>> >>>> TAG review status Issues addressed >>>> >>>> Risks >>>> >>>> >>>> Interoperability and Compatibility >>>> >>>> None >>>> >>>> >>>> *Gecko*: No signal ( >>>> https://github.com/mozilla/standards-positions/issues/1194) >>>> >>>> *WebKit*: No signal ( >>>> https://github.com/WebKit/standards-positions/issues/471) >>>> >>>> *Web developers*: Positive >>>> >>>> https://css-tricks.com/how-to-wait-for-the-sibling-count-and-sibling-index-functions/ >>>> https://chriscoyier.net/2023/11/29/element-indexes/ >>>> https://kizu.dev/tree-counting-and-random/ >>>> >>>> *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? >>>> >>>> None >>>> >>>> >>>> Debuggability >>>> >>>> Basic support out-of-the box. With the value debugger ( >>>> crbug.com/396080529) shipped, evaluating >>>> sibling-index()/sibling-count() into a <number> should work out-of-the-box. >>>> >>>> >>>> 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-values/tree-counting >>>> >>>> >>>> Flag name on about://flags #enable-experimental-web-platform-features >>>> >>>> Finch feature name CSSSiblingFunctions >>>> >>>> Rollout plan Will ship enabled for all users >>>> >>>> Requires code in //chrome? False >>>> >>>> Tracking bug https://crbug.com/40282719 >>>> >>>> Sample links >>>> https://codepen.io/argyleink/pen/KwKXPYW >>>> >>>> Estimated milestones >>>> Shipping on desktop 138 >>>> DevTrial on desktop 133 >>>> Shipping on Android 138 >>>> DevTrial on Android 133 >>>> Shipping on WebView 138 >>>> >>>> Anticipated spec changes >>>> >>>> >>>> There is an open issue[1] about what tree counting functions mean >>>> outside of element contexts. The plan is to handles tree counting functions >>>> like this for the relevant @-rules when shipping: >>>> >>>> >>>> - @font-face: invalid at parse time >>>> >>>> - @font-palette-values: invalid at parse time >>>> >>>> - @property: accepted at parse time (the values are strings), but since >>>> these values are not computationally independent when evaluated, they will >>>> be dropped as initial values. >>>> >>>> - @counter-style: invalid at parse time >>>> >>>> - @container: the container is in an element context and tree counting >>>> functions are evaluated as such >>>> >>>> - @page: accepted at parse time and evaluated against the root element >>>> >>>> - @media (in query value): invalid at parse time >>>> >>>> >>>> Shipping a different specified behavior for tree counting functions in >>>> these contexts (to what the issue is resolved to later) should be >>>> straightforward. >>>> >>>> >>>> [1] https://github.com/w3c/csswg-drafts/issues/10982 >>>> >>>> Link to entry on the Chrome Platform Status >>>> https://chromestatus.com/feature/6225478530367488?gate=6089164107546624 >>>> >>>> Links to previous Intent discussions Intent to Prototype: >>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/67c70d35.2b0a0220.36af1.0007.GAE%40google.com >>>> >>>> This intent message was generated by Chrome Platform Status >>>> <https://chromestatus.com/>. >>>> -- >>>> Rune Lillesveen >>>> >>>> -- >>>> 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 blink-dev+unsubscr...@chromium.org. >>>> To view this discussion visit >>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACuPfeTS2BYBs8yqpNXnJa5tAMwPar4X3jOPtLddMydRX0oEoA%40mail.gmail.com >>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACuPfeTS2BYBs8yqpNXnJa5tAMwPar4X3jOPtLddMydRX0oEoA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>>> >> >> -- >> Rune Lillesveen >> >> > > -- > Rune Lillesveen > > -- Rune Lillesveen -- 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 blink-dev+unsubscr...@chromium.org. To view this discussion visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CACuPfeSQRzkBLaKZA_XeiabkJKqcDQnaHUaBF6baAW0XcTuXfw%40mail.gmail.com.