J'ai une page dans laquelle un en-tête se compose de trois divisions - une qui flottait à gauche, une qui flottait à droite et une qui se trouvait entre elles. J'aimerais que cette div centrale soit centrée, mais malheureusement float: center
n'existe pas et je ne peux pas simplement le faire flotter vers la gauche et ajouter du rembourrage car il devrait changer en fonction de la taille de la fenêtre.
Y a-t-il quelque chose de simple que j'oublie? Ou comment ferais-je une telle chose?
Mise à jour:
De plus, j'aimerais trouver un moyen de centrer ce div moyen dans l'espace entre les divs au cas où ça a l'air mieux.
Si vous avez deux div flottants, vous connaissez les marges. Le problème est que le float:right
div doit être placé avant le div du milieu. Donc, fondamentalement, vous aurez:
flottant à gauche | flottant à droite | centré
Maintenant, à propos des marges: généralement, vous pouvez simplement utiliser margin:0 auto
, droite? Le problème est qu'en ce moment vous connaissez les valeurs des marges: div flottés! Il vous suffit donc d'utiliser:
margin:0 right-floated-width 0 left-floated-width
Cela devrait fonctionner.
Pendant ce temps, un nouveau jouet est en ville: la flexbox. Le support est assez bon (c'est-à-dire si vous n'avez pas besoin d'un support inférieur à IE 10) et la facilité d'utilisation est bien au-dessus des flottants.
Vous pouvez voir un très bon flexbox guide ici . L'exemple dont vous avez besoin est juste ici .
En effet, l'important est que les div centrés viennent après les divs gauche et droit dans le balisage. Découvrez cet exemple, il utilise margin-left: auto
et margin-right: auto
sur la div centrée, ce qui la fait centrer.
<html>
<head>
<style type="text/css">
#left
{
float: left;
border: solid 1px red;
}
#mid
{
margin-left: auto;
margin-right: auto;
border: solid 1px red;
}
#right
{
float: right;
border: solid 1px red;
}
</style>
</head>
<body>
<div id="left">
left
</div>
<div id="right">
right
</div>
<div id="mid">
mid
</div>
</body>
</html>
Voici un JS Bin à tester: http://jsbin.com/agewes/1/edit
Habituellement, vous pouvez utiliser flexbox au lieu de flottants:
https://jsfiddle.net/h0zaf4Lp/
HTML:
<div class="container">
<div>left</div>
<div class="center">center</div>
<div>right</div>
</div>
CSS:
.container {
display: flex;
}
.center {
flex-grow: 1;
}
L'élément avec le contenu centré doit être spécifié après les deux éléments flottants. Après cela, définissez simplement l'élément central sur text-align: center
. Le texte dans l'élément centré se coincera entre les flottants.
Voir ici: http://jsfiddle.net/calvintennant/wjjeR/
Essayez ceci (assurez-vous d'utiliser de meilleurs noms de classe):
.left {
float:left;
width:200px;
}
.right{
float:right;
width:200px;
}
.center {
overflow:hidden;
zoom:1;
}
Le div central s'insérera entre les deux flotteurs.
Si vous voulez créer une gouttière entre cette div centrée et les deux flotteurs, utilisez la marge sur les flotteurs, pas sur la div centrale.
En raison du "zoom", le CSS ne sera pas validé, mais cette mise en page fonctionnera en IE 5.5 et 6.
Notez que l'ordre source est important ici: les deux flotteurs doivent venir en premier, puis votre div "centré".
Dans certains cas, vous avez une limitation et ne pouvez pas modifier le balisage de page en déplaçant le div du milieu après le div flottant à droite. Dans ce cas, suivez ces instructions:
position: relative
position: absolute; left: [containerWidth - middle-width / 2]
J'espère que vous avez eu l'idée.