Sí, de acuerdo con las especificaciones, hay una manera.
Si bien estoy de acuerdo en que Graeme Blackwood debe ser la respuesta aceptada, ya que prácticamente resuelve el problema, debe tenerse en cuenta que un elemento fijo se puede colocar relativamente en su contenedor.
Noté por accidente que al aplicar
-webkit-transform: translateZ(0);
para el cuerpo, hizo un niño fijo relativo a él (en lugar de la ventana gráfica). Entonces mis elementos fijos left
y top
propiedades ahora eran relativos al contenedor.
Así que investigué un poco y descubrí que Eric Meyer ya había cubierto el problema e incluso si se sentía como un "truco", resulta que esto es parte de las especificaciones:
Para los elementos cuyo diseño se rige por el modelo de cuadro CSS, cualquier valor que no sea ninguno para la transformación da como resultado la creación de un contexto de apilamiento y un bloque contenedor. El objeto actúa como un bloque contenedor para descendientes posicionados fijos.
http://www.w3.org/TR/css3-transforms/
Entonces, si aplica cualquier transformación a un elemento padre, se convertirá en el bloque contenedor.
Pero...
El problema es que la implementación parece defectuosa / creativa, porque los elementos también dejan de comportarse como arreglados (incluso si este bit no parece ser parte de la especificación).
El mismo comportamiento se encontrará en Safari, Chrome y Firefox, pero no en IE11 (donde el elemento fijo seguirá siendo fijo).
Otro interesante (no documentado) es que cuando un elemento fijo está contenido dentro de un elemento transformado, mientras que sus top
y left
propiedades ahora estarán relacionados con el contenedor, respetando la box-sizing
propiedad, su contexto de desplazamiento se extenderá sobre el borde del elemento, como casilla si -tamaño se estableció en border-box
. Para algunos creativos, esto podría convertirse en un juguete :)
PRUEBA