Je veux centrer un div
verticalement avec CSS. Je ne veux pas de tables ou de JavaScript, mais uniquement du CSS pur. J'ai trouvé quelques solutions, mais elles ne prennent pas toutes en charge Internet Explorer 6.
<body>
<div>Div to be aligned vertically</div>
</body>
Comment puis-je centrer un div
verticalement dans tous les principaux navigateurs, y compris Internet Explorer 6?
css
cross-browser
alignment
vertical-alignment
centering
Burak Erdem
la source
la source
tables
mises en page ici?Réponses:
Vous trouverez ci-dessous la meilleure solution globale que je pourrais construire pour centrer verticalement et horizontalement une zone de contenu à largeur fixe et à hauteur flexible . Il a été testé et fonctionne pour les versions récentes de Firefox, Opera, Chrome et Safari.
Afficher un exemple de travail avec du contenu dynamique
J'ai intégré du contenu dynamique pour tester la flexibilité et j'aimerais savoir si quelqu'un y voit des problèmes. Cela devrait aussi bien fonctionner pour les superpositions centrées - lightbox, pop-up, etc.
la source
.outer {position:absolute;width:100%;height:100%}
n'est pas nécessaire, ils sont là simplement pour manifester. Tout ce dont nous avons besoin estdisplay:table
, si quelqu'un est confus comme moi..outer
etmiddle
ignorez clairement le.inner
et son style. Je ne sais pas à quoi ça sertmargin-left
,margin-right
réglé sur auto car cela ne centre pas l'élément horizontalement ?? !!!width: 100%;
et l'ajoutmargin: 0 auto
à.outer
permettent également une largeur variable.top: 0; left 0;
est manquant, au moins dans Chrome qui définit la valeur par défaut à 1.Un autre que je ne vois pas sur la liste:
height
doit être déclaré (voir Hauteur variable )overflow: auto
pour éviter le débordement de contenu (voir Débordement)Source: Centrage absolu horizontal et vertical en CSS
la source
margin: auto;
Le moyen le plus simple serait les 3 lignes de CSS suivantes:
1) position: relative;
2) haut: 50%;
3) transformer: translateY (-50%);
Voici un EXEMPLE :
la source
height
extérieurdiv
est100%
. Ne fonctionne alors qu'avecposition: absolute;
.-webkit-transform
variante en particulier, dont j'avais besoin pour faire fonctionner cette méthode dans les fantômes ... terminé des heures de lutte alors merci!En fait, vous avez besoin de deux div pour le centrage vertical. Le div contenant le contenu doit avoir une largeur et une hauteur.
Voici le résultat
la source
Maintenant, la solution flexbox est un moyen très simple pour les navigateurs modernes, je vous recommande donc ceci:
la source
navbar
, vous pouvez modifier la hauteur en utilisantheight: calc(100% - 55px)
ou quelle que soit la hauteur de votre taillenavbar
.float
. Merci.Edit 2020: utilisez-le uniquement si vous devez prendre en charge d'anciens navigateurs comme IE8 (ce que vous devriez refuser de faire 😉). Sinon, utilisez flexbox.
C'est la méthode la plus simple que j'ai trouvée et je l'utilise tout le temps ( démo jsFiddle ici )
Merci Chris Coyier de CSS Tricks pour cet article .
Le support commence par IE8.
la source
Après de nombreuses recherches, j'ai finalement trouvé la solution ultime. Cela fonctionne même pour les éléments flottants. Voir la source
la source
50%
travaillé pour moi (pas-50%
)Solution Flexbox
la source
justify-content: center
centrera également les éléments horizontalementPour centrer le div sur une page, vérifiez le lien du violon .
Une autre option consiste à utiliser la boîte flexible, vérifiez le lien du violon .
Une autre option consiste à utiliser une transformation CSS 3:
la source
%
,em
s etrem
s. Les valeurs absolues ou fixes sont des pixels ou des points. Vous faites référence à "cela ne fonctionne qu'avec une hauteur déclarée". Cependant, bien que cette méthode décrite par Moes nécessite une hauteur, lorsque vous la déclarez en unités relatives, le pourcentage est le meilleur, peu importe la quantité de contenu à l'intérieur de la DIV centrée que DIV étendra verticalement pour s'adapter à son contenu. Voilà la beauté de cette méthode. L'autre bonne chose est que cette méthode fonctionne dans IE8 / 9/10 au cas où quelqu'un aurait encore besoin de supporter ces navigateurs.transform: translate(-50%, -50%);
technique. Pour IE8, je le laisserais juste aligné haut / centre et continuerais.La solution la plus simple est ci-dessous:
la source
Malheureusement - mais sans surprise - la solution est plus compliquée qu'on ne le souhaiterait. Malheureusement, vous devrez également utiliser des divs supplémentaires autour du div que vous souhaitez centré verticalement.
Pour les navigateurs conformes aux normes comme Mozilla, Opera, Safari, etc., vous devez définir le div externe à afficher sous forme de tableau et le div interne à afficher sous forme de cellule de tableau - qui peut ensuite être centré verticalement. Pour Internet Explorer, vous devez positionner le div intérieur absolument à l'intérieur du div extérieur, puis spécifier le haut à 50% . Les pages suivantes expliquent bien cette technique et fournissent également quelques exemples de code:
Centrage vertical en CSS de hauteur inconnue (compatible avec Internet Explorer 7)(n'est plus disponible)Il existe également une technique pour effectuer le centrage vertical en utilisant JavaScript. L'alignement vertical du contenu avec JavaScript et CSS le démontre.
la source
Si quelqu'un se soucie d'Internet Explorer 10 (et versions ultérieures) uniquement, utilisez
flexbox
:Prise en charge de Flexbox: http://caniuse.com/flexbox
la source
align-items: center;
!Une façon moderne de centrer un élément verticalement serait d'utiliser
flexbox
.Vous avez besoin d'un parent pour décider de la taille et d'un enfant à centrer.
L'exemple ci-dessous centre un div au centre de votre navigateur. Ce qui est important (dans mon exemple) est de mettre
height: 100%
àbody
ethtml
puismin-height: 100%
à votre récipient.la source
Centrage uniquement verticalement
Si vous ne vous souciez pas d'Internet Explorer 6 et 7, vous pouvez utiliser une technique qui implique deux conteneurs.
Le conteneur extérieur:
display: table;
Le récipient intérieur:
display: table-cell;
vertical-align: middle;
La zone de contenu:
display: inline-block;
Vous pouvez ajouter n'importe quel contenu que vous souhaitez dans la zone de contenu sans vous soucier de sa largeur ou de sa hauteur!
Démo:
Voir aussi ce violon !
Centrage horizontal et vertical
Si vous souhaitez centrer horizontalement et verticalement, vous avez également besoin des éléments suivants.
Le récipient intérieur:
text-align: center;
La zone de contenu:
text-align: left;
outext-align: right;
, sauf si vous voulez que le texte soit centréDémo:
Voir aussi ce violon !
la source
Connexes: Centrer une image
la source
C'est toujours là où je vais quand je dois revenir sur cette question .
Pour ceux qui ne veulent pas faire le saut:
position:relative
ouposition:absolute
.position:absolute
ettop:50%
sur le conteneur enfant pour déplacer le haut vers le bas au milieu du parent.Un exemple de cela dans le code:
la source
Utilisation de la propriété flex de CSS.
ou en utilisant
display: flex;
etmargin: auto;
Afficher l'extrait de code
afficher le centre de texte
Afficher l'extrait de code
Utilisation du pourcentage (%) de hauteur et de largeur.
Afficher l'extrait de code
la source
Je viens d'écrire ce CSS et pour en savoir plus, veuillez consulter: Cet article avec vertical aligner quoi que ce soit avec seulement 3 lignes de CSS .
la source
Grille CSS
la source
Pour les nouveaux arrivants, veuillez essayer
la source
div
.<div style="display:flex"><div style="margin:auto">Inner</div></div>
La réponse de Billbad ne fonctionne qu'avec une largeur fixe de
.inner
div. Cette solution fonctionne pour une largeur dynamique en ajoutant l'attributtext-align: center
à la.outer
div.la source
Les trois lignes de code utilisant des
transform
travaux pratiquement sur les navigateurs modernes et Internet Explorer:J'ajoute cette réponse car j'ai trouvé une incomplétude dans la version précédente de cette réponse (et Stack Overflow ne me permettra pas de simplement commenter).
'position' relative perturbe le style si le div actuel est dans le corps et n'a pas de div de conteneur. Cependant «fixe» semble fonctionner, mais il corrige évidemment le contenu au centre de la fenêtre
J'ai également utilisé ce style pour centrer certaines divisions de superposition et j'ai constaté que dans Mozilla, tous les éléments à l'intérieur de cette division transformée avaient perdu leurs bordures inférieures. Peut-être un problème de rendu. Mais l'ajout d'un rembourrage minimal à certains d'entre eux l'a rendu correctement. Chrome et Internet Explorer (étonnamment) ont rendu les boîtes sans besoin de rembourrage
la source
Le lien suivant présente une manière simple de le faire avec seulement 3 lignes dans votre CSS:
Alignez verticalement n'importe quoi avec seulement 3 lignes de CSS .
Je sais que la question a déjà une réponse mais j'ai vu l'utilité du lien pour sa simplicité.
la source
Ne répond pas pour la compatibilité du navigateur mais aussi pour mentionner la nouvelle grille et la fonctionnalité Flexbox pas si nouvelle.
la grille
De: Mozilla - Grid Documentation - Align Div Vertically
Prise en charge du navigateur: prise en charge du navigateur de grille
CSS:
HTML:
Flexbox
Prise en charge du navigateur: prise en charge du navigateur Flexbox
CSS:
la source
Je pense qu'une solution solide pour tous les navigateurs sans utiliser flexbox - "align-items: center;" est une combinaison d'affichage: table et d'alignement vertical: milieu;.
CSS
HTML
‣Demo: https://jsfiddle.net/6m640rpp/
la source
Je l'ai fait avec cela (changez la largeur, la hauteur, la marge en haut et la marge en gauche en conséquence):
la source
Le contenu peut être facilement centré à l'aide de flexbox. Le code suivant montre le CSS du conteneur à l'intérieur duquel le contenu doit être centré:
la source
Surtout pour les divs parents avec une hauteur relative (inconnue), le centrage dans la solution inconnue fonctionne très bien pour moi. Il y a de très bons exemples de code dans l'article.
Il a été testé dans Chrome, Firefox, Opera et Internet Explorer.
la source
Faites-le
div
: ajoutez le cours à votre :Et lisez cet article pour une explication. Remarque:
Height
est nécessaire.la source
Il y a un truc que j'ai découvert récemment: vous devez utiliser
top 50%
et ensuite voustranslateY(-50%)
la source