Re: [csswg-drafts] [css-cascade] Atomic CSS (#11142)

> I’d like to get some implementer feedback on the feasibility of doing this [tracking applied decls] in current engines.

Generally, this sounds hard and expensive. However:

If instead of "applied", we track which atomic declarations _lose the cascade_, then it might be feasible. During cascading, we could make a note whenever an atomic declaration got overwritten by something, and use this in the apply step to filter out other declarations from the same `@atomic` rule.

Note that a `revert-layer` (and `revert`) declaration would need to count as overwriting a declaration. Example: the declarations within `@atomic` are not applied in this case, because `--x: 1` was overwritten by something:

```
@layer {
  @atomic {
    --x: 1;
    --y: 1;
  }
}

@layer {
  --x: revert-layer;
}
```
This is because `revert-layer` (and `revert`) are computed-value time effects, despite what it sounds like in current specs. This follows from the requirement that `var(--unknown, revert-layer)` behaves as `revert-layer`, which can't be known until substitution (AKA computed-value time).

> My main worry is circularities: I can't yet see any, but I have an annoying niggling feeling that they may exist.

I _think_ with the above behavior, the worst that can happen is all rules in the "cycle" end up not applying. Example from @sesse (which would be circular, if we spec `@atomic` hazardously):

```
@atomic {
    div {
        color: red !important;
        background-color: white; /* loses */
    }
}
@atomic {
    div {
        color: white; /* loses */
        background-color: black !important;
    }
}
```
Since both `@atomic` rules have losses, neither are applied.


-- 
GitHub Notification of comment by andruud
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/11142#issuecomment-2457174881 using your GitHub account


-- 
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config

Received on Tuesday, 5 November 2024 13:23:14 UTC