- From: Dael Jackson <daelcss@gmail.com>
- Date: Wed, 20 Nov 2024 19:34:39 -0500
- To: www-style@w3.org
========================================= These are the official CSSWG minutes. Unless you're correcting the minutes, please respond by starting a new thread with an appropriate subject line. ========================================= CSS Overflow ------------ - RESOLVED: Go with option 2 and make them siblings (Issue #11125: Tree structure of scroll container controls) - RESOLVED: Choose option 2 [Before Markers, Buttons, Content, After Markers] in the issue (Issue #10912: Focus order of generated controls) - RESOLVED: Adopt proposal in https://github.com/w3c/csswg-drafts/issues/10738#issuecomment-2448204794 to anchor to identified elements (Issue #10738: Allowing markers to be active even when not scrollable to aligned position) - RESOLVED: Use :target-current for the name (Issue #10918: Bikeshed pseudoclasses for active scroll-marker) - RESOLVED: Accept flackr's proposal ( https://github.com/w3c/csswg-drafts/issues/11216#issuecomment-2477472607 ) in the issue (Issue #11216: Disabled scroll-button state and styling) - RESOLVED: Go with Option 5 [Distribute some amount of the initial and ending scroll] (Issue #11165: Scrolling to unreachable scroll aligned marker positions) - RESOLVED: Publish Overflow 5 as FPWD ===== FULL MEETING MINUTES ====== Agenda: https://lists.w3.org/Archives/Public/www-style/2024Nov/0017.html Present: Adam Argyle Tab Atkins-Bittner David Baron Yehonatan Daniv Elika Etemad Robert Flack Roman Komarov Vladimir Levin Cassondra Roberts Alan Stearns Bramus Van Damme Scribe: dbaron CSS Overflow Breakout Meeting ============================= Tree structure of scroll container controls ------------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/11125 flackr: overflow-5 specs adds a bunch of new pseudos: scroll buttons and scroll marker group flackr: We have spec'd that scroll marker group acts like layout sibling to scroll container. Buttons not spec'd that well. flackr: I think this matters in terms of how developers can lay things out that we define this well. flackr: My proposal is that they are layout siblings to the scroll container, similar to the scroll maker group flackr: and that we have a well defined order, informed by the focus order issue (coming later) flackr: I want to ensure that if we do this we can still support querying things about scroll container state. flackr: futhark said in issue this seems fine flackr: If making them siblings had prevented querying things on the scroll container that would (have been/be) a concern fantasai: I agree it's a better route in general. fantasai: One issue was inability to use size container queries, not sure if that would be a problem flackr: I don't think that's a problem. astearns: Is the issue with size containers that if they're siblings then the size containment doesn't consider them? flackr: I think the size containment algorithm doesn't support using a size container query on a layout sibling flackr: I don't think it's a big problem that you can't use size container queries -- that particular aspect is not super important. astearns: fantasai, anything more on this? fantasai: no, just stating the question. TabAtkins: I agree this is probably the right model. It's new. I'm interested in seeing how it works, if it's generalizable, annoying, or something we need to keep as a special case. ydaniv: I think big difference between second and third is what's your container. If you're doing layout of pseudos -- with option 3 it's the same element but with option 2 it's the container of all of them. flackr: I think the container for *style* purposes can still be the same. ydaniv: The same element, the scroller? flackr: Yeah flackr: In the flat tree they're sort of like descendants -- just in the generated boxes they're siblings. ydaniv: You mentioned being able to do grid layout -- in both cases display:grid is on the same element and you can place them according to the scroller flackr: Option 1 and 3 wouldn't support grid layout. flackr: The idea is that you have display:grid on an immediate ancestor of the scroller -- the only way you can choose grid areas from that if they're effectively layout siblings to the scroller. fantasai: In general, having them be siblings means they can take up space in layout area outside the scroller, which is sometimes what you want. fantasai: That's the main advantage of making them siblings. fantasai: The disadvantage is that you can't use size container queries to change layout of the scroll markers. astearns: So I'm hearing general agreement that option 2 is the best of what we've presented so far. Shall we resolve on trying it and see how it goes? flackr: sounds good to me [heads nodding] Proposed resolution: go with option 2 and make them siblings RESOLVED: Go with option 2 and make them siblings astearns: ... knowing that we may come back to this if the size containment thing or anything else proves unwieldy Focus order of generated controls --------------------------------- github: https://github.com/w3c/csswg-drafts/issues/10912 flackr: We need a well defined focus order when you tab through these generated controls flackr: aria has guidelines for rough expectation of focus in a carousel-like experience flackr: this proposal aligns with that order flackr: The buttons are together and occur before the contents of the scroller flackr: The marker's position is before or after the scrolling contents depending on the scroll-marker-group property flackr: My proposal is that the buttons... if the markers are before they come first, then the buttons, then the content, then the markers if they come after flackr: see my last comment in the issue <TabAtkins> +1 to the Option 2 in the issue flackr: One additional thing is question of when to focus the scroll container itself flackr: I think it still makes sense given the previous resolution for the container to come before the content. flackr: so before markers, buttons, container, content, after markers <fantasai> Seems reasonable astearns: Haven't thought about this deeply, but the container focus is not meant to contain the button or markers? flackr: Right flackr: Focusing the container is typically done to scroll the container, so makes sense as a separate item between the controls vmpstr: When focusing the content that means tabbing through all the focus items within the carousel before exiting to the after markers <ydaniv> +1 flackr: Correct fantasai: By before markers and after markers do you mean ::before and ::after pseudos? flackr: Referring to whether scroll-marker-group property says before or after fantasai: I see <TabAtkins> ::scroll-marker-group (before), ::scroll-button()s, scroller, scroller's contents, ::scroll-marker-group (after) fantasai: How do we typically lay out the order of a scroll container and its scrollbars? Is that relevant here? flackr: The scroll bars are not in the focus order flackr: I think if they were ???... we're treating generated controls as siblings of the scroller fantasai: ... seems fine flackr: I think with implementation and practice using it we'll see if it seems right, but this is trying to follow best practices for these designs astearns: What's the use of focusing markers? flackr: User can tab to active marker, and use arrow keys to select which marker they want TabAtkins: Markers are links astearns: I suppose AT could say "tab 2 of 4 is active" flackr: Exactly astearns: Sounds like we're converging on option 2, and we'll see how it goes RESOLVED: Choose option 2 in the issue Allowing markers to be active even when not scrollable to aligned position ----------------------------------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/10738 flackr: It's easy to create a design where you can't reach the natural scroll-aligned position of the first or last elements in your scroller. flackr: This leads to an odd usability issue that clicking on them doesn't make the markers active flackr: We have the same problem today where if you follow an anchor link to something whose scroll position can't be reached, we could scroll you away from that link as a result of scroll anchoring flackr: My proposal here is that browsers track when the scroll in a scroll container targeted a particular element, and then use that element as the targeted item until the user does another scroll. flackr: For the purposes of markers this would mean that the marker is the first marker at or before that targeted element <TabAtkins> https://github.com/w3c/csswg-drafts/issues/11165 TabAtkins: I was wondering how this would interact with 11165 which is about indicating markers in the unscrollable region that you can't reach... but I don't think it does, so I'm good with what's suggested here. fantasai: Overall I agree with the direction... one thing is if we've targeted a particular element that's not the one we'd select at this scroll position because we're further down towards the end... the user would have to scroll back up to shift focus to something else? flackr: Right fantasai: So if they continued to scroll down it would not cause it to recalculate flackr: They're not changing their scroll position by scrolling down fantasai: Then this seems fine to me <dbaron> +1 to element tracking from me to -- something I wanted to do a very long time ago well before scroll anchoring was a thing :-) <fantasai> PROPOSED: Adopt proposal in https://github.com/w3c/csswg-drafts/issues/10738#issuecomment-2448204794 to anchor to identified elements Proposed resolution from flackr: each scrolling container tracks the last element scrolled into view until that container's scroll position is otherwise changed RESOLVED: Adopt proposal in https://github.com/w3c/csswg-drafts/issues/10738#issuecomment-2448204794 to anchor to identified elements Bikeshed pseudoclasses for active scroll-marker ----------------------------------------------- Scribe: TabAtkins github: https://github.com/w3c/csswg-drafts/issues/10918 flackr: :checked is confusing (to use for the active scroll marker in a group) flackr: we resolved :current is better, but it also has conflation with the other meaning of :current, and possibly used in same context flackr: so I've proposed we go with :target-current flackr: this combines the fact that you're referring to the "target" of the marker, similar to :target pseudo we already have, and that the target is "current" in the ways we thought made sense before. flackr: but as a different pseudo this is separately targetable from :current <TabAtkins> (+1 to the name) <fantasai> +1 to new pseudo-class, :target-* seems like a good idea, and :target-current seems fine astearns: You quoted that this has the potential to set precedent for upcoming specs, do you know what was meant there? flackr: I don't know if there was a reference to a specific other decision astearns: Anyone who thinks :target-current is not the right choice and would like something else? <fantasai> I'm also ok with :target-shown flackr: Suggestions with "shown" or visibility have come up, I'm shying away from those because several potential targets might be currently visible. "current" has a stronger notion of us determining that one is active. astearns: Proposed to use :target-current RESOLVED: Use :target-current for the name. Disabled scroll-button state and styling ---------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/11216 flackr: I don't expect this to be too controversial flackr: The scroll buttons behavior is to scroll in a direction flackr: It seems reasonable that if the scroller can't scroll any more in that direction, the button should be disabled <fantasai> +1 to the proposal flackr: Consistent with ARIA recs for prev/first buttons in a carousel. Not inert, disabled; my understanding is AT treats them differently. flackr: And they should apply a disabled style; the UA style will match the button disabled style argyle: Agree this is user expectation. not making it inert is good so it doesn't just disappear. argyle: [rereads his own comment] <astearns> https://github.com/w3c/csswg-drafts/issues/11216#issuecomment-2477358595 argyle: Ah, this was in competition with the "cyclical scrolling" argyle: if you're in netflix or something, they don't stop you, they cycle back to the other side argyle: either flipping back, or virtualizing to make it infinite scroll argyle: It's nice, but we should follow aria behavior here argyle: devs can build another behavior if they want it argyle: Other concern is, the buttons are siblings, so I thought they couldn't tap into the scroll-state query argyle: but they can, per Rene argyle: so that's a healthy default. flackr: I'm fully supportive of enabling cyclical scrolls, but I think we need to extend the Overflow model for that argyle: Agree <fantasai> +1 flackr, exactly why I was on the queue <vmpstr> +1 argyle: Maybe if that value was present these buttons didn't disable flackr: Yes, they'd change behavior because there is no end TabAtkins: How do you select them when they're in the disabled state? flackr: :disabled TabAtkins: Cool fantasai: Strong +1 to everything rob just said about how looping scroll should work argyle: In the UA, is there a scroll-state query, or is this a magic pseudo-state instead? argyle: So if I didn't want it disabled on the edges, how do I opt out? flackr: You could remove the disabled styling using :disabled flackr: but they'd still be disabled buttons. Unsure what you'd expect them to do. In the future we could target them with event listeners and add custom handling flackr: but right now you can't listen for events on the buttons argyle: Gotcha, so for this version, the scroller buttons will automatically disable at the edges. You can style differently, but they're still disabled. Until later when we have other overflow behaviors. flackr: Or until we start selecting in JS the pseudo-elements, or some other way of listening to events on pseudos [some discussion about getComputedStyle()'s pseudo argument) astearns: I think you can put a listener on the host and check where the click was...? flackr: You can't actually tell the click was on the pseudo unless you determine from the position argyle: Same as ::backdrop, yeah dbaron: I was discussing this with Mason a few days ago flackr: Yeah we should fix it dbaron: Mason ran into this exact problem last week flackr: So in a future we fix this you could hook into the buttons and do something else argyle: [re-summarizes] argyle: And it's styled as a button, but with text contents... I guess that's a different issue argyle: Sounds good overall, good defaults astearns: So desired resolution? flackr: apply the disabled behavior and style when you can't scroll further in the associated direction astearns: objections? RESOLVED: Accept flackr's proposal in the issue. <dbaron> (I think the discussion I mentioned with Mason was about https://github.com/whatwg/html/pull/10737 which actually (I think) ended up putting the click rect check in the spec PR!) Scrolling to unreachable scroll aligned marker positions -------------------------------------------------------- github: https://github.com/w3c/csswg-drafts/issues/11165 flackr: This is similar to the earlier issue. I have a demo page with some options flackr: It feels bad when you scroll that there are certain markers you just can't reach flackr: The best compromise to handle this, short of the developer choosing to add extra padding, is to hijack the first and last "some amount" of scrolling (arbitrarily chose 1/8 of the scrollport width), and distribute that proportionally to the items before the first reachable scroll position, and same to end flackr: so at position 0 you'll have the first marker selected, then you'll quickly zoom through the unalignable markers, and then hit the first alignable marker. argyle: If you're using scroll snap as a selection mechanism, this'll still be frustrating, but if you're just like browsing and the dots are highlighting as you scroll, it's not too bad. argyle: So squishing down and virtualizing the amount of scroll to hit the remaining snap points seems reasonable astearns: How does this interact with the previous resolution? astearns: Through a non-scroll action you've activated the second item. Is the scroll position now not 0? flackr: My proposal is this doesn't change, it's still 0. but the moment you scroll, it'll jump to the first item (via this issue's calculation) astearns: So I've navigated to item 2, I scroll to the right, my expectation is I'll go to item 3 flackr: Yes, but you'll actually go to item 1. Same as previous issue, several items conceptually at position 0, and as soon as you do a non-targeted scroll, it does a calculation (based just on scroll state) to find the active marker TabAtkins: I do recommend rolling through the demos in flackr's page TabAtkins: once you play with them and realize how bad the behaviors all are TabAtkins: you realize this gives you smooth behavior as you scroll TabAtkins: it's not a perfect solution, but it's the best by a long shot TabAtkins: all the others are actively terrible, just a little awkward, way better than the others argyle: At least scroll padding, there's no magic. Maybe there's extra space, but everything aligns, there's no edge cases, etc flackr: I fully support guidance to say ideally make all your positions reachable. but I think it would be extremely breaking to force extra padding to your scroller. argyle: It is annoying to add padding; flex and grid do some weird stuff flackr: There's a linked issue to make that easier vmpstr: So if the first two markers aren't reachable, as I approach 0 scroll offset but not at 0, the marker would switch to the second, then the first...? vmpstr: Why not then if I click the second marker, it would position me at an offset that would show the second marker selected? flackr: That has interactions with other specs TabAtkins: [explains how scroll snap makes this situation untenable] TabAtkins: You can't be in-between items when snapping is on flackr: Unless we did some sign if work with scroll-snap, I think that would be even weirder argyle: The goal is to have the perceptual marker match the end of scrolling... are we sending snap changing events? argyle: There's like four dots I can't rest at... TabAtkins: If your thing relies on actually being able to snap to every item, you need your layout to allow for snapping to those items TabAtkins: we can't do anything to make that possible other than adding padding, which would break things TabAtkins: There's an unwinnable situation here, need to compromise somehow argyle: Okay I'm interacting with them, they all seem to hijack my scroll in some way, 4 is the first item that snaps... argyle: Is option 5 everyone's choice for the least evil option? <bramus> SGTM <TabAtkins> (yes, for me) argyle: On mobile does it get really weird? flackr: My proposal uses a % of the scrollport width so it scales with the size argyle: Thanks for the demo page, this experience speaks a thousand words argyle: So these wouldn't emit snapchanging? flackr: Right because they're not snapped argyle: Okay but they just indicate visually argyle: Still a little bad but a compromise flackr: When we support using real elements as markers, you'll also be able to use this to get those things indicated astearns: So are we resolving on the least-bad option? flackr: Proposed is option 5 as the best we can do without breaking content. If we come up with something better in the future, we can consider changing it. flackr: This does currently live in a non-normative part of the spec; we decided active marker calculation would be non-normative until we're happy with it. Seems not too hard to change if we change our minds. astearns: So proposed resolution is option 5. Objections? RESOLVED: Go with Option 5 Publication ----------- github: https://github.com/w3c/csswg-drafts/issues/6900 fantasai: I have a vague recollection we resolved on a FPWd of this, but we don't have one yet. Am I misremembering? flackr: I know we talked about it, but I thought we wanted some of the core issues sorted out first fantasai: No, I think we just wanted some cleanup in the edits flackr: I see, I did do those clean-ups fantasai: The draft should be understandable at FPWD, but doesn't need all issues solved, that's CR flackr: Ok. I don't think we actually resolved on a FPWD publication astearns: So the proposed resolution is we take up FPWD of Overflow 5. RESOLVED: Publish Overflow 5 as FPWD
Received on Thursday, 21 November 2024 00:35:13 UTC