- From: fergald via GitHub <sysbot+gh@w3.org>
- Date: Wed, 11 Jul 2018 05:17:52 +0000
- To: public-css-archive@w3.org
fergald has just created a new issue for https://github.com/w3c/csswg-drafts: == [css-shadow-parts] consider moving part-mapping to style rules == This came up in a meeting with Salesforce. It seems reasonable to consider this option. The current [spec](file:///home/fergal/sshfs/github/w3c/csswg-drafts/css-shadow-parts-1/Overview.html#partmap-attr) provides the partmap attribute to allow a part inside a sub-component to be stylable from outside the containing component. This means that forwarding rules are spread across many elements, e.g. ``` <x-bar> # shadow <x-foo partmap="inner outer">...</x-foo> <x-foo partmap="inner outer">...</x-foo> <x-buz partmap="buz-part">...</x-foo> </x-bar> ``` An possible alternative to that would be to include the part-mapping information in the style rules. There are several ways we could do this e.g. ``` <x-bar> # shadow <style> /* this causes x-bar::part(outer) to match elements inside x-foo */ x-foo::part(inner) { @outer-name(outer) } /* expose buz-part without renaming */ x-buz::part(buz-part) { @outer-name() } </style> <x-foo>...</x-foo> <x-foo>...</x-foo> </x-bar> ``` Alternative ways of expressing this could be e.g. ``` @partmap myMap::x-foo { inner => outer; } x-foo { @partmap(inner, outer); } x-foo::part(inner) { outer-name: outer } ``` Good points: - all mappings are centralized - although they may be spread through multiple style elements inside the shadow root, so not necessarily centralized - exposing the part name map via IDL is something we want, no matter how it expressed and anyone who wants to reason about the mapping should use that - can compress many repetitive partmaps into a single CSS rule - makes it even easier to emulate ::theme using ::part, each shadow tree can just do `::part(theme-name) { @outer-name()}` to expose all the theme-name parts - could also be used to add part names to elements, e.g. `.some-class { @outer-name(some-part) }` would be the same as adding `part="some-part"` to all of the elements of class "some-class" Possible objections: - all mappings are centralized - these are not style rules, so should not be in the style sheet - unclear if there are implementation problems with this This is a fairly radical departure from the current spec and if people think this is a great/terrible idea, I'd like to hear that quickly. I think there's no difference in what can be expressed in either case, the main points are: - the ability to expressing mappings for many elements in a compact form - centralized vs distributed Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2904 using your GitHub account
Received on Wednesday, 11 July 2018 05:18:11 UTC