Sim, de acordo com as especificações, existe um caminho.
Enquanto eu concordo que Graeme Blackwood deve ser a resposta aceita, porque praticamente resolve o problema, note-se que um elemento fixo pode ser posicionado relativamente ao seu contêiner.
Notei por acidente que, ao aplicar
-webkit-transform: translateZ(0);
para o corpo, ele criou um filho fixo em relação a ele (em vez da janela de exibição). Portanto, meus elementos left
e top
propriedades fixos agora eram relativos ao contêiner.
Então, fiz uma pesquisa e descobri que o problema já havia sido coberto por Eric Meyer e, mesmo que parecesse um "truque", verifica-se que isso faz parte das especificações:
Para elementos cujo layout é governado pelo modelo de caixa CSS, qualquer valor diferente de nenhum para a transformação resulta na criação de um contexto de empilhamento e de um bloco contendo. O objeto atua como um bloco de contenção para descendentes posicionados fixos.
http://www.w3.org/TR/css3-transforms/
Portanto, se você aplicar alguma transformação a um elemento pai, ele se tornará o bloco que contém.
Mas...
O problema é que a implementação parece defeituosa / criativa, porque os elementos também param de se comportar como corrigidos (mesmo que esse bit não pareça fazer parte da especificação).
O mesmo comportamento será encontrado no Safari, Chrome e Firefox, mas não no IE11 (onde o elemento fixo ainda permanecerá fixo).
Outra coisa interessante (não documentada) é que quando um elemento fixo está contido dentro de um elemento transformado, enquanto suas propriedades top
e left
agora estarão relacionadas ao contêiner, respeitando a box-sizing
propriedade, seu contexto de rolagem se estenderá sobre a borda do elemento, como se a caixa -sizing foi definido como border-box
. Para alguns criativos por aí, isso pode se tornar um brinquedo :)
TESTE