- From: Amelia Bellamy-Royds via GitHub <sysbot+gh@w3.org>
- Date: Sun, 11 Feb 2018 19:12:08 +0000
- To: public-css-archive@w3.org
For selectors, the proposal is actually much simpler than @tabatkins's [CSS Extensions custom selector proposal](https://tabatkins.github.io/specs/css-aliases/#custom-selectors), since it would only be a shorthand for existing selectors, instead of allowing script-based tests.
For properties, @Nadya678's proposal does look a lot like `@apply`, and I'd suggest looking at the discussion in #1047 & elsewhere for syntax that has already been considered & the problems that were encountered.
________________________________
So, focusing only on the selector side:
Selectors 4 already has the [`:matches(selector-list)` selector](https://drafts.csswg.org/selectors-4/#matches), which allows a list of alternative selectors to be treated as one. With CSS preprocessors, you may be able to use a preprocessor variable to avoid repeating the selector-list many times, but it would definitely be nice if CSS had a native way to avoid that repetition.
A rough proposal for how to do so without changing CSS parsing rules too much:
- A new at-rule, `@selector-set` that allows you to define a name for the selector set and the list of selectors it is equivalent to.
- A single new pseudoclass `:matches-set()`, which is like `:matches()`, but it takes the name of a previously defined selector set as its parameter.
```css
/* selector definitions */
@selector-set text-ish {
input:not([type]),
input[type='text],
input[type='number'],
/* ... */
}
@selector-set text-plus {
:matches-set(text-ish), /* extend one set by including it in the list for another */
input[type='color'],
select,
textarea
}
/* later ... */
:matches-set(text-plus) {
border: solid #aaa;
padding: 0.5rem;
}
```
Of course, any restrictions on selectors inside `matches()` would also extend to `matches-set()` and therefore to the selector set. As [currently defined](https://drafts.csswg.org/selectors-4/#matches), that means that both [compound and complex](https://drafts.csswg.org/selectors-4/#structure) selectors are allowed, but pseudo-elements are not.
--
GitHub Notification of comment by AmeliaBR
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2298#issuecomment-364778609 using your GitHub account
Received on Sunday, 11 February 2018 19:12:15 UTC