Eu tenho a estrutura da página como:
<div class="parent">
<div class="child-left floatLeft">
</div>
<div class="child-right floatLeft">
</div>
</div>
Agora, o child-left
DIV terá mais conteúdo, portanto a parent
altura do DIV aumenta conforme o DIV filho.
Mas o problema é que a child-right
altura não está aumentando. Como posso fazer sua altura igual à sua mãe?
Respostas:
Para o
parent
elemento, adicione as seguintes propriedades:então para
.child-right
estes:Encontre resultados mais detalhados com exemplos de CSS aqui e mais informações sobre colunas de altura igual aqui .
fonte
Uma solução comum para esse problema usa posicionamento absoluto ou flutuadores cortados, mas estes são complicados, pois exigem um ajuste extensivo se as colunas mudarem de número + tamanho e você precisa garantir que a coluna "principal" seja sempre a mais longa. Em vez disso, sugiro que você use uma das três soluções mais robustas:
display: flex
: de longe a solução mais simples e melhor e muito flexível - mas não suportada pelo IE9 e versões anteriores.table
oudisplay: table
: muito simples, muito compatível (praticamente todos os navegadores de todos os tempos), bastante flexível.display: inline-block; width:50%
com um corte de margem negativo: bastante simples, mas as bordas na parte inferior da coluna são um pouco complicadas.1
display:flex
Isso é realmente simples e fácil de se adaptar a layouts mais complexos ou mais detalhados - mas o flexbox é suportado apenas pelo IE10 ou posterior (além de outros navegadores modernos).
Exemplo: http://output.jsbin.com/hetunujuma/1
Html relevante:
CSS relevante:
O Flexbox oferece suporte para muito mais opções, mas para ter simplesmente qualquer número de colunas, as opções acima são suficientes!
2.
<table>
oudisplay: table
Uma maneira simples e extremamente compatível de fazer isso é usar um
table
- eu recomendo que você tente primeiro se precisar de suporte do IE antigo . Você está lidando com colunas; divs + floats simplesmente não são a melhor maneira de fazer isso (sem mencionar o fato de que vários níveis de divs aninhados apenas para contornar as limitações de css são dificilmente mais "semânticos" do que apenas usar uma tabela simples). Se você não deseja usar otable
elemento, considere cssdisplay: table
(não suportado pelo IE7 e mais antigo).Exemplo: http://jsfiddle.net/emn13/7FFp3/
HTML relevante: (mas considere usar um simples
<table>
)CSS relevante:
Essa abordagem é muito mais robusta do que usar
overflow:hidden
com flutuadores. Você pode adicionar praticamente qualquer número de colunas; você pode dimensioná- los automaticamente, se quiser; e você mantém a compatibilidade com navegadores antigos. Diferentemente da solução flutuante requer, você também não precisa saber de antemão qual coluna é mais longa; a altura escala muito bem.BEIJO: não use hacks flutuantes, a menos que você precise especificamente. Se o IE7 for um problema, eu ainda escolheria uma tabela simples com colunas semânticas em vez de uma solução CSS de truque difícil de manter e menos flexível a qualquer dia.
A propósito, se você precisar que seu layout seja responsivo (por exemplo, sem colunas em telefones celulares pequenos), poderá usar uma
@media
consulta para retornar ao layout de bloco simples para pequenas larguras de tela - isso funciona se você usa<table>
ou qualquer outrodisplay: table
elemento.3.
display:inline block
com uma margem negativa hack.Outra alternativa é usar
display:inline block
.Exemplo: http://jsbin.com/ovuqes/2/edit
HTML relevante: (a ausência de espaços entre as
div
tags é significativa!)CSS relevante:
Isso é um pouco complicado, e a margem negativa significa que a parte inferior "verdadeira" das colunas está obscurecida. Por sua vez, isso significa que você não pode posicionar nada em relação à parte inferior dessas colunas, porque isso é cortado
overflow: hidden
. Observe que, além dos blocos embutidos, você pode obter um efeito semelhante com os flutuadores.TL; DR : use flexbox se você puder ignorar o IE9 e mais antigo; caso contrário, tente uma tabela (css). Se nenhuma dessas opções funcionar para você, há invasões de margem negativa, mas elas podem causar problemas estranhos de exibição que são fáceis de serem perdidos durante o desenvolvimento e existem limitações de layout que você precisa conhecer.
fonte
border-spacing:10px;
no elemento da tabela introduzirá espaçamento semelhante a margem. Como alternativa, você pode adicionar colunas extras (vazias) nas quais deseja espaço extra. E você também pode adicionar preenchimento dentro das células da tabela; esse preenchimento será incluído no plano de fundo, portanto, pode não ser o que você deseja. Mas você está certo que não é tão flexível quanto uma margem normal. E você não pode posicionar nada em relação às colunas, o que pode ser um problema.Para o pai:
Para crianças:
Você deve adicionar alguns prefixos, verifique caniuse.
fonte
Encontrei muitas respostas, mas provavelmente a melhor solução para mim é
Você pode verificar outras soluções aqui http://css-tricks.com/fluid-width-equal-height-columns/
fonte
Por favor, defina div pai como
overflow: hidden
divs filho. Você pode definir uma grande quantia para o fundo do preenchimento. por exemplo,
padding-bottom: 5000px
então
margin-bottom: -5000px
e então todos os divs filhos terão a altura do pai.
Claro que isso não funcionará se você estiver tentando colocar conteúdo na div pai (fora de outras divs)
Exemplo: http://jsfiddle.net/Tareqdhk/DAFEC/
fonte
Os pais têm altura? Se você definir a altura dos pais dessa forma.
Então você pode fazer a criança esticar até a altura máxima dessa maneira.
EDITAR
Aqui está como você faria isso usando JavaScript.
fonte
A exibição da tabela CSS é ideal para isso:
Resposta original (supondo que qualquer coluna possa ser mais alta):
Você está tentando tornar a altura dos pais dependente da altura dos filhos e a altura dos filhos depende da altura dos pais. Não computará. As colunas CSS Faux são a melhor solução. Há mais de uma maneira de fazer isso. Prefiro não usar JavaScript.fonte
display: table
+display: table-cell
produzirá o resultado desejado.float
: stackoverflow.com/questions/20110217/…Recentemente, fiz isso no meu site usando jQuery. O código calcula a altura da div mais alta e define as outras divs para a mesma altura. Aqui está a técnica:
http://www.broken-links.com/2009/01/20/very-quick-equal-height-columns-in-jquery/
Não acredito
height:100%
que funcione, portanto, se você não conhece explicitamente as alturas de div, não acho que exista uma solução CSS pura.fonte
Eu usei isso para uma seção de comentários:
Você pode flutuar a criança-direita para a direita, mas, neste caso, calculei as larguras de cada div com precisão.
fonte
Se você está ciente do bootstrap, é possível fazê-lo facilmente usando a propriedade 'flex'. Tudo o que você precisa fazer é passar abaixo das propriedades css para parent div
Onde
.homepageSection
está o meu pai div? Agora adicione div filho no seu html comoonde abc é meu filho div. Você pode verificar a igualdade de altura em ambos filho div, independentemente da borda, apenas atribuindo borda ao filho div
fonte
Eu usei o estilo embutido apenas para dar uma idéia.
fonte
Eu aprendi desse truque em uma entrevista de estágio. A pergunta original é como garantir que a altura de cada componente superior em três colunas tenha a mesma altura que mostra todo o conteúdo disponível. Basicamente, crie um componente filho invisível que renderize a altura máxima possível.
fonte