Eu tenho um site com a seguinte estrutura:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
A navegação está à esquerda e a divisão de conteúdo está à direita. As informações para a div de conteúdo são extraídas através do PHP, por isso são sempre diferentes.
Como posso dimensionar a navegação verticalmente para que sua altura seja igual à altura da div do conteúdo, independentemente da página carregada?
display: flex; align-items: stretch;
o div # main. E não usarheight: 100%
para div conteúdo #Respostas:
NOTA : Esta resposta é aplicável a navegadores herdados sem suporte para o padrão Flexbox. Para uma abordagem moderna, consulte: https://stackoverflow.com/a/23300532/1155721
Sugiro que você dê uma olhada nas colunas de altura igual com CSS no navegador cruzado e sem hack .
Basicamente, fazer isso com CSS de maneira compatível com o navegador não é trivial (mas trivial com tabelas); portanto, encontre uma solução pré-empacotada apropriada.
Além disso, a resposta varia se você deseja 100% de altura ou altura igual. Geralmente é igual altura. Se tiver 100% de altura, a resposta é um pouco diferente.
fonte
border:1px solid blue
por exemplocontainer2
: on : a borda azul fica nas duas primeiras colunas, não na segunda coluna apenas como você esperaria.display:table
Para o pai:
Você deve adicionar alguns prefixos, http://css-tricks.com/using-flexbox/ .
Edit: Como observou @Adam Garner, align-items: stretch; Não é necessário. Seu uso também é para pais, não para filhos. Se você deseja definir o alongamento das crianças, use o self de alinhamento.
fonte
align-items: center
o item que você precisa para necessidades estiramentoalign-self: normal
Esse é um problema frustrante que é tratado com designers o tempo todo. O truque é que você precisa definir a altura para 100% em BODY e HTML em seu CSS.
Esse código aparentemente sem sentido é definir para o navegador o que significa 100%. Frustrante, sim, mas é a maneira mais simples.
fonte
html { height: 100%; } body { height: 98%; }
.Acho que definir as duas colunas em
display: table-cell;
vez defloat: left;
funciona bem.fonte
Se você não se importa com o div de navegação sendo cortado no caso de um div de conteúdo inesperadamente curto, há pelo menos uma maneira fácil:
Caso contrário, há a técnica de colunas falsas .
fonte
fonte
usando jQuery:
fonte
Math.max()
seria seu amigo aqui.css
função do JQuery , você não pode diferenciar entre tela e mídia de impressão, como costuma fazer ao usar soluções CSS puras. Portanto, você pode ter problemas de impressão.Tente fazer a margem inferior 100%.
fonte
Veja este exemplo .
fonte
height: 100%
mas acabou que não era necessário.height : <percent>
funcionará apenas se você tiver todos os nós principais com uma porcentagem de altura especificada e uma altura fixa em pixels, ems etc. no nível superior. Dessa forma, a altura cairá em cascata até o seu elemento.Você pode especificar 100% para html e elementos do corpo, como o @Travis afirmou anteriormente, para que a altura da página desça em cascata nos seus nós.
fonte
Após longa pesquisa e tentativa, nada resolveu meu problema, exceto
nas crianças div
e para pai aplicar isso
Além disso, estou usando o bootstrap e isso não corrompeu o responsivo para mim.
fonte
flex-direction: column;
para que isso funcionasse para mim.Com base no método descrito neste artigo , criei a. Menos solução dinâmica:
Html:
Menos:
fonte
Adicionar
display: grid
ao paifonte
Eu sei que já faz muito tempo desde que a pergunta foi feita, mas achei uma solução fácil e achei que alguém poderia usá-la (desculpe pelo inglês ruim). Aqui vai:
CSS
HTML
Exemplo simples. Observe que você pode se transformar em capacidade de resposta.
fonte
Minha solução:
fonte
Existe um pouco de contradição no título e no conteúdo da pergunta. O título fala de uma div pai, mas a pergunta faz parecer que você deseja que duas divs irmãos (navegação e conteúdo) tenham a mesma altura.
Você (a) deseja que a navegação e o conteúdo tenham 100% da altura do principal ou (b) deseja que a navegação e o conteúdo tenham a mesma altura?
Eu assumo (b) ... se é assim, acho que você não será capaz de fazê-lo, dada sua estrutura de página atual (pelo menos, não com CSS puro e sem scripts). Você provavelmente precisaria fazer algo como:
e defina a div de conteúdo para ter uma margem esquerda, independentemente da largura do painel de navegação. Dessa forma, o conteúdo do conteúdo fica à direita da navegação e você pode definir a div de navegação como 100% da altura do conteúdo.
EDIT: Estou fazendo isso completamente na minha cabeça, mas você provavelmente também precisará definir a margem esquerda da div de navegação para um valor negativo ou definir sua esquerda absoluta para 0 para empurrá-la de volta para a extrema esquerda. O problema é que existem muitas maneiras de fazer isso, mas nem todas serão compatíveis com todos os navegadores.
fonte
[Referindo-se ao código Menos de Dmity em outra resposta] Estou supondo que isso seja algum tipo de "pseudo-código"?
Pelo que entendi, tente usar a técnica de colunas falsas que deve resolver o problema.
http://www.alistapart.com/articles/fauxcolumns/
Espero que isto ajude :)
fonte
fonte
dando
position: absolute;
para a criança trabalhou no meu casofonte
Você usa CSS Flexbox
fonte
Essa resposta não é mais ideal, já que a CSS flexbox e grade foram implementadas no CSS. No entanto, ainda é uma solução funcional
Em uma tela menor, você provavelmente desejaria manter a altura automática, pois as colunas col1, col2 e col3 são empilhadas uma sobre a outra.
No entanto, após um ponto de interrupção da consulta à mídia, você deseja que as colunas apareçam próximas uma da outra com uma altura igual para todas as colunas.
1125 px é apenas um exemplo de ponto de interrupção da largura da janela, após o qual você deseja definir todas as colunas com a mesma altura.
Obviamente, você poderia definir mais pontos de interrupção, se necessário.
fonte
Eu tive o mesmo problema, funcionou com base na resposta de Hakam Fostok, criei um pequeno exemplo; em alguns casos, ele pode funcionar sem precisar adicionar
display: flex;
eflex-direction: column;
no contêiner paiJSFiddle
fonte
Como mostrado anteriormente, o flexbox é o mais fácil. por exemplo.
isso alinhará todos os elementos filhos ao centro dentro do elemento pai.
fonte
De:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
afirma o bootstrap, mas você não precisa do bootstrap para usá-lo. Responder a essa pergunta antiga, pois funcionou para mim, e parece bastante fácil de implementar.
Esta foi a mesma resposta que forneci a esta pergunta
fonte
Aqui, uma demonstração de moda antiga baseada no
position: absolute
contêiner de conteúdo eposition: relative
no contêiner pai.Quanto à maneira moderna de fazer isso - as caixas flex são as melhores.
fonte
A maneira mais fácil de fazer isso é fingir. A List Apart cobriu isso extensivamente ao longo dos anos, como neste artigo de Dan Cederholm de 2004 .
Aqui está como eu costumo fazer isso:
É possível adicionar facilmente um cabeçalho a esse design, envolvendo #container em outra div, incorporando a div do cabeçalho como # irmão do contêiner e movendo os estilos de margem e largura para o contêiner pai. Além disso, o CSS deve ser movido para um arquivo separado e não mantido em linha etc. etc. Finalmente, a classe clearfix pode ser encontrada em positioniseverthing .
fonte