- From: Bramus! via GitHub <sysbot+gh@w3.org>
- Date: Tue, 05 Jan 2021 14:03:52 +0000
- To: public-css-archive@w3.org
I've been giving this issue quite some thought the past few days, and think I've come to propose an alternative syntax. It's basically a reuse of the attribute selector, but then with a custom property.
To get a bit ahead of my self, here's the pill example from the OP with this proposed syntax:
```css
[@var(--pill)="on"] {
border-radius: 999px;
}
```
## Motivation
The motivation behind this alternative syntax is two-fold:
- CSS is declarative. The `@if` is imperative and feels off in that way.
- HLCPs are compared to HTML attributes
## Examples
_(Note: Using nesting here to keep things tidy)_
### Pill button
- If `pill="on"` were an HTML attribute:
```css
button, input[type="submit"] {
background-color: hotpink;
color: white;
border: 0;
&[pill="on"] {
border-radius: 999px;
}
}
```
- Using `--pill="on"`
```css
button, input[type="submit"] {
background-color: hotpink;
color: white;
border: 0;
&[@var(--pill)="on"] {
border-radius: 999px;
}
}
```
### Squares
```css
.square {
--width: 4em;
width: var(--width);
aspect-ratio: 1/1;
&[@var(--size)="small"] {
--width: 2em;
}
&[@var(--size)="big"] {
--width: 8em;
}
}
```
## Benefits
- Devs already know this syntax (both `@var()` and attribute selectors), so there's nothing new to learn
- Circumvents the issue of partial application, as only [the syntax of the attribute selectors](https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors#Syntax) is allowed
- _(Outside of scope) Perhaps a future addition would allow `>` and `<`, but limited to numbers only?_
- Plays nice with nesting
- No nitpicking by "Real Developers™️" that it should be `==` (comparison) instead of `=` (assignment)
## Downsides
- Might be confusing, as we've all learnt that `[]` is the attribute selector
- Although: the `@var` part should give a clue there
- …?
--
I don't know if this even possible _(i.e. would this all require an extra run of the parser?)_, as I don't know how CSS parsers work. Feel free to point out how flawed this is in case is shouldn't be possible ;)
--
GitHub Notification of comment by bramus
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/5624#issuecomment-754655107 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Tuesday, 5 January 2021 14:03:59 UTC