Je veux avoir 3 div alignés à l'intérieur d'un conteneur div, quelque chose comme ceci:
[[LEFT] [CENTER] [RIGHT]]
Container div est 100% large (pas de largeur définie), et div div doit rester au centre après le redimensionnement du conteneur.
Alors j'ai mis:
#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}
Mais cela devient:
[[LEFT] [CENTER] ]
[RIGHT]
Des conseils?
Avec ce CSS, placez vos divs comme suit (les flotteurs en premier):
<div id="container">
<div id="left"></div>
<div id="right"></div>
<div id="center"></div>
</div>
P.S. Vous pouvez également flotter à droite, puis à gauche, puis au centre. La chose importante est que les flotteurs viennent avant la section centrale "principale".
PPS Vous voulez souvent le dernier à l'intérieur de #container
cet extrait: <div style="clear:both;"></div>
qui étendra #container
verticalement pour contenir les deux flotteurs latéraux au lieu de prendre sa hauteur uniquement de #center
et en laissant éventuellement les côtés dépasser du bas.
Si vous ne souhaitez pas modifier votre structure HTML, vous pouvez également le faire en ajoutant text-align: center;
à l'élément wrapper et un display: inline-block;
à l'élément centré.
#container {
width:100%;
text-align:center;
}
#left {
float:left;
width:100px;
}
#center {
display: inline-block;
margin:0 auto;
width:100px;
}
#right {
float:right;
width:100px;
}
Démo en direct: http://jsfiddle.net/CH9K8/
Voici une méthode CSS3 pour aligner les div horizontalement dans un autre div.
#container {
display: flex; /* establish flex container */
flex-direction: row; /* default value; can be omitted */
flex-wrap: nowrap; /* default value; can be omitted */
justify-content: space-between; /* switched from default (flex-start, see below) */
background-color: lightyellow;
}
#container > div {
width: 100px;
height: 100px;
border: 2px dashed red;
}
<div id="container">
<div></div>
<div></div>
<div></div>
</div>
La propriété justify-content
prend cinq valeurs:
flex-start
(par défaut)flex-end
center
space-between
space-around
Dans tous les cas, les trois div sont sur la même ligne. Pour une description de chaque valeur, voir: https://stackoverflow.com/a/33856609/3597276
Avantages de la flexbox:
Pour en savoir plus sur flexbox, visitez:
Prise en charge du navigateur: Flexbox est pris en charge par tous les principaux navigateurs, - sauf IE <1 . Certaines versions de navigateur récentes, telles que Safari 8 et IE10, nécessitent préfixes du fournisseur . Pour ajouter rapidement des préfixes, utilisez Autoprefixer . Plus de détails dans cette réponse .
La propriété Float n'est en fait pas utilisée pour aligner le texte.
Cette propriété est utilisée pour ajouter un élément à droite, à gauche ou au centre.
div > div { border: 1px solid black;}
<html>
<div>
<div style="float:left">First</div>
<div style="float:left">Second</div>
<div style="float:left">Third</div>
<div style="float:right">First</div>
<div style="float:right">Second</div>
<div style="float:right">Third</div>
</div>
</html>
pour float:left
la sortie sera [First][second][Third]
pour float:right
la sortie sera [Third][Second][First]
Cela signifie que float => left property ajoutera votre prochain élément à la gauche du précédent, Même cas avec right
Vous devez également tenir compte de la largeur de l'élément parent. Si la somme des largeurs des éléments enfants dépasse la largeur de l'élément parent, l'élément suivant sera ajouté à la ligne suivante.
<html>
<div style="width:100%">
<div style="float:left;width:50%">First</div>
<div style="float:left;width:50%">Second</div>
<div style="float:left;width:50%">Third</div>
</div>
</html>
[Première seconde]
[Troisième]
Vous devez donc prendre en compte tous ces aspects pour obtenir le résultat parfait
J'aime mes barres serrées et dynamiques. Ceci est pour CSS 3 & HTML 5
Premièrement, régler la largeur sur 100 px est limitant. Ne le fais pas.
Deuxièmement, définir la largeur du conteneur sur 100% fonctionnera correctement jusqu'à ce que vous parliez de l'en-tête/du pied de page de l'application entière, comme une barre de navigation ou de crédits/de droits d'auteur. Utilisez right: 0;
à la place pour ce scénario.
Vous utilisez des identifiants (hash #container
, #left
, etc.) au lieu de classes (.container
, .left
, etc.), ce qui est correct, sauf si vous souhaitez répéter votre style. motif ailleurs dans votre code. J'envisagerais d'utiliser des cours à la place.
Pour HTML, il n'est pas nécessaire de permuter la commande pour: gauche, centre et droite. display: inline-block;
résout ce problème en remettant votre code dans un état plus propre et plus logique.
Enfin, vous devez effacer tous les flotteurs pour ne pas gâcher le futur <div>
. Vous faites cela avec le clear: both;
Résumer:
HTML:
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
CSS:
.container {right: 0; text-align: center;}
.container .left, .container .center, .container .right { display: inline-block; }
.container .left { float: left; }
.container .center { margin: 0 auto; }
.container .right { float: right; }
.clear { clear: both; }
Point bonus si vous utilisez HAML et SASS;)
HAML:
.container
.left
.center
.right
.clear
TOUPET:
.container {
right: 0;
text-align: center;
.left, .center, .right { display: inline-block; }
.left { float: left; }
.center { margin: 0 auto; }
.right { float: right; }
.clear { clear: both; }
}
Plusieurs astuces sont disponibles pour aligner les éléments.
1. Utiliser Table Trick
.container{
display:table;
}
.left{
background:green;
display:table-cell;
width:33.33vw;
}
.center{
background:gold;
display:table-cell;
width:33.33vw;
}
.right{
background:gray;
display:table-cell;
width:33.33vw;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
2. Utilisation de Flex Trick
.container{
display:flex;
justify-content: center;
align-items: center;
}
.left{
background:green;
width:33.33vw;
}
.center{
background:gold;
width:33.33vw;
}
.right{
background:gray;
width:33.33vw;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
. Utiliser le flotteur
.left{
background:green;
width:100px;
float:left;
}
.center{
background:gold;
width:100px;
float:left;
}
.right{
background:gray;
width:100px;
float:left;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
Cela peut être facilement fait en utilisant la CSS3 Flexbox, une fonctionnalité qui sera utilisée dans le futur (Quand <IE9
sera complètement mort) par presque tous les navigateurs.
Consultez la table de compatibilité du navigateur
HTML
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
CSS
.container {
display: flex;
flex-flow: row nowrap; /* Align on the same line */
justify-content: space-between; /* Equal margin between the child elements */
}
Sortie:
.container {
display: flex;
flex-flow: row nowrap; /* Align on the same line */
justify-content: space-between; /* Equal margin between the child elements */
}
/* For Presentation, not needed */
.container > div {
background: #5F85DB;
padding: 5px;
color: #fff;
font-weight: bold;
font-family: Tahoma;
}
<div class="container">
<div class="left">
Left
</div>
<div class="center">
Center
</div>
<div class="right">
Right
</div>
</div>
Avec Twitter bootstrap:
<p class="pull-left">Left aligned text.</p>
<p class="pull-right">Right aligned text.</p>
<p class="text-center">Center aligned text.</p>
réponse possible, si vous voulez conserver l’ordre du code HTML et ne pas utiliser flex.
HTML
<div class="a">
<div class="c">
the
</div>
<div class="c e">
jai ho
</div>
<div class="c d">
watsup
</div>
</div>
CSS
.a {
width: 500px;
margin: 0 auto;
border: 1px solid red;
position: relative;
display: table;
}
.c {
display: table-cell;
width:33%;
}
.d {
text-align: right;
}
.e {
position: absolute;
left: 50%;
display: inline;
width: auto;
transform: translateX(-50%);
}
HTML:
<div id="container" class="blog-pager">
<div id="left">Left</div>
<div id="right">Right</div>
<div id="center">Center</div>
</div>
CSS:
#container{width:98%; }
#left{float:left;}
#center{text-align:center;}
#right{float:right;}
text-align:center;
donne un centre parfait.
J'ai fait une autre tentative pour simplifier cela et y parvenir sans la nécessité d'un conteneur.
HTML
.box1 {
background-color: #ff0000;
width: 200px;
float: left;
}
.box2 {
background-color: #00ff00;
width: 200px;
float: right;
}
.box3 {
background-color: #0fffff;
width: 200px;
margin: 0 auto;
}
CSS
.box1 {
background-color: #ff0000;
width: 200px;
float: left;
}
.box2 {
background-color: #00ff00;
width: 200px;
float: right;
}
.box3 {
background-color: #0fffff;
width: 200px;
margin: 0 auto;
}
Vous pouvez le voir en direct sur JSFiddle
Utilisation de Bootstrap Je crée 3 divs de largeur égale (en 12 colonnes, 4 colonnes pour chaque div). De cette façon, vous pouvez garder votre zone centrale centrée même si les sections gauche/droite ont des largeurs différentes (si elles ne débordent pas l'espace de leurs colonnes).
HTML:
<div id="container">
<div id="left" class="col col-xs-4 text-left">Left</div>
<div id="center" class="col col-xs-4 text-center">Center</div>
<div id="right" class="col col-xs-4 text-right">Right</div>
</div>
CSS:
#container {
border: 1px solid #aaa;
margin: 10px;
padding: 10px;
height: 100px;
}
.col {
border: 1px solid #07f;
padding: 0;
}
Pour créer cette structure sans bibliothèques, j'ai copié certaines règles de Bootstrap CSS.
HTML:
<div id="container">
<div id="left" class="col">Left</div>
<div id="center" class="col">Center</div>
<div id="right" class="col">Right</div>
</div>
CSS:
* {
box-sizing: border-box;
}
#container {
border: 1px solid #aaa;
margin: 10px;
padding: 10px;
height: 100px;
}
.col {
float: left;
width: 33.33333333%;
border: 1px solid #07f;
padding: 0;
}
#left {
text-align: left;
}
#center {
text-align: center;
}
#right {
text-align: right;
}
Vous pouvez essayer ceci:
Votre code html ressemble à ceci:
<div id="container">
<div id="left"></div>
<div id="right"></div>
<div id="center"></div>
</div>
et votre code css comme ceci:
#container{width:100%;}
#left{float:left;width:100px;}
#right{float:right;width:100px;}
#center{margin:0 auto;width:100px;}
alors, sa sortie devrait être comme ceci:
[[LEFT] [CENTER] [RIGHT]]
Voici les modifications que j'ai dû apporter à la réponse acceptée lorsque je l'ai fait avec une image en tant qu'élément central:
#center
dans ce cas). Si ce n'est pas le cas, vous devrez définir display
sur block
, et il semble que son centre est relatif par rapport à l'espace entre les éléments flottants.Assurez-vous de définir la taille de l’image et son conteneur:
#center {
margin: 0 auto;
}
#center, #center > img {
width: 100px;
height: auto;
}