Eu tenho essas divs aninhadas e preciso que o contêiner principal seja expandido (em altura) para acomodar os DIVs internos
<!-- head -->
...
<!-- /head -->
<body class="main">
<div id="container">
<div id="header">
<!--series of divs in here, graphic banner etc. -->
</div>
<div id="main_content"> <!-- this DIV _should_ stretch to accommodate inner divs -->
<div id="items_list" class="items_list ui-sortable">
<div id="item_35" class="item_details">
</div>
<div id="item_36" class="item_details">
</div>
<div id="item_37" class="item_details">
</div>
<!-- this list of DIVs "item_xx" goes on for a while
each one representing a photo with name, caption etcetc -->
</div>
</div>
<br class="clear"/>
<div id="footer">
</div>
</body>
</html>
CSS é este:
* {
padding: 0;
margin: 0;
}
.main {
font: 100% Verdana, Arial, Helvetica, sans-serif;
background: #4c5462;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
.main #container {
height: auto;
width: 46em;
background: #4c5462;
margin: 0 auto;
border: 0px solid #000000;
text-align: left;
}
.main #main_content {
padding: 5px;
margin: 0px;
}
#items_list {
width: 400px;
float: left;
}
.items_list {
width: 400px;
float: left;
}
.item_details {
margin-top: 3px;
margin-bottom: 3px;
padding: 3px;
float: left;
border-bottom: 0.5px solid blue;
}
O problema que tenho é que #main_content
não se estende para acomodar todos os divs internos, com o resultado de que eles continuam indo no fundo.
Como posso resolver esse problema considerando o cenário acima?
<strong>Edited</strong>$Reason_for_revising_question...
Você pode precisar alterar o título da pergunta para refletir as alterações, se houver uma grande alteração ou adição em seu foco. =)div
tag comid='container'
. Isso pode causar alguns problemas..clear
classe. Você esqueceu ou está no seu código original? A.clear
aula sobre issobr
é muito importante, como @jennyfofenny menciona em sua resposta.Respostas:
Você precisa forçar a
clear:both
antes que a#main_content
div seja fechada. Eu provavelmente moveria o<br class="clear" />;
para a#main_content
div e definiria o CSS como:Atualização: Esta pergunta ainda recebe uma quantidade razoável de tráfego, então eu queria atualizar a resposta com uma alternativa moderna usando um novo modo de layout no CSS3 chamado Caixas flexíveis ou Flexbox :
Atualmente, a maioria dos navegadores modernos oferece suporte a unidades Flexbox e viewport , mas se você precisar manter o suporte a navegadores mais antigos, verifique a compatibilidade da versão específica do navegador.
fonte
Tente o seguinte:
overflow: auto;
Funcionou para o meu problema ..
fonte
display: block;
com ele #adicione o seguinte:
para sua div principal. Elimina a necessidade de extra
<br />
para limpar.fonte
como uma maneira alternativa, você também pode tentar isso que pode ser útil em algumas situações
jsFiddle
fonte
Eu usaria apenas
na sua div. Sim, eu sei que estou um pouco atrasado, mas achei que isso poderia ajudar alguém como se tivesse me ajudado se estivesse aqui.
fonte
height: auto;
faz com que todos os itens abaixo sejam movidos para o topo. Com essa propriedade na minha div principal de conteúdo, o rodapé da minha página se move para cima, de modo que toque o cabeçalho e se sobreponha à minha div de conteúdo.O seguinte deve funcionar:
fonte
Maneira muito simples
No DIV pai:
height: 100%;
Este trabalho para mim todas as vezes
fonte
Use a tag span com
display:inline-block
css anexado a ela. Você pode usar CSS e manipulá-lo como uma div de várias maneiras, mas se você não incluir umawidth
ouheight
ela se expande e se retrai com base em seu conteúdo.Espero que ajude.
fonte
div
(em vez de aspan
), masdisplay: inline-block
ainda funcionava no meu caso (Chromium).Normalmente, acho que isso pode ser resolvido forçando uma
clear:both
regra no último elemento filho do#items_list
.Você pode usar:
Ou, se você estiver usando uma linguagem dinâmica, adicione uma classe adicional ao último elemento gerado em qualquer loop que criar a própria lista, para que você acabe com algo em seu html como:
e css
fonte
Esse problema surge quando os elementos filho de uma div principal são flutuados. Aqui está a solução mais recente do problema:
No seu arquivo CSS, escreva a seguinte classe chamada .clearfix junto com o pseudo-seletor : depois
Em seguida, no seu HTML, adicione a classe .clearfix ao seu div. Por exemplo:
Deve funcionar sempre. Você pode chamar o nome da classe como .group vez de .clearfix , uma vez que irá tornar o código mais semântico. Observe que, não é necessário adicionar o ponto ou mesmo um espaço no valor do conteúdo entre aspas duplas "". Além disso, estouro: auto;pode resolver o problema, mas causa outros problemas, como mostrar a barra de rolagem, e não é recomendado.
Fonte: Blog de Lisa Catalano e Chris Coyier
fonte
adicione uma propriedade float à
#main_content
div - ela será expandida para conter seu conteúdo flutuantefonte
Antes de fazer qualquer coisa, verifique as regras de css com:
Remova se existir e não precisa deles.
fonte
Elementos flutuantes não ocupam o espaço dentro do elemento pai, como o nome sugere, eles flutuam! Assim, se uma altura não for explicitamente fornecida a um elemento com seus elementos filhos flutuados, o elemento pai parecerá encolher e parecerá não aceitar as dimensões do elemento filho, também se
overflow:hidden;
seus filhos dados possam não aparecer na tela. Existem várias maneiras de lidar com esse problema:Insira outro elemento abaixo do elemento flutuante com a
clear:both;
propriedade ou useclear:both;
on:after
do elemento flutuante.Use
display:inline-block;
ou emflex-box
vez defloat
.fonte
Parece que isso funciona
O tamanho da tela é mínimo e, se o conteúdo for expandido, ele aumentará.
fonte
Em CSS:
#clear_div{clear:both;}
Após a tag div da div interna, adicione esta nova div a seguir
http://www.w3schools.com/cssref/pr_class_clear.asp : para mais informações
fonte
Adicionei o Bootstrap a um projeto com
section
tags que eu havia definido como 100% da altura da tela. Funcionou bem até que eu fiz o projeto ágil, altura em que eu emprestado parte de jennyfofenny 's resposta para que o segundo plano da seção correspondesse ao segundo plano do conteúdo quando o tamanho da tela mudou em telas menores.Meu novo
section
CSS fica assim:Digamos que você tenha uma seção com uma determinada cor. Ao usar
min-height
, se a largura da seção diminuir por causa de uma tela menor, a altura da seção será expandida, o conteúdo permanecerá dentro da seção e o plano de fundo permanecerá na cor desejada.fonte
Você já tentou da maneira tradicional? dê a altura do recipiente principal: auto
Eu usei isso e funcionou na maioria das vezes comigo.
fonte
Eu mesmo estou enfrentando isso em um projeto - eu tinha uma tabela dentro de uma div que estava saindo do fundo da div. Nenhuma das correções de altura que tentei funcionou, mas achei uma correção estranha para isso, e é colocar um parágrafo na parte inferior da div com apenas um ponto nela. Em seguida, estilize a "cor" do texto para ser a mesma do plano de fundo do contêiner. Trabalhou limpo como quiser e não é necessário javascript. Um espaço sem quebra não funcionará - nem uma imagem transparente.
Aparentemente, ele só precisava ver que havia algum conteúdo abaixo da tabela para esticar para contê-lo. Gostaria de saber se isso vai funcionar para mais alguém.
Esse é o tipo de coisa que faz os designers recorrerem a layouts baseados em tabelas - a quantidade de tempo que gastei descobrindo essas coisas e tornando-as compatíveis com vários navegadores está me deixando louco.
fonte
Eu tentei isso e funcionou
fonte
Se você estiver usando a interface do usuário do jQuery, eles já terão uma classe. Funciona apenas como um charme. Adicione um
<div>
na parte inferior dentro da div com a qual você deseja expandirheight:auto;
e adicione um nome de classe ui-helper-clearfix ou use esse atributo de estilo e adicione como abaixo :adicione a classe da interface do usuário do jQuery à div clara, não à div que você deseja expandir.
fonte
Eu sei que esse é um tipo de discussão antiga, no entanto, isso pode ser alcançado com
min-height
propriedade CSS de uma maneira limpa, então deixarei isso aqui para futuras referências:Eu fiz um violino com base no código publicado do OP aqui: http://jsfiddle.net/U5x4T/1/ , ao remover e adicionar divs dentro, você notará como o contêiner se expande ou reduz em tamanho
As únicas duas coisas que você precisa para conseguir isso, além do código OP, são:
* Estouro no contêiner principal (necessário para os divs flutuantes)
* propriedade css min-height, mais informações disponíveis aqui: http://www.w3schools.com/cssref/pr_dim_min-height.asp
fonte
Exibição adicionada: em linha com a div e ela cresceu automaticamente (e não o material de rolagem) quando o conteúdo da altura ficou maior que a altura da div definida de 200px
fonte
Você pode usar o CSS Grid Layout . O suporte é bastante amplo no momento: verifique em caniuse .
Aqui está o exemplo no jsfiddle. Também exemplo com toneladas de material de texto.
Código HTML:
Código CSS:
fonte
Tentei praticamente todas as sugestões listadas acima e nenhuma delas funcionou. No entanto, "display: table" fez o truque para mim.
fonte
Não é necessário usar muito CSS, basta usar o bootstrap e, em seguida, usar:
para a div que precisa ser preenchida.
Você pode obter o bootstrap aqui
fonte