- From: Brandon McConnell via GitHub <sysbot+gh@w3.org>
- Date: Fri, 17 May 2024 16:43:21 +0000
- To: public-css-archive@w3.org
@LeaVerou I would also prefer not to introduce an extra @-rule like `@group` here. I merely included that as I've seen that art floating around that included it.
My main focus was the dot syntax, though I understand your feedback and concern there too.
## Sub-groups/properties
For this example…
```css
--test-* {
a: {
b: {
base: 'abc';
extra: 'def';
}
};
a-b: 'xyz';
}
```
Without an alternative getter/setter syntax like the dot syntax…
1. Would `a:{b:{...}}` and `a-b:value` both target the same sub-property value?
1. If they do target the same property, would setting `a-b` under `--test` after setting up `a:b` as a group overwrite the its group value (naming collision) or would it set the `base` value for in that specified group?
1. Would sub-groups need to use the same `-*` group syntax?
```css
--test-* {
a-*: {
b-*: {
base: 'abc';
extra: 'def';
}
};
a-b: 'xyz';
}
```
1. If so, without using this `-*` syntax for sub-groups, would the object under `a` (`a:b`, not `a-*:b-*`) be seen as a plain string, as is currently standard practice in CSS?
1. Would this change the behavior how setting `a-b` overwrites the value of `a-*:b-*`?
1. Would setting the plain `a-b` sub-property value before setting up the `a-*:b-*` group still preserve that value as the `base` value, or would it be completely overridden when the new group is instantiated, if they would otherwise point to the same value?
```css
--test-* {
a-b: 'xyz';
a-*: {
b-*: {
base: 'abc';
extra: 'def';
}
};
}
```
## Getter / setter syntax
1. If the dot syntax is not needed for a getter syntax and names can simply be referenced using `-` as the sole delimiter, without risking any naming collisions, would we even need the `get()` function others have proposed, as that appears to serve the same purpose?
1. How would one go about setting a specific sub-property, without affecting others? Would setting `--test-a-b: 'xyz';` explicitly effectively perform that?
```css
--test-* {
a-*: {
b-*: {
base: 'abc';
extra: 'def';
}
};
}
```
1. Are there any plans as of now to introduced a way to be able to pass groups or sub-groups to other custom-properties? Something like one of these:
* `--custom-*: --test-a-b-*;`
* `--custom-*: var(--test-a-b-*);`
* `--custom-*: group(--test-a-b-*);`
* `--custom-*: --test-a-b;`
* `--custom-*: var(--test-a-b);`
* `--custom-*: group(--test-a-b);`
## `base`/`default` sub-property
To allow developers to name sub-properties whatever standard idents they wish, could we consider a pseudo-element for the `base` keyword, rather than making that a reserved word? Perhaps `:base` or `:default` to mirror the `DEFAULT` keyword used by Tailwind CSS, similar to how use `:root` and `:host`?
Several others have voiced a similar concern—@kizu @adamwathan @Crissov @olets @tabatkins—which I think using a pseudo here might account for, though `:default: …` isn't exactly common syntax either, as we have pseudo-classes and pseudo-elements, but not necessarily pseudo-properties, at least yet.
Tab Atkins' idea of always requiring custom sub-properties to start with `--` would negate this risk entirely, so only named properties could be used in groups, and `default` could be one of those named properties:
```css
--test-* {
--a-*: {
--b-*: {
base: 'abc';
--extra: 'def';
}
};
}
```
--
GitHub Notification of comment by brandonmcconnell
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/9992#issuecomment-2117985684 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Friday, 17 May 2024 16:43:22 UTC