フレックスボックスを使用して、内部のコンテンツを垂直方向に揃えたいのです<li>
が、うまくいきません。
オンラインで調べたところ、多くのチュートリアルでは実際にalign-items:center
親の flex 設定から取得するラッパー div が使用されていますが、この追加要素を切り取ることは可能でしょうか?
この例では、リスト項目の高さが動的になるため、flexbox を使用することを選択しました%
。
* {
padding: 0;
margin: 0;
}
html,
body {
height: 100%;
}
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
align-self: center;
background: silver;
width: 100%;
height: 20%;
}
<ul>
<li>This is the text</li>
</ul>
ベストアンサー1
を使用する代わりにを使用しalign-self: center
ます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>
align-items
技術的には、その方法と仕組みは次のとおりですalign-self
...
プロパティalign-items
(コンテナ上) は、align-self
(アイテム上) のデフォルト値を設定します。つまり、align-items: center
すべてのフレックス アイテムが に設定されることになりますalign-self: center
。
ただし、個々の項目を調整することで、このデフォルトを上書きできますalign-self
。
たとえば、列の高さを均等にしたい場合は、コンテナーを に設定しますalign-items: stretch
。ただし、1 つの項目を上部に固定する必要があるため、 に設定しますalign-self: flex-start
。
テキストはフレックスアイテムですか?
一連のテキストがどのように機能するのか疑問に思う人もいるかもしれません...
<li>This is the text</li>
は の子要素ですli
。
その理由は、インライン レベル要素によって明示的に囲まれていないテキストは、インライン ボックスによってアルゴリズム的に囲まれるためです。これにより、匿名のインライン要素となり、親の子になります。
CSS 仕様より:
ブロック コンテナー要素内に直接含まれるテキストは、匿名のインライン要素として扱う必要があります。
flexbox 仕様でも同様の動作が規定されています。
フレックス コンテナーの各インフローの子はフレックス アイテムになり、フレックス コンテナー内に直接含まれる連続したテキストの各実行は匿名のフレックス アイテムでラップされます。
したがって、 内のテキストはli
フレックス アイテムです。