- From: Bramus! via GitHub <sysbot+gh@w3.org>
- Date: Tue, 28 Dec 2021 22:55:58 +0000
- To: public-css-archive@w3.org
Recently stumbled upon the limitation where I wanted multiple items to be sticky inside the same parent container, but without overlapping each other.
Given this markup:
```html
<main>
<article>
<h1 />
<h2 />
<h2 />
</article>
<article>
<h1 />
<h2 />
<h2 />
</article>
</main>
```
I want the `<h1>` elements to be sticky against the top edge of `<article>`, and want the subheadings `<h2>` to stick against the preceding `<h1>` that's already stuck.
Right now I fixed it by fixating the `top` for `<h2>` to equal the height of `<h1>`, but that only works if all `<h1>` elements have the same height.
```css
article :is(h1, h2) {
position: sticky;
top: 0;
}
article h2 {
top: var(--height-of-h1); /* But what if the <h1> text wraps?! Uhoh! */
}
```
**👉 What I'm looking for is an easier way to say “Hey `<h2>`, stick against the already sticky `<h1>`”**
Note that it's not a simple as saying “stick against the previously stuck element“, as you'd then end up with the 2nd `<h2>` sticking against the first `<h2>`, sticking against the `<h1>`.
---
💡 Could potentially be solved by leveraging some other specs and by expanding the functionality of `selector()` to mimic `document.querySelector` (see https://github.com/w3c/csswg-drafts/issues/5884#issuecomment-867117769)
```css
h2 {
top: selector("h1:has(+ &)"); /* Selects the h1 that precedes self (&) */
}
```
--
GitHub Notification of comment by bramus
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/2496#issuecomment-1002312635 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Tuesday, 28 December 2021 22:56:00 UTC