css: fix child-table row edit blocked by freeze backdrop
The jey-section-in keyframe animated opacity + transform with animation-fill-mode: both, which leaves a persistent stacking context on .section-body in Firefox. That trapped Frappe's .form-in-grid (z-index 1021) under #freeze.modal-backdrop (z-index 1020), so every mouse click on the row-edit form got captured by #freeze and closed the form. Tab and typing still worked. Slide via top instead of transform, drop the opacity keyframe entirely. Also stop lifting .form-section on focus-within (same trap mechanism); lift the awesomplete listbox itself instead so Link-field dropdowns still escape sibling sections. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3dd6c325f5
commit
e79cea96b7
|
|
@ -467,20 +467,24 @@ input.list-header-checkbox:checked::after {
|
||||||
========================================================================== */
|
========================================================================== */
|
||||||
|
|
||||||
@keyframes jey-section-in {
|
@keyframes jey-section-in {
|
||||||
from {
|
from { top: -12px; }
|
||||||
opacity: 0;
|
to { top: 0; }
|
||||||
transform: translateY(-12px);
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: `to` intentionally omits `transform` — leaving `translateY(0)` in the
|
/* Slide-only entrance — animating `opacity` here would create a persistent
|
||||||
final frame would keep a stacking context on every section after animation
|
stacking context on .section-body (Firefox keeps the compositing layer
|
||||||
completes, clipping Link-field autocomplete dropdowns behind later sections. */
|
alive after the animation completes when `fill-mode: both` keeps opacity
|
||||||
|
fill-forward, even though opacity reaches 1). That stacking context traps
|
||||||
|
Frappe's child-table row form (.form-in-grid, z-index 1021) under the
|
||||||
|
freeze backdrop (#freeze.modal-backdrop, z-index 1020): the row form
|
||||||
|
visually disappears behind the backdrop, every mouse click is captured by
|
||||||
|
#freeze (whose handler closes the row form), and only keyboard nav works.
|
||||||
|
Same reason we slide via `top` instead of `transform: translateY()` —
|
||||||
|
`transform` would also leave behind a stacking context.
|
||||||
|
`position: relative` alone (without z-index) does NOT create one. */
|
||||||
.form-layout .form-section .section-head,
|
.form-layout .form-section .section-head,
|
||||||
.form-layout .form-section .section-body {
|
.form-layout .form-section .section-body {
|
||||||
|
position: relative;
|
||||||
animation: jey-section-in 0.7s cubic-bezier(0.22, 1, 0.36, 1) both;
|
animation: jey-section-in 0.7s cubic-bezier(0.22, 1, 0.36, 1) both;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -817,11 +821,15 @@ input.list-header-checkbox:checked::after {
|
||||||
to { opacity: 0; }
|
to { opacity: 0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Lift the section containing an open autocomplete above its siblings so the
|
/* Lift the open autocomplete listbox above its siblings so the dropdown can
|
||||||
dropdown can spill past the section boundary without being painted over by
|
spill past the section boundary without being painted over by later
|
||||||
later sections (which naturally paint above earlier ones in DOM order). */
|
sections (which naturally paint above earlier ones in DOM order).
|
||||||
.form-layout .form-section:focus-within {
|
Lift only the listbox itself, NOT the surrounding .form-section, because a
|
||||||
position: relative;
|
z-index on the section creates a stacking context that traps Frappe's
|
||||||
|
child-table row form (.form-in-grid, z-index 1021) below the freeze
|
||||||
|
backdrop (#freeze.modal-backdrop, z-index 1020), leaving the screen
|
||||||
|
unclickable when editing a row. */
|
||||||
|
.awesomplete > ul[role="listbox"]:not([hidden]) {
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue