Tak, zgodnie ze specyfikacją istnieje sposób.
Chociaż zgadzam się, że Graeme Blackwood powinna być przyjętą odpowiedzią, ponieważ praktycznie rozwiązuje problem, należy zauważyć, że element stały może być umieszczony względem swojego pojemnika.
Zauważyłem przypadkowo, że przy składaniu wniosku
-webkit-transform: translateZ(0);
względem ciała, utworzyło względem niego stałe dziecko (zamiast rzutni). Moje stałe elementy left
i top
właściwości były teraz względne w stosunku do kontenera.
Zrobiłem więc trochę badań i odkryłem, że problem został już omówiony przez Erica Meyera i nawet jeśli wydawało się to „sztuczką”, okazuje się, że jest to część specyfikacji:
W przypadku elementów, których układem rządzi model pudełkowy CSS, każda wartość inna niż żadna dla transformacji powoduje utworzenie zarówno kontekstu stosu, jak i bloku zawierającego. Obiekt działa jako blok zawierający dla ustalonych pozycji potomków.
http://www.w3.org/TR/css3-transforms/
Tak więc, jeśli zastosujesz transformację do elementu nadrzędnego, stanie się on blokiem zawierającym.
Ale...
Problem polega na tym, że implementacja wydaje się błędna / kreatywna, ponieważ elementy również przestają zachowywać się jak ustalone (nawet jeśli ten bit nie wydaje się być częścią specyfikacji).
To samo zachowanie można znaleźć w Safari, Chrome i Firefox, ale nie w IE11 (gdzie stały element nadal pozostanie stały).
Inną interesującą (nieudokumentowaną) rzeczą jest to, że gdy element stały jest zawarty w przekształconym elemencie, a jego właściwości top
i left
będą teraz powiązane z kontenerem, z poszanowaniem box-sizing
właściwości, kontekst przewijania będzie rozciągał się poza krawędź elementu, jak pole -Rozmiar został ustawiony na border-box
. Dla niektórych twórców może to być zabawką :)
TEST