Por alguma razão, meus divs não centralizam horizontalmente em um div que o contém:
.row {
width: 100%;
margin: 0 auto;
}
.block {
width: 100px;
float: left;
}
<div class="row">
<div class="block">Lorem</div>
<div class="block">Ipsum</div>
<div class="block">Dolor</div>
</div>
E às vezes há uma linha div com apenas um bloco div nela. O que estou fazendo de errado?
Respostas:
Para conseguir o que você está tentando fazer:
Considere usar em
display: inline-block
vez defloat
.fonte
Experimente isto:
DEMO
Ter
margin: 0 auto;
junto comwidth: 100%
é inútil porque seu elemento ocupará todo o espaço.float: left
irá flutuar os elementos para a esquerda, até que não haja mais espaço, então eles irão em uma nova linha. Usedisplay: inline-block
para ser capaz de exibir elementos embutidos, mas com a capacidade de fornecer tamanho (ao contrário dedisplay: inline
onde largura / altura são ignoradas)fonte
Os alinhamentos em CSS foram um pesadelo. Felizmente, um novo padrão é introduzido pelo W3C em 2009: Caixa Flexível . Há um bom tutorial sobre isso aqui . Pessoalmente, acho muito mais lógico e fácil de entender do que outros métodos.
fonte
Usando FlexBox:
A tendência mais recente é usar Flex ou CSS Grid em vez de Float. No entanto, alguns navegadores de 1% ainda não suportam Flex. Mas quem realmente se importa com os usuários antigos do Internet Explorer;)
Fiddle: Verifique aqui
fonte
Outro exemplo de trabalho , usando
display: inline-block
etext-align: center
HTML :
CSS :
Fiddle: http://jsfiddle.net/fNvgS/
fonte
Embora não abordando esta questão (porque você deseja alinhar os
<div>
s dentro do contêiner), mas diretamente relacionado: se você quisesse alinhar apenas um div horizontalmente, você poderia fazer isso:fonte
Se os elementos devem ser exibidos em uma linha e o IE 6/7 não importa, considere usar
display: table
e emdisplay: table-cell
vez defloat
.inline-block
leva a lacunas horizontais entre os elementos e exige zerar essas lacunas. A maneira mais simples é definir ofont-size: 0
elemento pai e, em seguida, restaurarfont-size
os elementos filhodisplay: inline-block
configurando seu valorfont-size
para umpx
ourem
.fonte
Tentei a resposta aceita, mas acabei descobrindo que:
Funciona bem até agora.
fonte
Usei essas duas abordagens quando preciso lidar com o alinhamento horizontal de div.
primeiro ( Alinhamento ao centro usando a propriedade de margem ):
Definir as margens esquerda e direita como automáticas especifica que elas devem dividir a margem disponível igualmente. O alinhamento ao centro não tem efeito se a largura for 100%.
e o segundo:
Usar a segunda abordagem é conveniente quando você tem vários elementos e deseja que todos eles sejam centralizados em uma célula da tabela (ou seja, vários botões em uma célula).
fonte