Je viens de tomber sur cet ancien post, et même si je suis sûr que user01 a trouvé sa réponse depuis longtemps, j'ai trouvé que les réponses actuelles ne fonctionnent pas tout à fait. Après avoir joué un peu en utilisant les informations fournies par les autres, j'ai trouvé une solution qui fonctionnait dans IE, Firefox et Chrome. En CSS:
html, body {
height:100%;}
html {
display: table;
margin:auto;}
body {
display: table-cell;
vertical-align: middle;}
C'est presque identique à la réponse d'Abernier, mais j'ai trouvé que l'inclusion de la largeur briserait le centrage, tout comme l'omission de la marge automatique. J'espère que toute autre personne qui tombera sur ce fil trouvera ma réponse utile.
Bonne réponse. Je me demande simplement (comme je n'ai pas beaucoup d'expérience avec HTML), est-il nécessaire de régler la hauteur à 100%?
coucher du soleil du 8
7
@JackHumphries La hauteur n'est nécessaire que si vous souhaitez aligner le centre de la page sur les axes vertical et horizontal. Si l'horizontale est tout ce que vous voulez, vous pouvez omettre la hauteur.
C'est une réponse si simple, mais la manière la plus propre et la plus efficace de centrer la balise body au milieu de la page.
justinhartman
1
Bien qu'il soit court, il ne fonctionne pas non plus dans IE, Edge Legacy, Edge, Chrome, ni Firefox. Le problème est que la marge automatique ne fonctionne que lorsque la largeur de l'élément est inférieure à celle du parent. Comme «corps» est par défaut à 100%, il n'y a pas de place sur les bords pour insérer automatiquement les marges. Vous pouvez utiliser body { margin:0 auto; max-width: 700px; }et alors votre corps sera jusqu'à 700px et permettra l'enveloppement sur des appareils plus petits.
user3347790
16
ÉDITER
À partir d'aujourd'hui, avec flexbox, vous pouvez
body {
display:flex; flex-direction:column; justify-content:center;
min-height:100vh;}
RÉPONSE PRÉCÉDENTE
html, body {height:100%;}
html {display:table; width:100%;}
body {display:table-cell; text-align:center; vertical-align:middle;}
Quel DOCTYPE autorise l' styleattribut de l' htmlentité?
ceving le
1
@ceving: pas sûr de comprendre ... signifie que le CSS n'est pas valide?
abernier
11
Si j'ai une chose que j'aime partager en ce qui concerne CSS, c'est MA FAVE MANIÈRE DE CENTRER LES CHOSES SUR LES DEUX AXES !!!
Avantages de cette méthode :
Compatibilité totale avec les navigateurs que les gens utilisent réellement
Aucune table requise
Très réutilisable pour centrer tous les autres éléments à l'intérieur de leur parent
Accueille parents et enfants aux dimensions dynamiques (changeantes)!
Je fais toujours cela en utilisant 2 classes: une pour spécifier l'élément parent, dont le contenu sera centré ( .centered-wrapper), et la deuxième pour spécifier quel enfant du parent est centré ( .centered-content). Cette 2e classe est utile dans le cas où le parent a plusieurs enfants, mais un seul doit être centré). Dans ce cas, bodysera le .centered-wrapper, et un intérieur divsera .centered-content.
L'idée du centrage sera désormais de faire .centered-contentun inline-block. Cela facilitera facilement le centrage horizontal, à travers text-align: center;, et permettra également un centrage vertical comme vous le verrez.
Cela vous donne 2 classes vraiment réutilisables pour centrer n'importe quel enfant à l'intérieur de n'importe quel parent! Ajoutez simplement les classes .centered-wrapperet .centered-content.
Alors, qu'est-ce qui se passe avec cet :beforeélément? Cela facilite vertical-align: middle;et est nécessaire car l'alignement vertical n'est pas relatif à la hauteur du parent - l'alignement vertical est relatif à la hauteur du plus grand frère !!! . Par conséquent, en s'assurant qu'il y a un frère dont la hauteur est la hauteur du parent (100% hauteur, 0 largeur pour le rendre invisible), nous savons que l'alignement vertical se fera par rapport à la hauteur du parent.
Une dernière chose: vous devez vous assurer que vos balises htmlet bodyont la taille de la fenêtre afin que leur centrage soit identique au centrage sur le navigateur!
html, body {
width:100%;
height:100%;
padding:0;
margin:0;}
J'utilise flexbox sur html. Pour un bel effet, vous pouvez faire correspondre le chrome des navigateurs afin d'encadrer votre contenu sur des tailles d'écran plus grandes que les maximums de votre page. Je trouve que cela #eeeeeecorrespond plutôt bien. Vous pouvez ajouter une ombre de boîte pour un bel effet de flottement.
html{
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-content: center;
align-items: center;
height:100%;
margin:0;
padding:0;
background:#eeeeee;}
body {
margin:0;
flex:01auto;
align-self:auto;/*recommend 1920 / 1080 max based on usage stats, use 100% to that point*/
width:100%
max-width:900px;
height:100%;
max-height:600px;
background:#fafafa;-webkit-box-shadow:0px0px96px0px rgba(0,0,0,0.75);-moz-box-shadow:0px0px96px0px rgba(0,0,0,0.75);
box-shadow:0px0px96px0px rgba(0,0,0,0.75);}
image / données avec l'aimable autorisation de StatCounter
Bonne réponse moderne. Juste quelques commentaires. (a) Le préfixe de fournisseur pour box-shadowest probablement redondant car les navigateurs prennent flexégalement en charge box-shadow. (b) Il y a beaucoup de CSS qui embellissent votre réponse, mais rendent les éléments importants difficiles à distinguer. Merci
Manngo
Très bien (b), dans le commentaire de @ Manngo ci-dessus.
cjauvin le
Bonne réponse. Moderne. Mais cela aurait pu être plus simple avec le même contenu.
Réponses:
Je viens de tomber sur cet ancien post, et même si je suis sûr que user01 a trouvé sa réponse depuis longtemps, j'ai trouvé que les réponses actuelles ne fonctionnent pas tout à fait. Après avoir joué un peu en utilisant les informations fournies par les autres, j'ai trouvé une solution qui fonctionnait dans IE, Firefox et Chrome. En CSS:
C'est presque identique à la réponse d'Abernier, mais j'ai trouvé que l'inclusion de la largeur briserait le centrage, tout comme l'omission de la marge automatique. J'espère que toute autre personne qui tombera sur ce fil trouvera ma réponse utile.
Remarque: Omettez
html, body { height: 100%; }
pour centrer uniquement horizontalement.la source
Tu peux essayer:
la source
body { margin:0 auto; max-width: 700px; }
et alors votre corps sera jusqu'à 700px et permettra l'enveloppement sur des appareils plus petits.ÉDITER
À partir d'aujourd'hui, avec flexbox, vous pouvez
RÉPONSE PRÉCÉDENTE
la source
style
attribut de l'html
entité?Si j'ai une chose que j'aime partager en ce qui concerne CSS, c'est MA FAVE MANIÈRE DE CENTRER LES CHOSES SUR LES DEUX AXES !!!
Avantages de cette méthode :
Je fais toujours cela en utilisant 2 classes: une pour spécifier l'élément parent, dont le contenu sera centré (
.centered-wrapper
), et la deuxième pour spécifier quel enfant du parent est centré (.centered-content
). Cette 2e classe est utile dans le cas où le parent a plusieurs enfants, mais un seul doit être centré). Dans ce cas,body
sera le.centered-wrapper
, et un intérieurdiv
sera.centered-content
.L'idée du centrage sera désormais de faire
.centered-content
uninline-block
. Cela facilitera facilement le centrage horizontal, à traverstext-align: center;
, et permettra également un centrage vertical comme vous le verrez.Cela vous donne 2 classes vraiment réutilisables pour centrer n'importe quel enfant à l'intérieur de n'importe quel parent! Ajoutez simplement les classes
.centered-wrapper
et.centered-content
.Alors, qu'est-ce qui se passe avec cet
:before
élément? Cela facilitevertical-align: middle;
et est nécessaire car l'alignement vertical n'est pas relatif à la hauteur du parent - l'alignement vertical est relatif à la hauteur du plus grand frère !!! . Par conséquent, en s'assurant qu'il y a un frère dont la hauteur est la hauteur du parent (100% hauteur, 0 largeur pour le rendre invisible), nous savons que l'alignement vertical se fera par rapport à la hauteur du parent.Une dernière chose: vous devez vous assurer que vos balises
html
etbody
ont la taille de la fenêtre afin que leur centrage soit identique au centrage sur le navigateur!Violon: https://jsfiddle.net/gershy/g121g72a/
la source
http://bluerobot.com/web/css/center1.html
la source
0px
à la fin, plutôt queauto
?J'utilise flexbox sur
html
. Pour un bel effet, vous pouvez faire correspondre le chrome des navigateurs afin d'encadrer votre contenu sur des tailles d'écran plus grandes que les maximums de votre page. Je trouve que cela#eeeeee
correspond plutôt bien. Vous pouvez ajouter une ombre de boîte pour un bel effet de flottement.image / données avec l'aimable autorisation de StatCounter
la source
box-shadow
est probablement redondant car les navigateurs prennentflex
également en chargebox-shadow
. (b) Il y a beaucoup de CSS qui embellissent votre réponse, mais rendent les éléments importants difficiles à distinguer. MerciAppliquez simplement ce style avant d'appliquer un CSS. Vous pouvez changer la largeur selon vos besoins.
la source
Ecrivez
la source
Essaye ça
la source