align-self: centeruse を使用する代わりにalign-items: center。
を変更しflex-directionたり使用したりする必要はありませんtext-align。
すべてが機能するように、1つの調整を加えたコードを次に示します。
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
このalign-selfプロパティはフレックスアイテムに適用されます。あなたは除きliフレックス項目ではありませんので、その親- ul-持っていないdisplay: flexか、display: inline-flex適用されます。
したがって、はulフレックスコンテナでliはなく、はフレックスアイテムでalign-selfはなく、効果はありません。
align-itemsプロパティはに似てalign-self、それが適用される以外、フレックスコンテナ。
以来liフレックスコンテナで、align-items縦に子要素をセンタリングするために使用することができます。
* {
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デモ
技術的には、ここに方法align-itemsとalign-self働きがあります...
align-items(容器上の)プロパティは、デフォルト値の設定align-self(の項目に)。したがって、align-items: centerすべてのflexアイテムがに設定されることを意味しalign-self: centerます。
ただしalign-self、個々のアイテムのを調整することで、このデフォルトを上書きできます。
たとえば、高さが等しい列が必要な場合は、コンテナがに設定されalign-items: stretchます。ただし、1つのアイテムを上部に固定する必要があるため、に設定されていalign-self: flex-startます。
例
テキストはどのようにフレックスアイテムですか?
一部の人々は、テキストの実行がどのように不思議に思うかもしれません...
<li>This is the text</li>
の子要素ですli。
その理由は、インラインレベルの要素によって明示的にラップされていないテキストは、インラインボックスによってアルゴリズムによってラップされるためです。これにより、匿名のインライン要素と親の子になります。
CSS仕様から:
9.2.2.1匿名インラインボックス
ブロックコンテナー要素内に直接含まれるテキストは、匿名のインライン要素として扱う必要があります。
フレックスボックス仕様は、同様の動作を提供します。
4.フレックスアイテム
フレックスコンテナーのインフローの各子はフレックスアイテムになり、フレックスコンテナー内に直接含まれる連続するテキストの各ランは、匿名のフレックスアイテムにラップされます。
したがって、のテキストliはフレックスアイテムです。
align-items: baselineです。別のユニコード文字などから来る異なる高さのために良い