Strange transition using anchor positioning and popovers
I am using anchor positioning (the solution can only be described as 'interesting') to position some 'toast' popovers (top-layer), with a transition (translation) using
allow discrete
behaviour. This works fine for transitioning in to view. However, when the popover is being hidden, the element suddenly loses its anchoring halfway through the transition.
Codepen link: https://codepen.io/reuseaux/pen/pvJOzaJ6 Replies
Most of the issue was setting
inset
only when they were :popover-open
, so when you close them, they're not :popover-open
anymore, so they don't have inset
anymore so they jump somwhere in the page.
If you just remove the :popover-open
from your selectors:
It will work perfecty (but only for the first popover), the second one, since its position is based off the first one, when the first one disappears from the dom, the second one does't know where to place itself anymore, so it breaks
To fix this I haven't tried, but I think you can just use a --count
or maybe a sibling-index
or something like that. But maybe i'll still create a div, that is positioned at the bottom right of the screen, and use that as a position-area
, I don't know if it will work, but I don't see why it shouldn'tThanks for the reply; I have managed to fix the problem (no 'reference' div needed!), and it is much simpler than before.
This seems to be working now, though I have to say I don't know why I didn't do this to start with, and why I decided to use multiple different
anchor-name
properties!Wait, why is it working? I haven't played with anchor positioning that much
But shouldn't the popover 2 and 3 be stacked on top of each other? Why are they not relative to the first toast? It's the only one that has an
anchor-name
and the other 2 have a position-anchor
set to the first one, what am I missing here?The
anchor-name: --toast;
property is set for all .toast
elements, not just the first one.
I'm not actually sure how it is worked out which --toast
anchor each subsequent toast is anchored to (e.g. why the third one is anchored to the second one not the first one). I'll see if I can find out how that happens.Found it...
From MDN docs (https://developer.mozilla.org/en-US/docs/Web/CSS/anchor-name)
If multiple anchor elements have the same anchor name set on them, and that name is referenced by the position-anchor property value of a positioned element, that positioned element will be associated with the last anchor element with that anchor name in the source order.
MDN Web Docs
anchor-name - CSS | MDN
The anchor-name CSS property enables defining an element as an anchor element by giving it one or more identifying anchor names. Each name can then be set as the value of a positioned element's position-anchor property to associate it with the anchor.
Oh right, I missed it, for some reason I saw that you set
anchor-name
only on the first one, now it makes sense, thank you