- From: Roman Komarov via GitHub <sysbot+gh@w3.org>
- Date: Sat, 01 Mar 2025 10:30:03 +0000
- To: public-css-archive@w3.org
Some thoughts about the `contain` option. 1\. `@scope` allows having donut scoping, which can be very useful: we can have an _outer_ scope return when the inner scope ends. ```CSS @scope namespace (.foo) { @function --bg() { result: lightgreen } } @scope namespace (.bar) to (.bar-end) { @function --bg() { result: pink } } .test { background: --bg(); } ``` ```HTML <div class="foo"> <div class="test">I am lightgreen</div> <div class="bar"> <div class="test">I am pink</div> <div class="bar-end"> <div class="test">I am lightgreen again</div> </div> </div> </div> ``` Would it be possible to do this with `contain`, and if so, will it be as expressive? 2\. With `contain` it could be easier to “break” the containment by overriding something with a different value of `contain`. To me, it feels weaker than an at-rule. The effect of the scoping is strong: all the ident names will be contained, and it feels better to control this effect on an at-rule level. 3\. My initial idea for this was to not even use `contain`, but allow all the name-defining at-rules to be present on elements. I imagine this can be a pretty significant change, where at-rules will have to live inside a rule alongside declarations. There are benefits from this and could open some more doors, but this also makes things maybe _too_ flexible? And then, it might be confusing to understand how the at-rules inside selectors work without `contain`: do they work by the current rules — only taking the order and layers into consideration? If so, it could be an easy mistake to make where you forget the `contain` and think that an at-rule inside your rule is scoped. 4\. Semantically, I prefer `@scope` to `contain`, after all, we already call this mechanism _scoping_. But even if I prefer `@scope`, it is nice to have an alternative option to consider, as this allows us to weight both of them, and think deeper about the use cases. Now we have two options: 1. `@scope namespace` — additional `@scope` keyword, name TBD. 2. `contain: names` — additional `contain` value. I wonder if there are more options we don't yet see. -- GitHub Notification of comment by kizu Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/11798#issuecomment-2692128931 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Saturday, 1 March 2025 10:30:04 UTC