Так, згідно зі специфікаціями, є спосіб.
Хоча я погоджуюся, що відповідь Graeme Blackwood має бути прийнятою відповіддю, оскільки це практично вирішує питання, слід зазначити, що нерухомий елемент може бути розміщений відносно його контейнера.
Я випадково помітив, що при подачі заявки
-webkit-transform: translateZ(0);
до тіла, це зробило нерухому дитину відносно нього (замість вікна перегляду). Тому мої нерухомі елементи left
та top
властивості тепер були відносно контейнера.
Тож я провів кілька досліджень, і виявив, що проблему вже висвітлював Ерік Мейєр, і навіть якщо це відчувалося як "хитрість", виявляється, що це частина специфікацій:
Для елементів, розмітка яких керується моделлю вікон CSS, будь-яке значення, крім жодного, для перетворення призводить до створення контексту укладання та блоку, що містить. Об'єкт виконує роль блоку, що містить фіксовану позицію нащадків.
http://www.w3.org/TR/css3-transforms/
Отже, якщо застосувати будь-яке перетворення до батьківського елемента, він стане блоком, що містить.
Але ...
Проблема полягає в тому, що реалізація здається невдалою / креативною, оскільки елементи також перестають поводитися як виправлені (навіть якщо цей біт не здається частиною специфікації).
Така ж поведінка буде виявлена в Safari, Chrome та Firefox, але не в IE11 (де нерухомий елемент все ще залишатиметься виправленим).
Ще одна цікава (незадокументована) річ полягає в тому, що коли нерухомий елемент міститься всередині трансформованого елемента, а його top
та left
властивості тепер будуть пов’язані з контейнером, зважаючи на box-sizing
властивість, його контекст прокрутки пошириться за межу елемента, немовби поле -розмір встановлено на border-box
. Для деяких креативів там, можливо, це може стати іграшкою :)
ТЕСТ