Commit 669642c
committed
fix: use measurement clone to avoid disrupting popup animations during alignment
On some platforms (notably Linux with X11/Wayland compositors), the alignment
calculation runs mid-CSS-animation. The previous approach modified the popup
element's styles (left, top, transform, overflow) to measure its position,
which interfered with active CSS transitions (transition: all) and transforms
(transform: scale()) applied during entrance animations. This caused
getBoundingClientRect() to return incorrect values, producing wildly wrong
popup positions (e.g. top: -20000px).
The fix replaces the direct popup style manipulation with a shallow clone
(cloneNode(false)) used as a measurement proxy. The clone inherits the
popup's classes and attributes but has transform/transition explicitly
neutralized. This allows accurate position measurement without touching
the original popup element, fully preserving CSS animations on all platforms.
Changes:
- Replace placeholder + popup style reset with cloneNode(false) measurement
- Measure positions via the clone's getBoundingClientRect() instead of the
popup's, avoiding interference from active animations
- Remove originLeft/Top/Right/Bottom/Overflow/Transform save/restore logic
since the popup element is no longer modified during measurement1 parent 59b659d commit 669642c
2 files changed
Lines changed: 77 additions & 38 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
177 | 177 | | |
178 | 178 | | |
179 | 179 | | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
186 | | - | |
187 | | - | |
188 | 180 | | |
189 | 181 | | |
190 | 182 | | |
191 | 183 | | |
192 | 184 | | |
193 | 185 | | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
209 | 205 | | |
210 | 206 | | |
211 | 207 | | |
| |||
227 | 223 | | |
228 | 224 | | |
229 | 225 | | |
230 | | - | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
231 | 229 | | |
232 | 230 | | |
233 | 231 | | |
| |||
281 | 279 | | |
282 | 280 | | |
283 | 281 | | |
284 | | - | |
285 | | - | |
286 | | - | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
291 | 287 | | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | | - | |
297 | | - | |
| 288 | + | |
298 | 289 | | |
299 | | - | |
| 290 | + | |
| 291 | + | |
300 | 292 | | |
301 | 293 | | |
302 | 294 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
333 | 333 | | |
334 | 334 | | |
335 | 335 | | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
336 | 383 | | |
0 commit comments