- From: Peter Linss via GitHub <sysbot+gh@w3.org>
- Date: Fri, 08 May 2020 02:20:15 +0000
- To: public-css-archive@w3.org
> (Alternately, we just use ::part, no parens, to name all the parts, and all the part names are classes, like ::part.day.weekend. I'd be happier with this variant.) This is actually very close to what I've been thinking lately. I'm not happy with the conflation of tag-like and class-like behavior in part names. I strongly feel that shadow parts should really just be custom pseudo-elements and have a single tag-like name, just like built-in pseudo elements do. I want to expose built-in behavior not create something special and different. I do see the value in the additional class-like behavior, and my current thinking is that could be exposed as classes of the pseudo-element to selectors. There's no way for anything else to assign classes to pseudo-elements so why not? Note that actual classes assigned to a part should not break the encapsulation of the custom element and be visible outside it. e.g. ``` <custom-calendar> <shadow-root> <custom-day part='day' part-class='weekend holiday' class='internal-class'>1</custom-day> </shadow-root> </custom-calendar> ``` (I don't care what the 'part-class' attribute is really called) A weekend holiday would be selected via: `custom-calendar::--day.holiday.weekend { ... }` The 'internal-class' can be used by stylesheets attached to the <custom-calendar> but is not exposed to anything that contains a <custom-calendar>. If the <custom-day> itself exposes custom state or additional parts, those would simply be exposed and could be selected like: `custom-calendar::--day.holiday.weekend:--active::--day-part { ... }` I'd be ok with parts having multiple part names, but those would be an 'or', e.g. you could select <custom-day part='foo bar'> as either `::--foo` or `::--bar`, but never `::--foo::--bar` because that would be a bar part inside the foo part. (Which also brings the question if the part name should be specified as `part='--foo'`, I think so). Multiple tag-like part names would allow flexibility to evolve the internals of a custom element without necessarily breaking users, but then can't be (ab)used for class-like behavior. Alternatively we could define the first part name to be the tag-like name and others to be class-like, but I think that's problematic when you start manipulating them, e.g. toggle the first one off and you just redefined the tag-like name. If the class syntax doesn't work for some reason, my fallback would be exposing the part's class-like names as param of the pseudo-element, e.g. `custom-calendar::--day(holiday weekend) { ... }` Either approach gets rid of `::part` and aligns this with custom pseudo-classes. -- GitHub Notification of comment by plinss Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/4900#issuecomment-625592040 using your GitHub account
Received on Friday, 8 May 2020 02:20:17 UTC