- From: Ojan Vafai <ojan@chromium.org>
- Date: Wed, 11 Jul 2012 11:58:32 -0700
- To: Maciej Stachowiak <mjs@apple.com>
- Cc: Simon Fraser <smfr@me.com>, Brad Kemper <brad.kemper@gmail.com>, "Edward O'Connor" <eoconnor@apple.com>, "www-style@w3.org" <www-style@w3.org>
- Message-ID: <CANMdWTt_W3qx7TpbV1ZUy8-imbiKA0Z2r53EMYG6ydZMd-JO+A@mail.gmail.com>
Just to close the loop here, I'm fine with sticky as proposed despite my earlier concerns. I think sticky meets the majority use-case simply and will map to a subset of the more complicated proposal. On Sun, Jul 1, 2012 at 1:53 PM, Maciej Stachowiak <mjs@apple.com> wrote: > > On Jul 1, 2012, at 1:41 PM, Simon Fraser <smfr@me.com> wrote: > > > On Jul 1, 2012, at 12:06 pm, Maciej Stachowiak <mjs@apple.com> wrote: > > > >> On Jun 28, 2012, at 11:16 AM, Simon Fraser <smfr@me.com> wrote: > >> > >>> On Jun 28, 2012, at 10:37 AM, Brad Kemper <brad.kemper@gmail.com> > wrote: > >>> > >>>> I think this would be great. But I don't think the tbrl keywords > should be only be relative to the viewport, but rather to the nearest > potentially scrollable ancestor (overflow: auto | scroll). In many designs > that might be the main scrollable content area with the viewport itself not > scrolling at all. > >>> > >>> We've had others suggest this too. > >>> > >>> A complication is that an ancestor may only be scrollable in one > direction (overflow-y: scroll), so you may want to sticky-position on the Y > axis relative to your overflow:scroll ancestor, and sticky-position on the > X axis relative to the viewport. That's slightly crazy. > >>> > >>>> I'm not sure what you mean by the containing box's edge, especially > if you are talking about only the viewport being the measure of what the > 'top: 10px' is relative to. Wouldn't it stop at the edge of the same box, > ie the viewport? > >>> > >>> The sticky element is positioned inside a box that is the intersection > of the viewport (inset by the top/right/bottom/left values), and the > containing block (inset by the sticky element's margins). > >>> > >>> So the sticky element never escapes its containing block. > >> > >> A possible alternate rule that would address Brad's case without being > *too* much more complicated: > >> > >> "The sticky element is positioned inside a box that consists of the > containing block as clipped by all ancestor overflow rules." > >> > >> This would handle the case of a scrollable area that is not the > viewport and would give a clear way of handling the "scrollable in only one > direction" problem. Note: I don't know if this would cause significant > implementation difficulties. > > > > I don't think you always want that. Imagine a scrolling box that wants > sticky headers (e.g. something like the right sidebar on http://io9.com, > but not fixed-position, and with the "latest stories" header being sticky). > I think, most often, you want that sticky header inside the overflow:scroll > to not be sticky to the viewport bounds, but to scroll out of view with its > containing overflow element as you scroll the page. > > If I follow your example correctly, you are right that my proposal would > cause more stickiness than is desired. You could address that either with > Brad's proposal of [intersection of containing block and closest ancestor > with overflow: scroll] or else add an additional property to explicitly > state which boxes define the constraint bounds. > > Are there any cases where you really do want to stick to the viewport > rather than the closest scrolling ancestor? > > Defaulting to viewport and defaulting to scroll container are also both > compatible with later adding an additional property to explicitly define > constraint boxes. > > Regards, > Maciej > > > >
Received on Wednesday, 11 July 2012 18:59:22 UTC