Com base na sugestão original da sua sugestão (definindo margens negativas), tentei criar um método semelhante usando unidades de porcentagem para a largura dinâmica do navegador:
HTML
<div class="grandparent">
<div class="parent">
<div class="child">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolore neque repellat ipsum natus magni soluta explicabo architecto, molestias laboriosam rerum. Tempore eos labore temporibus alias necessitatibus illum enim, est harum perspiciatis, sit, totam earum corrupti placeat architecto aut minus dignissimos mollitia asperiores sint ea. Libero hic laudantium, ipsam nostrum earum distinctio. Cum expedita, ratione, accusamus dicta similique distinctio est dolore assumenda soluta dolorem quisquam ex possimus aliquid provident quo? Enim tempora quo cupiditate eveniet aperiam.</p>
</div>
</div>
</div>
CSS:
.child-div{
margin: 0 -100%;
padding: 0 -100%;
}
.parent {
width: 60%;
background-color: red;
margin: 0 auto;
padding: 50px;
position:relative;
}
.grandparent {
overflow-x:hidden;
background-color: blue;
width: 100%;
position:relative;
}
As margens negativas deixarão o conteúdo fluir da DIV principal. Portanto, defini padding: 0 100%;
o botão para empurrar o conteúdo de volta aos limites originais do Chlid DIV.
As margens negativas também farão com que a largura total do .child-div se expanda para fora da janela de exibição do navegador, resultando em uma rolagem horizontal. Portanto, precisamos cortar a largura da extrusão aplicando um overflow-x: hidden
a um DIV dos avós (que é o pai da divisão dos pais):
Aqui está o JSfiddle
Já experimentei o de Nils Kaspersson left: calc(-50vw + 50%)
; funcionou perfeitamente no Chrome e no FF (ainda não tenho certeza sobre o IE) até descobrir que os navegadores Safari não o fazem corretamente. Espero que eles tenham resolvido isso assim que eu realmente gosto desse método simples.
Isso também pode resolver o problema em que o elemento Parent DIV deve ser position:relative
As 2 desvantagens deste método de solução alternativa são:
- Exigir marcação extra (ou seja, um elemento de avô (assim como o bom e velho método de alinhamento vertical da tabela, não é ...)
- As margens esquerda e direita do Child DIV nunca serão exibidas, simplesmente porque estão fora da janela de exibição do navegador.
Informe-me se houver algum problema com esse método;). Espero que ajude.
position: relative
? Para que você precisaposition: relative
? Acho que estou perguntando: o que você está tentando fazer?