Como colocar esses dois divs lado a lado?


110

Tenho dois divs que não estão aninhados, um abaixo do outro. Ambos estão dentro de um div pai e este div pai se repete. Então, essencialmente:

<div id='parent_div_1'>
  <div class='child_div_1'></div>
  <div class='child_div_2'></div>
</div>

<div id='parent_div_2'>
  <div class='child_div_1'></div>
  <div class='child_div_2'></div>
</div>

<div id='parent_div_3'>
  <div class='child_div_1'></div>
  <div class='child_div_2'></div>
</div>

Eu quero ficar cada par de child_div_1e child_div_2ao lado do outro. Como posso fazer isso?

Respostas:


82
#parent_div_1, #parent_div_2, #parent_div_3 {
  width: 100px;
  height: 100px;
  border: 1px solid red;
  margin-right: 10px;
  float: left;
}
.child_div_1 {
  float: left;
  margin-right: 5px;
}

Verifique o exemplo de trabalho em http://jsfiddle.net/c6242/1/


1
Ele quer os filhos div alinhados um ao lado do outro, não os pais (pelo menos foi o que eu entendi ...)
ehdv

4
Ainda acho display: table-cellque obterá resultados mais próximos do que ele quer dizer (já que então eles terão a mesma altura etc.), mas dessa forma certamente funcionará.
ehdv

@ehdv display: table-cellnão é compatível com o IE6 IE7. flutuar: esquerda; é a maneira correta de fazer isso.
Hussein,

Na verdade, a maneira correta de fazer isso no IE6,7 é com <tr><td>, porque qualquer outra opção será quebrada quando o usuário redimensionar a janela. Em navegadores modernos, display: inline-blockgeralmente é a melhor opção.
John Henckel

126

Uma vez que div's por padrão são blockelementos - o que significa que ocuparão toda a largura disponível, tente usar -

display:inline-block;

O divagora é renderizado em linha, isto é, não interrompe o fluxo de elementos, mas ainda será tratado como um elemento de bloco.

Acho essa técnica mais fácil do que lutar com floats.

Veja este tutorial para mais - http://learnlayout.com/inline-block.html . Eu recomendaria até os artigos anteriores que levaram a esse. (Não, eu não escrevi)


Gostei muito dessa solução. Meu único problema com isso é que alinha a parte inferior de ambos os divs em vez de alinhar a parte superior. Existe uma configuração rápida para isso também?
Chris

Eu sugeriria o uso de 2 invólucros de divaltura igual para que o conteúdo dentro deles parecesse estar alinhado no topo.
Robin Maben de

2
Concordo. Isso é muito melhor do que float:leftporque oferece muito mais opções sem redefinir todo o layout. As coisas "simplesmente funcionam" dessa maneira. Confira aqui: jsfiddle.net/SrAQd/4
Jerry

12
Para obter o alinhamento vertical, adicionaria "vertical-align: top;"
cdiggins

@Chris: Sim, concordo com cdiggins. Isso deve ajudá-lo.
Robin Maben

44

Achei o código abaixo muito útil, ele pode ajudar qualquer pessoa que vier pesquisar aqui

<html>
<body>
    <div style="width: 50%; height: 50%; background-color: green; float:left;">-</div>
    <div style="width: 50%; height: 50%; background-color: blue; float:right;">-</div>
    <div style="width: 100%; height: 50%; background-color: red; clear:both">-</div>
</body>
</html>






2

Usando o flexbox

   #parent_div_1{
     display:flex;
     flex-wrap: wrap;
  }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.