feat(proposal): use where selector to manage class specificity #44
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.
Bug description
I noticed that buttons with utility color classes turn blue on
:hover
.If the example below is the expected behavior of these buttons, I believe this is a specificity bug:
Using the
.default
variant as an example, this is the CSS with the intended behavior:It produces a 0,3,1 specificity and it is being overridden by this selector, which also has a specificity of 0.3.1 because its declared further on the code.
Proposal - Using an :where selector as an architectural axiom
Note
This solution is agnostic and non-obstrusive and have sufficient browser support but it will require a more comprehensive change and may potentially lead to a major version increment.
Every CSS subdirectory acts as a module that serves both base styles and utility-oriented styles. For base styles related directly to HTML elements, you may want to maintain the lowest specificity possible to avoid collision with utility styles.
I suggest Elad Shechter approach on CSS Reset. This ensures that every "base" styles will be safely overridden.
Pros
For better composability and overriding of classes, I tried to maintain specificity levels at 0,0,1 for base styles and 0,1,x for states and pseudo to reduce the chances of overriding base styles by resets or subsequent modules.
Cons
This solution results in more complex selectors, and consequently slower, which within the scope of this library would not affect most users. However, it would complicate debugging and maintenance.
Closes #42