w3c / csswg-drafts

CSS Working Group Editor Drafts
https://drafts.csswg.org/
Other
4.35k stars 641 forks source link

[cssom-view] Add scrollIntoView parameter to only scroll the nearest scrolling container #10451

Open flackr opened 3 weeks ago

flackr commented 3 weeks ago

Right now the cssom-view spec says that (emphasis mine):

To scroll a target into view target, which is an Element or Range, with a scroll behavior behavior, a block flow direction position block, and an inline base direction position inline, means to run these steps for each ancestor element or viewport that establishes a scrolling box scrolling box, in order of innermost to outermost scrolling box:

There are many use cases when building components where it would be nice to only scroll the scroller associated with that component. I propose we add a property to ScrollIntoViewOptions which limits the scroll to only the nearest scrolling container. E.g.

dictionary ScrollIntoViewOptions : ScrollOptions {
  ScrollLogicalPosition block = "start";
  ScrollLogicalPosition inline = "nearest";
  RecursionBehavior scrollers = "all" | "nearest";
};

I thought this was already filed but I couldn't find it in search so filing again.

Options to consider:

  1. A named parameter, e.g. scrollers = "all" | "nearest"
  2. A boolean parameter, e.g. recurse = true | false
  3. A capturing ancestor scroller node, e.g. Element? contain = document.scrollingElement

We could also have some combination of these options, e.g. the the named parameter could optionally take an element.

argyleink commented 3 weeks ago

many many folks at CSS Day expressed this as an issue, as the API is what they want, but the side effects of effecting each ancestor are not what they want.

there's also scrollIntoViewIfNeeded() that could use the same property

rol4nd909 commented 3 weeks ago

Yep I was one of them 😊 love to see this coming as an option. Thanks for working on it.