um centro de duas divs irmãos
Pergunta
A seguir, eu gostaria de alterar o CSS de modo que o right-sibling
é realmente centrado na div container
. (Editar: sem o uso de posicionamento absoluto).
<html>
<head>
<style type='text/css'>
#container {
width: 500px;
}
#left-sibling {
float: left;
}
#right-sibling {
text-align: center;
}
</style>
</head>
<body>
<div id='container'>
<div id='left-sibling'>Spam</div>
<div id='right-sibling'>Eggs</div>
</div>
</body>
</html>
Na sua implementação atual, centralização do irmão direito é afetado pelo irmão esquerda -. Você pode ver isso adicionando display: none
ao estilo do left-sibling
(Nota: Eu gostaria de evitar modificar a estrutura HTML, porque, como eu o entendo, todo o ponto de CSS é dissociar a estrutura tag da lógica de apresentação, e este não parece ser um pedido muito louco para CSS de manusear.)
TIA.
Solução
Um truque que eu usei apenas para chegar a este trabalho é ter estofo à esquerda do recipiente e podemos incentivar o irmão deixou para sentar dentro deste espaço, dando-lhe uma margem igual, mas negativo.
Para completar o quadro também colocar preenchimento à direita do recipiente de um tamanho igual à largura da-irmão esquerda.
<html>
<head>
<style type='text/css'>
#container {
width: 500px;
padding-left:50px;
padding-right:50px;
}
#left-sibling {
border: solid 1px #000;
float: left;
width:50px;
margin-left:-50px;
}
#right-sibling {
border: solid 1px #000;
text-align: center;
}
#container2 {
width: 500px;
}
</style>
</head>
<body>
<div id='container'>
<div id='left-sibling'>Spam</div>
<div id='right-sibling'>Eggs<br />Eggs<br />Eggs<br /></div>
</div>
<div id='container'>
<div id='left-sibling' style="display:none;">Spam</div>
<div id='right-sibling'>Eggs<br />Eggs<br />Eggs<br /></div>
</div>
<div id='container2'>
<div id='right-sibling'>Eggs<br />Eggs<br />Eggs<br /></div>
</div>
</body>
</html>
Outras dicas
Tente configurar uma largura para o irmão à esquerda e um igual padding-right: para o irmão direito
como assim
<html>
<head>
<style type='text/css'>
#container {
width: 500px;
}
#left-sibling {
float: left;
width:50px;
}
#right-sibling {
text-align: center;
padding-right:50px;
}
</style>
</head>
<body>
<div id='container'>
<div id='left-sibling'>Spam</div>
<div id='right-sibling'>Eggs</div>
</div>
</body>
</html>
Você pode alterar a float: left;
em #left-sibling
para position: absolute;
.
Isto irá levá-lo para fora do fluxo normal, por isso não vai afetar irmão-direita mais.
É claro que isso pode ter outros efeitos colaterais com o seu design.
Você deve sempre definir uma largura em elementos flutuantes, caso contrário as coisas ficam estranhas:)
Se você colocar um
border: solid 1px #000;
regra em ambos os divs você vai ver o que está acontecendo - a div #-irmão direita está enchendo toda a largura da div pai (#container), portanto, embora o texto é realmente alinhado ao centro , parece que não é!
Os controlos atributo de texto-align o alinhamento dos conteúdos do recipiente em que o atributo é aplicado. Ao adicionar os seguintes estilos é fácil de ver:
#left-sibling { float: left; width:100px; border:1px Solid Blue; }
#right-sibling { text-align: center; width:100px; border:1px Solid Red; }
Eu gostaria de sugerir a adição de um tipo de documento para o documento para evitar quirksmode
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
e os seguintes estilos:
#container { width: 500px; position:relative; border:1px Solid Black; }
#left-sibling { float:left; position:absolute; top:0px; left:0px; width:100px; border:1px Solid Blue; }
#right-sibling { width:100px; position:relative; margin-left:auto; margin-right:auto; border:1px Solid Red; }
Você seria, naturalmente deseja ajustar o tamanho dos irmãos para atender às suas necessidades. As fronteiras faz um bom trabalho mostrando o que realmente está acontecendo.