- From: Xiaocheng Hu via GitHub <sysbot+gh@w3.org>
- Date: Mon, 19 Jul 2021 19:02:52 +0000
- To: public-css-archive@w3.org
xiaochengh has just created a new issue for https://github.com/w3c/csswg-drafts:
== [css-cascade-5] Any needs to avoid other layers overriding name-defining @-rules? ==
The current spec already allows a layer to make a declaration `!important`, so that other layers cannot override it. For example:
```
@layer base {
@keyframes foo { ... }
#target {animation-name: foo !important; }
}
@layer override {
@keyframes bar { ... }
#target {animation-name: bar;}
}
/* #target ends up animated with foo */
```
However, override layers can still override the animation by overriding the at-rules (as discussed in #6404):
```
@layer base {
@keyframes foo { ... }
#target {animation-name: foo !important; }
}
@layer override {
@keyframes foo { ... }
}
/* #target ends up animated with overridden animation */
```
In this way, even though the base layer doesn't want to be overridden, the override layer still has a way to get around it. This is probably against the intention of the author of the base layer, and against why we have the `!important` keyword.
---
I'd like to discuss:
1. Do we want to introduce a mechanism so that override layers cannot override at-rules defined by base layers?
2. If yes, how?
- Allow `!important` keyword on at-rules?
- Introduce something like "layer-scoped name/reference" (similar to [tree-scoped name/reference](https://drafts.csswg.org/css-scoping/#shadow-names)), so that declarations in the base layer cannot reference at-rules defined by the override layer?
- Other thoughts?
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/6461 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Monday, 19 July 2021 19:02:54 UTC