J'ai cherché d'autres questions et, bien que ce problème semble similaire à quelques autres, rien de ce que j'ai vu jusqu'à présent ne semble résoudre le problème que je rencontre.
J'ai un div qui contient un certain nombre d'autres div, dont chacun est flottant à gauche. Ces divs contiennent chacun une photo et une légende. Tout ce que je veux, c'est que le groupe de photos soit centré dans le div contenant.
Comme vous pouvez le voir dans le code ci-dessous, j'ai essayé d'utiliser à la fois overflow:hidden
et margin:x auto
sur les div parent, et j'ai également ajouté un clear:both
(comme suggéré dans un autre sujet) après les photos. Rien ne semble faire de différence.
Je vous remercie. J'apprécie toutes les suggestions.
<div style="position: relative; margin: 0 auto; overflow: hidden; text-align: center;">
<h4>Section Header</h4>
<div style="margin: 2em auto;">
<div style="float: left; margin: auto 1.5em;">
<img src="photo1.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo2.jpg" /><br />
Photo Caption
</div>
<div style="float: left; margin: auto 1.5em;">
<img src="photo3.jpg" /><br />
Photo Caption
</div>
<div style="clear: both; height: 0; overflow: hidden;"> </div>
</div>
</div>
Réponses:
Tout d'abord, supprimez l'
float
attribut sur lediv
s interne . Ensuite, metteztext-align: center
l'extérieur principaldiv
. Et pour les intérieursdiv
, utilisezdisplay: inline-block
. Il serait peut-être aussi judicieux de leur donner des largeurs explicites.la source
Avec Flexbox, vous pouvez facilement centrer horizontalement (et verticalement) les enfants flottants à l' intérieur d'un div.
Donc, si vous avez un balisage simple comme celui-ci:
avec CSS:
(Ceci est le RÉSULTAT (attendu - et indésirable) )
Ajoutez maintenant les règles suivantes au wrapper:
et les enfants flottants sont alignés au centre ( DEMO )
Juste pour le plaisir, pour obtenir un alignement vertical, ajoutez simplement:
DEMO
la source
J'ai accompli ce qui précède en utilisant un positionnement relatif et en flottant vers la droite.
Code HTML:
CSS:
JSFiddle: http://jsfiddle.net/MJ9yp/
Cela fonctionnera dans IE8 et plus, mais pas plus tôt (surprise, surprise!)
Je ne me souviens malheureusement pas de la source de cette méthode, je ne peux donc pas donner de crédit à l'auteur original. Si quelqu'un d'autre sait, veuillez poster le lien!
la source
La solution suivante n'utilise pas de blocs en ligne. Cependant, il nécessite deux div d'assistance:
la source
display: inline-block;
ne fonctionnera dans aucun des navigateurs IE. Voici ce que j'ai utilisé.la source
Solution:
la source
Dans mon cas, je n'ai pas pu obtenir la réponse de @Sampson pour moi, au mieux j'ai une seule colonne centrée sur la page. Dans le processus cependant, j'ai appris comment le flotteur fonctionne réellement et j'ai créé cette solution. Au fond, le correctif est très simple mais difficile à trouver, comme en témoigne ce fil qui a eu plus de 146k vues au moment de cet article sans mention.
Tout ce qui est nécessaire est de totaliser la largeur de l'espace d'écran que la mise en page souhaitée occupera, puis de donner au parent la même largeur et d'appliquer la marge: auto. C'est tout!
Les éléments de la mise en page dicteront la largeur et la hauteur du div "extérieur". Prenez chaque "myFloat" ou la largeur ou la hauteur de chaque élément + ses bordures + ses marges et ses rembourrages et ajoutez-les tous ensemble. Ensuite, ajoutez les autres éléments ensemble de la même manière. Cela vous donnera la largeur du parent. Ils peuvent tous être de tailles quelque peu différentes et vous pouvez le faire avec moins ou plus d'éléments.
Ex. (Chaque élément a 2 côtés donc la bordure, la marge et le remplissage sont multipliés par 2)
Donc, un élément qui a une largeur de 10px, une bordure 2px, une marge 6px, un remplissage de 3px ressemblerait à ceci: 10 + 4 + 12 + 6 = 32
Ajoutez ensuite toutes les largeurs totalisées de votre élément.
Dans cet exemple, la largeur du div "extérieur" serait de 112.
la source