- From: Joe Pea via GitHub <sysbot+gh@w3.org>
- Date: Sun, 14 Jul 2024 03:15:00 +0000
- To: public-css-archive@w3.org
This can be implemented in CSS today using cyclic space toggles. ```css .foo { --size: var(--small); --theme: var(--dark); --placement: var(--top); --orientation: var(--vertical); --significance: var(--warning); } ``` Although it isn't the most convenient, here's how something like `--size` can be implemented as a library author: ```css /** * ## CSS library author code: ################################ */ button { /* define the name of the configurable option for the end user */ --size: var(--size-medium); /* define all the possible enum values for the option */ --size-small: var(--size,); --size-medium: var(--size,); --size-large: var(--size,); /* finally apply output values using a switch case inside of each output property */ border: solid blue var(--size-small, 1px) var(--size-medium, 2px) var(--size-large, 3px); border-radius: var(--size-small, 2px) var(--size-medium, 4px) var(--size-large, 6px); padding: var(--size-small, 2px) var(--size-medium, 4px) var(--size-large, 6px); } ``` Here how an end user would use it: ```html <button id="one">button</button> <button id="two">button</button> <button id="three">button</button> ``` ```css /** * ## End user code: ########################################## */ #one { /* end user picks the enum value they want */ --size: var(--size-small); } #two { --size: var(--size-medium); } #three { --size: var(--size-large); } ``` where, depending on the picked `--size`, the component library will set a bunch of properties such as `border-width`, `padding`, `margin`, `height`, to various different values depending on the single value of `--size`, where `--size` is not just a length value. [codepen example](https://codepen.io/trusktr/pen/NWZqEyy) Roman Komarov has some articles on it here: https://kizu.dev/layered-toggles/ TLDR: yeah, maybe not entirely intuitive. But! Once the pattern is learned, it is easy to implement in libraries, and most importantly super easy for the end user to use. -- GitHub Notification of comment by trusktr Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/5624#issuecomment-2227179842 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Sunday, 14 July 2024 03:15:01 UTC