-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement CSS Cascade Layers support #51
Merged
theKashey
merged 12 commits into
theKashey:master
from
AlexandrHoroshih:css-cascade-layers
Sep 16, 2023
Merged
Implement CSS Cascade Layers support #51
theKashey
merged 12 commits into
theKashey:master
from
AlexandrHoroshih:css-cascade-layers
Sep 16, 2023
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Hello @theKashey ! Could you take a look? 🙏 |
theKashey
approved these changes
Sep 16, 2023
What I could say @AlexandrHoroshih - it's AMAZING! |
Released as |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #50
What is implemented
@layer
rules got special processing, similiar to@media
rulesLayer order definitions (
@layer a, b, c;
) are treated similiar to other "unprocessed" at-rules and are included at the top and as-is.Actual layered styles (
@layer a { ... }
) are treated the same way@media
is handled now - only actually used styles are included into critical css.AST types are refactored to make a clear distinction between processed at-rules and unprocessed at-rules
During implementation it became obvious, that at-rules are splitted into two groups:
@media
and@layer
, that are properly handledAST types and related code was updated to reflect that:
atRules
at theSingleStyleAst
type becameunknownAtRules
media: string[]
at theStyleSelector
is changed intoatrules: { kind: "layer" | "media", value: string }[]
, this way it is possible to add more nestable at-rules like@supports
What is not implemented
There is a possible edge-case:
It is possible to have the same layers order definition at multiple files, something like this
I think, it is possible in the situation, where layers are added automatically by bundlers, based on some heuristics or rules, since this way layers order is guaranteed and is not dependent on loading order 🤔
In that case
used-styles
probably should deduplicate these definitions.But since i do not have any actual real-life use-cases, which would require something like this, it is not added in this PR
If this problem will actually happend one day - then cross-file deduplication of layer definitions can be solved by introducing something like "shared context" for the AST parser: