[CSSWG] Minutes Overflow Breakout 2024-11-20 [css-overflow]

=========================================
  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