- From: Murat Çorlu via GitHub <sysbot+gh@w3.org>
- Date: Thu, 12 May 2022 10:53:07 +0000
- To: public-css-archive@w3.org
muratcorlu has just created a new issue for https://github.com/w3c/csswg-drafts: == map-get function proposal for customising web component styles == I want to start a discussion about having a `map-get` function in CSS like in [older versions of SASS](https://css-tricks.com/snippets/sass/easing-map-get-function/). ## Need: When we use HTML Custom Elements (a.k.a Web Components), Shadow DOM is a powerful opportunity to isolate components style, and using CSS Custom Properties (a.k.a. CSS Variables) for customizing components styles is a very convenient approach. But in some scenarios, we are very limited in providing some good limited options to our component consumers as a component developer. For example; I want to provide a `button` component that can be in a limited set of sizes regarding our design system. So we have variants like `large`, `regular` or `small`. Currently, many people use component attributes like `<my-button small>` but this is not an ideal way when you think about a responsive design. Instead, I would prefer to be able to say: ```css my-button { --size: small; } ``` To be able to have that kind of clean solution we need to have a solution to map this `small` naming to a different type of units inside component styles. ## Proposal As in old `map-get` function of SASS, having an opportunity to set a value by picking from a map would be great like: ```css /* Inside our component style */ button { padding: map-get((small: 4px 8px, regular: 8px 16px, large: 12px 24px), var(--size, regular)); } ``` Means: regarding to value of `--size` variable (`regular` by default) set padding to `4px 8px` if value is `small`. So a consumer can not set the padding of my button component other than the options that I set here. Also a consumer can customize this property with a responsive design approach: ```css my-button { --size: regular; } @media screen and (max-width: 900px) { my-button { --size: large; } } ``` This can be also used as conditional values for non size units: ```css /* Inside our component style */ button { background-color: map-get((primary: #336699, secondary: #006600), var(--variant, primary)); } ``` Means: regarding to value of `--variant` variable (`primary` by default) set background-color to `#006600` if value is `secondary`. I hope I could express the motivation very well. Any ideas and questions to clarify details are very welcome. Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/7273 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 12 May 2022 10:53:08 UTC