Est-il possible de centrer les div flottantes dans un conteneur et si oui comment?
Par exemple, j'ai une page avec un conteneur div contenant beaucoup de divs de taille variable (générés dynamiquement) flottants (à gauche). Les div débordent régulièrement sur la ligne suivante, mais elles ne sont jamais centrées dans le conteneur div, mais alignées avec la gauche. Cela ressemble à ceci:
----------------------------
- -
- +++ +++++ ++++ ++ -
- +++ +++++ ++++ ++ -
- -
- ++ ++++++ +++ + -
- ++ ++++++ +++ + -
- -
----------------------------
Considérant que je voudrais que les divs flottés soient centrés dans le conteneur comme ceci:
----------------------------
- -
- +++ +++++ ++++ ++ -
- +++ +++++ ++++ ++ -
- -
- ++ ++++++ +++ + -
- ++ ++++++ +++ + -
- -
----------------------------
Merci,
DLiKS
C'est possible. Utiliser http://www.pmob.co.uk/pob/centred-float.htm et http://css-discuss.incutio.com/wiki/Centering_Block_Element comme source.
Voici un violon démontrant le concept, utilisant le HTML et le CSS ci-dessous: https://jsfiddle.net/t9qw8m5x/
<div id="outer">
<ul id="inner">
<li><a href="#">Button 1</a></li>
<li><a href="#">Button 2 with long text</a></li>
<li><a href="#">Button 3</a></li>
</ul>
</div>
C'est le CSS minimum requis pour l'effet:
#outer {
float: right;
position: relative;
left: -50%;
}
#inner {
position: relative;
left: 50%;
}
#inner > li {
float: left;
}
Explication:
Commencez avec seulement la règle li { float: left; }
. Encadrez ensuite ces flottants dans le left: 50%; relative position
, de sorte que le bord gauche du <ul>
se trouve au centre horizontal de la page, puis utilisez les règles de #outer
pour l’ajuster correctement afin que le centre de #inner
soit aligné sur la page.
Avec CSS3, vous pouvez également réaliser cela avec flexbox:
HTML:
<ul id="flexcontainer">
<li><a href="#">Item 1</a></li>
<li><a href="#">Item 2 with long text</a></li>
<li><a href="#">Item 3</a></li>
</ul>
Min CSS:
#flex-container {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
#flex-container > li {
float: left;
}
Fiddle (avec un peu de style pour la visualisation): https://jsfiddle.net/k5o37dff/4/
Plus d'informations sur flexbox: https://www.sketchingwithcss.com/samplechapter/cheatsheet.html
Prise en charge du navigateur: https://www.w3schools.com/cssref/css3_pr_flex.asp
Calculez la quantité totale de largeur d'écran occupée par la disposition souhaitée, puis attribuez au parent la même largeur et appliquez margin: auto.
.outer {
/* floats + margins + borders = 270 */
max-width: 270px;
margin: auto;
height: 80px;
border: 1px;
border-style: solid;
}
.myFloat {
/* 3 floats x 50px = 150px */
width: 50px;
/* 6 margins x 10px = 60px */
margin: 10px;
/* 6 borders x 10px = 60px */
border: 10px solid #6B6B6B;
float: left;
text-align: center;
height: 40px;
}
<div class="outer">
<div class="myFloat">Float 1</div>
<div class="myFloat">Float 2</div>
<div class="myFloat">Float 3</div>
</div>