Да, согласно спецификации, есть способ.
Хотя я согласен с тем, что Грэм Блэквуд должен быть принятым ответом, поскольку он практически решает проблему, следует отметить, что фиксированный элемент может располагаться относительно его контейнера.
Я случайно заметил, что при применении
-webkit-transform: translateZ(0);
к телу, он сделал фиксированного потомка относительно него (вместо области просмотра). Так что мои фиксированные элементы left
и top
теперь были относительно контейнера.
Итак, я провел некоторое исследование и обнаружил, что проблема уже была рассмотрена Эриком Мейером и даже если это показалось «уловкой», оказалось, что это часть спецификаций:
Для элементов, макет которых определяется блочной моделью CSS, любое значение
кроме ни один для преобразования приводит к созданию как
контекст укладки и содержащий блок. Объект действует как
содержащий блок для потомков с фиксированной позицией.
http://www.w3.org/TR/css3-transforms/
Итак, если вы примените какое-либо преобразование к родительскому элементу, он станет содержащим блоком.
Но ...
Проблема в том, что реализация кажется ошибочной / креативной, поскольку элементы также перестают вести себя как фиксированные (даже если этот бит не является частью спецификации).
Такое же поведение будет обнаружено в Safari, Chrome и Firefox, но не в IE11 (где фиксированный элемент все еще останется фиксированным).
Еще одна интересная (недокументированная) вещь заключается в том, что когда внутри преобразованного элемента содержится фиксированный элемент, тогда как его свойства top
и left
теперь будут связаны с контейнером, соблюдая свойство box-sizing
, его контекст прокрутки. будет расширяться за границу элемента, как если бы размер рамки был установлен на border-box
. Для некоторых креативщиков это может стать игрушкой:)
TEST