Ja, gemäß den Spezifikationen gibt es einen Weg.
Ich stimme zwar zu, dass Graeme Blackwoods die akzeptierte Antwort sein sollte, da es das Problem praktisch löst, es sollte jedoch beachtet werden, dass ein festes Element relativ zu seinem Behälter positioniert werden kann .
Ich habe das zufällig bei der Bewerbung bemerkt
-webkit-transform: translateZ(0);
für den Körper machte es ein festes Kind relativ zu ihm (anstelle des Ansichtsfensters). Meine festen Elemente left
und top
Eigenschaften waren nun relativ zum Container.
Also habe ich einige Nachforschungen angestellt und festgestellt, dass das Problem bereits von Eric Meyer behandelt wurde, und selbst wenn es sich wie ein "Trick" anfühlte, stellte sich heraus, dass dies Teil der Spezifikationen ist:
Bei Elementen, deren Layout vom CSS-Box-Modell gesteuert wird, führt jeder andere Wert als keiner für die Transformation dazu, dass sowohl ein Stapelkontext als auch ein enthaltender Block erstellt werden. Das Objekt fungiert als enthaltender Block für fest positionierte Nachkommen.
http://www.w3.org/TR/css3-transforms/
Wenn Sie also eine Transformation auf ein übergeordnetes Element anwenden, wird es zum enthaltenden Block.
Aber...
Das Problem ist, dass die Implementierung fehlerhaft / kreativ erscheint, da sich die Elemente auch nicht mehr wie fest verhalten (auch wenn dieses Bit nicht Teil der Spezifikation zu sein scheint).
Das gleiche Verhalten tritt in Safari, Chrome und Firefox auf, jedoch nicht in IE11 (wo das feste Element weiterhin fest bleibt).
Eine andere interessante (undokumentierte) Sache ist, dass, wenn ein festes Element in einem transformierten Element enthalten ist, während seine top
und left
Eigenschaften nun unter Berücksichtigung der Eigenschaft mit dem Container verknüpft sind box-sizing
, sich sein Bildlaufkontext über den Rand des Elements erstreckt, als ob Box -sizing wurde auf gesetzt border-box
. Für einige Kreative da draußen könnte dies möglicherweise ein Spielzeug werden :)
PRÜFUNG