Anstatt Verwendung zu align-self: centerverwenden align-items: center.
Es besteht keine Notwendigkeit zu ändern flex-directionoder zu verwenden text-align.
Hier ist Ihr Code mit einer Anpassung, damit alles funktioniert:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
Die align-selfEigenschaft gilt für flexible Artikel . Es sei lidenn, Sie sind kein Flex-Element, da das übergeordnete Element - das ul- nicht vorhanden ist display: flexoder display: inline-flexangewendet wurde.
Daher ist das ulkein Flex-Container, das liist kein Flex-Gegenstand und align-selfhat keine Wirkung.
Die align-itemsEigenschaft ist ähnlich align-self, außer dass sie für Flex-Container gilt .
Da lies sich um einen Flex-Container handelt, align-itemskönnen die untergeordneten Elemente vertikal zentriert werden.
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; */
align-items: center;
background: silver;
width: 100%;
height: 20%;
}
<ul>
<li>This is the text</li>
</ul>
Codepen-Demo
Technisch ist hier, wie align-itemsund wie align-self...
Die align-itemsEigenschaft (für den Container) legt den Standardwert für align-self(für die Elemente) fest. Daher align-items: centerbedeutet dies , dass alle Flex-Elemente auf eingestellt sind align-self: center.
Sie können diese Standardeinstellung jedoch überschreiben, indem Sie die align-selfeinzelnen Elemente anpassen .
Beispielsweise möchten Sie möglicherweise Spalten mit gleicher Höhe, sodass der Container auf festgelegt ist align-items: stretch. Ein Element muss jedoch oben angeheftet sein, damit es festgelegt wird align-self: flex-start.
Beispiel
Wie ist der Text ein flexibles Element?
Einige Leute fragen sich vielleicht, wie ein Textlauf ...
<li>This is the text</li>
ist ein untergeordnetes Element der li.
Der Grund dafür ist, dass Text, der nicht explizit von einem Inline-Element umbrochen wird, algorithmisch von einem Inline-Feld umbrochen wird. Dies macht es zu einem anonymen Inline-Element und Kind des übergeordneten Elements .
Aus der CSS-Spezifikation:
9.2.2.1 Anonyme Inline-Boxen
Jeder Text, der direkt in einem Blockcontainerelement enthalten ist, muss als anonymes Inline-Element behandelt werden.
Die Flexbox-Spezifikation sieht ein ähnliches Verhalten vor.
4. Flex Items
Jedes untergeordnete Element eines Flex-Containers wird zu einem Flex-Element, und jeder zusammenhängende Textlauf, der direkt in einem Flex-Container enthalten ist, wird in ein anonymes Flex-Element eingeschlossen.
Daher ist der Text in der liein flexibles Element.
align-items: baseline. Gut für verschiedene Höhen, die von verschiedenen Unicode-Zeichen usw. stammen