Skip to content

[css-cascade] revert-layer keyword in style attribute #6743

Closed

Description

@xiaochengh

What should we do when revert-layer is used in the style attribute?

For example, <div style="color: red; color: revert-layer">. I can think of two options:

  1. Treat style attribute as if in its own layer (though importance is handled differently), so we revert color to the highest author layer
  2. Style attribute is not in any layer, so color: revert-layer is an invalid declaration, and color: red wins the cascade

I prefer option 1 because it is simpler to implement (no parse-time special-casing). And other than an obscure way to cancel other declarations in the style attribute, I'm not sure if there is any real use case of putting revert-layer in the style attribute, so I prefer keeping things simple.

@mirisuzanne

Activity

  1. xiaochengh commented on Oct 18, 2021

    @xiaochengh
    ContributorAuthor

    Btw, the resolution should be consistent with VTT STYLE blocks since it has a similar role and the same cascade precedence as the style attribute.

    This gives a stronger reason to choose option 1, since banning revert-layer from the VTT STYLE block makes things even more complicated.

  2. mirisuzanne commented on Oct 18, 2021

    @mirisuzanne
    Contributor

    I'm happy with that approach. Agenda+ for discussion/resolution.

  3. tabatkins commented on Oct 21, 2021

    @tabatkins
    Member

    Elika and I agree that since style attributes are now in their own origin, they (implicitly) sit in their own unlayered layer, unrelated to any author-level layers. (And with no way to declare any additional layers.) So yeah, it would just roll back to the previous origin, the author layer, which is the suggested Option 1 behavior.

  4. css-meeting-bot commented on Nov 3, 2021

    @css-meeting-bot
    Member

    The CSS Working Group just discussed [css-cascade] revert-layer keyword in style attribute, and agreed to the following:

    • RESOLVED: it would revert the style attribute and nothing else
    The full IRC log of that discussion <dael_> Topic: [css-cascade] revert-layer keyword in style attribute
    <dael_> github: https://github.com//issues/6743
    <dael_> miriam: Similar. Question is what does it do in context where layer is not clear. In this case in style attribute. What happens?
    <dael_> fantasai: Had recently switched style attribute to be its own origin. Natural fallout is it would revert the style attribute and nothing else.
    <dael_> Rossen_: Soudns reasonable
    <dael_> chrishtr: Is that option 1?
    <dael_> TabAtkins: Yes
    <dael_> Rossen_: Other ideas or objections?
    <dael_> RESOLVED: it would revert the style attribute and nothing else
    <TabAtkins> basically same as doing 'revert-layer' in unlayered author styles
  5. fantasai commented on Nov 4, 2021

    @fantasai
    Collaborator

    I think technically all that's needed here is a note, but we should have a note.

  6. added 3 commits that reference this issue on Nov 9, 2021
  7. added a commit that references this issue on Nov 11, 2021
  8. mirisuzanne commented on Nov 12, 2021

    @mirisuzanne
    Contributor

    I don't think we technically made element-attached styles into an origin, though maybe the implications are similar (or we should move them into an origin). Currently they have their own stage of the cascade: https://drafts.csswg.org/css-cascade-5/#style-attr

    Maybe a note is still enough? Something similar to the note regarding origins?

  9. 11 remaining items

  10. fantasai commented on Nov 22, 2021

    @fantasai
    Collaborator

    Yes. Thinking about this more, I'm not sure what's more intuitive as a model, but certainly if you have written some styles into a layer and are expecting your !important rules to override your normal rules, but we remove only the !important rules, things are likely to break. So I think we have to go with @xiaochengh's model.

  11. css-meeting-bot commented on Dec 2, 2021

    @css-meeting-bot
    Member

    The CSS Working Group just discussed revert-layer keyword in style attr, and agreed to the following:

    • RESOLVED: Accept suggested behavior, where `revert-layer !important` in style attr only reverts the style-attr origins and the animations origin, ignoring other author origins
    The full IRC log of that discussion <TabAtkins> Topic: revert-layer keyword in style attr
    <TabAtkins> github: https://github.com//issues/6743#issuecomment-971826541
    <TabAtkins> miriam: we talked about this a few weeks ago, and resolved that the revert-layer keyword in a style attr should only revert the style attr.
    <TabAtkins> miriam: but that becomes complex and unclear when thinking about how style relates to normal and important layers
    <TabAtkins> miriam: we've drawn some diagrams in the thread about different ways this could work
    <TabAtkins> miriam: main question is: if you use `revert-layer !important` in a style attr, is that still only revert the style attr, and maybe the animations layer, but no author layers? Or is it also reverting important author layers, taking you down to normal author layers?
    <Rossen_> q?
    <TabAtkins> miriam: I think we meant the former, but there's some confusion there.
    <Rossen_> ack BoCupp
    <Zakim> BoCupp, you wanted to say in Florian's example state of the range is changed, and if a range intersects a contained element and its state changes its allowed to invalidate its
    <Zakim> ... painting
    <TabAtkins> miriam: proposal is that setting `revert-layer !important` in the style attr, it reverts the style-attr layer, the animations layer, and nothing else
    <TabAtkins> fantasai: looking at the ascii diagram from Xiaocheng, most revert behaviors cut from the important to the normal origin, and remove everything between those two points
    <TabAtkins> fantasai: but because style attr is weird, on top of both normal and important, if we similarly cut thru like that, it'll remove important styles from layers but not the normal styles from those layers
    <TabAtkins> fantasai: so i think because it's likely to break expectations of someone writing a layer to remove the important part but not the normal part, i think it's better to do this skipping behavior
    <TabAtkins> fantasai: a little concerned about how this plays out in impls, but since Xiaocheng wants it, i think we should go with it
    <fantasai> TabAtkins: Looked it over before the meeting, and with you all and Xiaocheng agreeing, I'm happy to go with this
    <TabAtkins> Rossen_: objections?
    <TabAtkins> RESOLVED: Accept suggested behavior, where `revert-layer !important` in style attr only reverts the style-attr origins and the animations origin, ignoring other author origins
  12. added 3 commits that reference this issue on Dec 2, 2021
  13. added a commit that references this issue on Dec 2, 2021
  14. tabatkins commented on Dec 3, 2021

    @tabatkins
    Member

    The spec already reflected this resolution, so closing. ^_^

  15. added a commit that references this issue on Dec 20, 2021
  16. added 2 commits that reference this issue on Sep 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions