align-self: center
use を使用する代わりに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
です。別のユニコード文字などから来る異なる高さのために良い