J'ai rencontré ce problème récemment. Supposons que j'ai un simple <h1>
tag et je veux le centrer verticalement, donc même quand je redimensionne la fenêtre, elle restera au milieu d'une de mes lignes de boîte de grille, négligeant sa position horizontale.
Je sais qu'en ce qui concerne les conteneurs de grille, vertical-align
n'a aucun effet. Quelle serait donc la solution?
Cette question a été marquée comme doublon, cependant, l'autre question concerne le centrage horizontal du texte, alors que je pose ici la question du centrage vertical.
Bonne question - j'ai réussi à contourner le problème avec un wrapper et à utiliser display: table
https://jsfiddle.net/8vjvnznk/
.wrapper {
display: grid;
grid-template-columns: 100px 100px 300px;
grid-template-rows: 200px 200px;
grid-gap: 10px;
background-color: #fff;
color: #444;
align-content: space-evenly;
}
.workaround{
border: 1px solid green;
margin: 0;
padding: 0;
height: 100%;
width: 100%;
display: table;
}
h1{
font-size: 1em;
border: 1px solid yellow;
display: table-cell;
vertical-align: middle;
}
#boxc{
background: red;
}
.box {
background-color: #444;
color: #fff;
border-radius: 5px;
padding: 20px;
font-size: 100%;
}
<div class="wrapper">
<div class="box a">A</div>
<div class="box b">B</div>
<div class="box c" id="boxc">
<div class="workaround">
<h1>
The heading in question!
</h1>
</div>
</div>
<div class="box d">D</div>
<div class="box e">E</div>
<div class="box f">F</div>
</div>
Il n'y a pas besoin de table, pourquoi mélanger la grille avec la table?
Vous pouvez utiliser align-items:center
pour obtenir un centrage vertical.
Si la cellule de la grille est <h1>
lui-même, vous pouvez utiliser align-self:center
pour centrer verticalement le contenu dans <h1>