Коли sticky-хедер, меню або dropdown в Elementor опиняється під сусідньою секцією, перша реакція — збільшити z-index до 999, 9999 або ще більшого числа. Але це не завжди допомагає. Причина часто не в самому значенні z-index, а в тому, що елемент знаходиться в іншому stacking context — окремому шарі, правила якого обмежують порядок накладання дочірніх елементів.
Щоб виправити проблему, потрібно перевірити не лише CSS елемента, який має бути поверх інших, а й усіх його батьків, сусідні контейнери, overflow та властивості на кшталт transform, opacity і filter. Нижче — послідовна діагностика для Elementor і WordPress.
Що таке z-index і stacking context
Властивість z-index визначає порядок розташування елементів по осі Z — тобто який елемент буде ближче до користувача. Однак z-index не порівнює всі елементи сторінки в одному глобальному списку. Браузер спочатку працює зі stacking context, або контекстами накладання, а вже всередині кожного контексту визначає порядок дочірніх елементів.
Наприклад, dropdown має z-index: 9999, але його батьківський контейнер перебуває в шарі з нижчим пріоритетом, ніж сусідня секція. У такій ситуації dropdown не зможе «перестрибнути» через батьківський stacking context, навіть якщо його власний z-index дуже великий.
Stacking context можуть створювати, зокрема, позиціоновані елементи з власним z-index, transform, opacity зі значенням менше 1, filter, isolation, деякі значення contain і will-change. Тому проблема часто прихована на рівні контейнера, а не самого меню чи хедера.
- z-index працює коректно лише в контексті накладання, до якого належить елемент.
- Велике число не скасовує обмеження батьківського stacking context.
- Трансформації та фільтри без очевидної потреби можуть змінити порядок шарів.
- overflow: hidden зазвичай не створює stacking context сам по собі, але може обрізати dropdown або інший дочірній елемент.
Чому z-index у Elementor може не працювати
В Elementor елементи зазвичай вкладені один в один: віджет знаходиться в колонці або контейнері, контейнер — у секції, а секція може бути частиною шаблону сторінки. Через це порядок накладання формується всім ланцюжком батьківських елементів.
Типова ситуація: хедеру встановили position: sticky і z-index: 100, але один із його батьків має transform або невдале значення overflow. В іншому випадку сусідня секція отримала власний z-index: 200 і опинилася вище на рівні батьківських контейнерів.
Ще одна поширена причина — z-index задано не тому елементу. Наприклад, значення встановили віджету меню, хоча перекриття створює весь контейнер хедера. У такій схемі потрібно перевірити і підняти контейнер, який бере участь у порівнянні шарів.
- У хедера немає position: relative або sticky.
- z-index призначено дочірньому віджету, але не потрібному батьківському контейнеру.
- Сусідня секція має вищий z-index.
- Батьківський контейнер має transform, filter, opacity або іншу властивість, що створює stacking context.
- Dropdown обрізається через overflow: hidden.
- Sticky-поведінку порушує батьківський контейнер із невідповідною висотою або прокручуванням.
Як перевірити проблему через інструменти браузера
Найшвидше діагностувати проблему можна через DevTools у Chrome, Edge або Firefox. Відкрийте сторінку, натисніть правою кнопкою на хедер або dropdown і виберіть перевірку елемента. У вкладці Styles або Computed подивіться фактичні значення position, z-index, overflow, transform, filter та opacity.
Перевіряйте не лише вибраний елемент. Піднімайтеся в DOM-дереві від dropdown до хедера, контейнера, секції та wrapper сторінки. На кожному рівні шукайте властивості, які створюють окремий контекст або обрізають вміст.
Якщо в браузері видно, що dropdown має великий z-index, але весь його батьківський контейнер розташований під іншою секцією, збільшення числа не вирішить проблему. Потрібно змінити порядок на рівні батьківських контейнерів або прибрати зайвий stacking context.
- Перевірте, який елемент фактично перекриває хедер або меню.
- Порівняйте z-index хедера з z-index сусідньої секції.
- Подивіться, чи не має батько transform, filter або opacity.
- Перевірте computed-значення, а не лише CSS-код у редакторі.
- Тимчасово вимкніть підозрілу властивість у DevTools і подивіться, чи змінилася поведінка.
Базове налаштування sticky-хедера
Для простого sticky-хедера зазвичай потрібні position: sticky, координата top і z-index. CSS можна додати до потрібного елемента або контейнера за допомогою механізму Custom CSS, якщо він доступний у вашій конфігурації Elementor. Селектор selector у прикладі означає поточний елемент, до якого застосовується код.
Підвищуйте z-index не навмання, а в межах зрозумілої ієрархії. Наприклад, хедеру можна призначити 100, а звичайним секціям залишити auto або менше значення. Якщо в проєкті вже є система шарів, краще дотримуватися її, щоб не створювати конфлікти.
- Застосовуйте position: sticky до хедера або його основного контейнера.
- Задайте top: 0, якщо хедер має прилипати до верхнього краю вікна.
- Встановіть z-index саме елементу, який повинен бути вище за сусідні секції.
- Переконайтеся, що sticky-елемент має достатньо висоти батьківського контейнера для прокручування.
selector {
position: sticky;
top: 0;
z-index: 100;
}
Як виправити stacking context і обрізання dropdown
Якщо базовий CSS не допоміг, перевірте батьківські контейнери. Приберіть transform або filter, якщо вони не потрібні для анімації чи дизайну. Також обережно використовуйте opacity: навіть значення на кшталт 0.99 створює окремий контекст накладання.
Для dropdown особливо важливий overflow. Якщо контейнер хедера або його предок має overflow: hidden, меню може бути фізично обрізане межами контейнера. У такому випадку z-index не допоможе, бо він змінює порядок шарів, але не дозволяє вмісту вийти за межі області обрізання.
Після зміни стилів перевірте меню на десктопі та мобільних пристроях. Responsive-налаштування Elementor можуть створювати окремі значення z-index, overflow або позиціонування для різних розмірів екрана.
- Замініть overflow: hidden на visible, якщо контейнер не повинен обрізати dropdown.
- Не залишайте transform на батьківському елементі без потреби.
- Перевірте filter, opacity, isolation і will-change.
- Порівняйте стилі для desktop, tablet і mobile.
- Очистіть кеш сайту та браузера після зміни CSS, якщо стара версія стилів продовжує відображатися.
/* Приклад: застосовуйте лише якщо контейнер не має обрізати вміст */
selector {
overflow: visible;
}
Практичний алгоритм пошуку помилки
Щоб не змінювати десятки випадкових значень, перевіряйте проблему послідовно. Спочатку визначте, що саме перекриває хедер або dropdown. Потім порівняйте батьківські контейнери обох елементів і знайдіть рівень, на якому порядок шарів розходиться.
Якщо після вимкнення transform, filter або overflow проблема зникає, поверніть властивості по одній. Так можна встановити точну причину й не зламати інші частини дизайну. Після виправлення перевірте відкриття меню, прокручування сторінки, мобільну навігацію та перекриття модальних вікон.
- 1. Визначте елемент, який повинен бути поверх інших.
- 2. Додайте або перевірте його position і z-index.
- 3. Перевірте z-index сусідніх секцій та контейнерів.
- 4. Пройдіть увесь ланцюжок батьківських елементів.
- 5. Тимчасово вимкніть transform, filter, opacity та overflow.
- 6. Перевірте результат на різних ширинах екрана.
- 7. Залиште лише необхідні правила, а не набір надмірно великих z-index.
Поширені помилки під час налаштування z-index
Найчастіша помилка — вважати z-index універсальним числом, яке автоматично піднімає елемент над усією сторінкою. Насправді важливі і значення на рівні батьків, і порядок stacking context.
Також не варто додавати z-index кожному контейнеру без потреби. Надмірна кількість контекстів ускладнює підтримку та може створити нові конфлікти між хедером, popup, cookie-банером і модальними вікнами. Краще визначити логічну ієрархію шарів і застосовувати її вибірково.
Якщо зміни не видно одразу, причина може бути не в CSS, а в кешуванні стилів, оптимізації CSS або мобільній версії окремого шаблону. Водночас не слід одразу змінювати код теми: спочатку перевірте фактичні стилі в DevTools і налаштування конкретного контейнера.
- Не покладайтеся на z-index: 999999 без перевірки батьків.
- Не плутайте проблему накладання з проблемою overflow.
- Не задавайте position: fixed замість sticky лише як тимчасовий обхідний шлях.
- Не забувайте про окремі стилі для адаптивних режимів.
- Не редагуйте minified CSS або файли плагінів без резервної копії та розуміння наслідків.
Поширені запитання
Чому z-index: 9999 не піднімає dropdown над секцією?
Найімовірніше, dropdown перебуває в батьківському stacking context із нижчим пріоритетом або його обрізає overflow: hidden. Перевірте батьківські контейнери, transform, filter, opacity і overflow.
Чи завжди потрібно додавати position перед z-index?
Для звичайно позиціонованих елементів z-index зазвичай працює разом із position, наприклад relative, absolute, fixed або sticky. Окремі правила діють для flex- і grid-елементів, але position усе одно допомагає зробити логіку накладання зрозумілою.
Чому dropdown обрізається, хоча він має високий z-index?
Високий z-index не скасовує обрізання батьківського контейнера. Якщо предок має overflow: hidden або інше обмеження, меню може бути приховане за межами його області. Перевірте overflow у всьому ланцюжку батьків.
Чи може transform впливати на sticky-хедер?
Так. Transform на батьківському елементі може створити окремий stacking context і змінити поведінку позиціонування та порядок накладання. Якщо transform не потрібен, тимчасово приберіть його й перевірте результат.
Яке значення z-index краще використовувати для хедера?
Універсального числа немає. Важливо, щоб z-index хедера був вищим за сусідні секції в тому самому контексті, а його батьківські елементи не обмежували накладання. Значення 100 може бути достатнім, якщо структура сторінки не створює конфліктів.
Висновок
Проблема з z-index в Elementor найчастіше виникає не через замале число, а через stacking context, overflow або неправильний рівень, на якому задано стиль. Перевіряйте весь ланцюжок батьківських контейнерів, а не лише віджет меню чи хедер.
Надійний порядок дій такий: визначити елемент, що перекриває потрібний об’єкт, перевірити position і z-index, знайти зайві transform або filter, перевірити overflow і протестувати адаптивні стилі. Такий підхід зазвичай дозволяє виправити накладання без хаотичного збільшення z-index.