Como você pode ver no CSS abaixo, quero child2
me posicionar antes child1
. Isso ocorre porque o site que estou desenvolvendo no momento também deve funcionar em dispositivos móveis, nos quais child2
deve estar na parte inferior, pois contém a navegação desejada abaixo do conteúdo dos dispositivos móveis. - Por que não 2 páginas-mestre? Estes são os únicos 2 divs
que são reposicionados em todo o HTML, portanto, 2 páginas-mestre dessa pequena alteração são um exagero.
HTML:
<div id="parent">
<div class="child1"></div>
<div class="child2"></div>
</div>
CSS:
parent { position: relative; width: 100%; }
child1 { width: auto; margin-left: 160px; }
child2 { width: 145px; position: absolute; top: 0px; bottom: 0px; }
child2
possui altura dinâmica, pois subsites diferentes podem ter mais ou menos itens de navegação.
Eu sei que elementos posicionados absolutos são removidos do fluxo, sendo ignorados por outros elementos.
Eu tentei definir overflow:hidden;
a div pai, mas isso não ajudou, nem o clearfix
.
Meu último recurso será o JavaScript para reposicionar os dois de divs
acordo, mas, por enquanto, tentarei ver se existe uma maneira não-JavaScript de fazer isso.
fonte
Respostas:
Você respondeu a pergunta por si mesmo: "Eu sei que elementos posicionados absolutos são removidos do fluxo, sendo ignorados por outros elementos". Portanto, você não pode definir a altura dos pais de acordo com um elemento absolutamente posicionado.
Você usa alturas fixas ou precisa envolver o JS.
fonte
Embora
position: absolute
não seja possível esticar para elementos com , muitas vezes existem soluções nas quais você pode evitar o posicionamento absoluto enquanto obtém o mesmo efeito. Veja este violino que resolve o problema no seu caso específico http://jsfiddle.net/gS9q7/O truque é reverter a ordem dos elementos flutuando os dois elementos, o primeiro para a direita, o segundo para a esquerda, para que o segundo apareça primeiro.
Por fim, adicione uma correção clara aos pais e pronto (veja o violão para a solução completa).
Geralmente, desde que o elemento com posição absoluta esteja posicionado na parte superior do elemento pai, é bem provável que você encontre uma solução alternativa ao flutuar o elemento.
fonte
Feeela está certa, mas você pode obter um pai
div
contratando / expandindo para um elemento filho se você reverter seudiv
posicionamento assim:Isso deve funcionar para você.
fonte
Existe uma maneira bastante simples de resolver isso.
Você apenas precisa duplicar o conteúdo de child1 e child2 em divs relativos com display: none na div pai. Diga filho1_1 e filho2_2. Coloque child2_2 em cima e child1_1 na parte inferior.
Quando seu jquery (ou o que for) chama a div absoluta, basta definir a div relativa correspondente (child1_1 ou child2_2) com display: block AND visibilidade: hidden. O filho relativo ainda estará invisível, mas aumentará a divisão dos pais.
fonte
Com JavaScript puro, você só precisa recuperar a altura do
static position
elemento filho.child1
usando o método getComputedStyle () e defina esse valor de recuperação como opadding-top
mesmo filho usando a propriedade HTMLElement.style .Verifique e execute o seguinte snippet de código para obter um exemplo prático do que descrevi acima:
fonte
Esta pergunta foi feita em 2012 antes da flexbox. A maneira correta de resolver esse problema usando CSS moderno é com uma consulta de mídia e uma reversão de coluna flexível para dispositivos móveis. Nenhum posicionamento absoluto é necessário.
https://jsfiddle.net/tnhsaesop/vjftq198/3/
HTML:
CSS:
fonte
Eu tive um problema parecido. Para resolver isso (em vez de calcular a altura do iframe usando o corpo, documento ou janela), criei uma div que agrupa todo o conteúdo da página (uma div com um id = "página" por exemplo) e depois usei sua altura.
fonte
Eu vim com outra solução, que eu não amo, mas faz o trabalho.
Duplique basicamente os elementos filhos de maneira que as duplicatas não sejam visíveis.
CSS:
Se esses elementos filhos contiverem pouca marcação, o impacto será pequeno.
fonte
Aqui está o exemplo JS:
---------- Exemplo jQuery JS --------------------
fonte
Há um hack muito simples que corrige esse problema
Aqui está uma caixa de código que ilustra a solução: https://codesandbox.io/s/00w06z1n5l
HTML
CSS
você pode brincar com o posicionamento da div hack para afetar onde a criança se posiciona.
Aqui está um trecho:
fonte
Existe uma maneira melhor de fazer isso agora. Você pode usar a propriedade bottom.
fonte
Isso é muito semelhante ao que o @ChrisC sugeriu. Não está usando um elemento posicionado absoluto, mas um elemento relativo. Talvez possa trabalhar para você
E seu css assim:
https://jsfiddle.net/royriojas/dndjwa6t/
fonte
Considere também a próxima abordagem:
CSS:
Além disso, como você está tentando reposicionar divs, considere a grade css
fonte
As vistas absolutas se posicionam contra o ancestral mais próximo que não está estaticamente posicionado (
position: static
); portanto, se você quiser uma vista absoluta posicionada contra um determinado pai, defina o paiposition
comorelative
e o filhoposition
comoabsolute
fonte
Tente isso, foi trabalhado para mim
Ele definirá a altura do filho como a altura do pai
fonte