align-contentとalign-itemsの違いは何ですか?


366

align-itemsとの違いを誰かに教えてもらえalign-contentますか?



3
私はすでにクリスの年鑑も掘りましたが、それでもはっきりしませんでした
Dinh

56
ここでの選択の名前はとても混乱しています!そのようなものに無謀な名前を付けるだけです!
vsync '16年

回答:


384

align-itemsflex-box のプロパティは、主軸に沿った場合と同様に、フレックスコンテナー内のアイテムを交差軸に沿って配置しjustify-contentます。(デフォルトでflex-direction: rowは、交差軸は垂直に対応し、主軸は水平に対応します。flex-direction: columnこれらの2つはそれぞれ交換されます)。

これがどのようにalign-items:center見えるかの例です:

align-items:center

ただしalign-content、マルチラインフレキシブルボックス用です。アイテムが1行にある場合は効果がありません。それはその値に従って構造全体を整列させます。以下がその例ですalign-content: space-around;ここに画像の説明を入力してください

そしてalign-content: space-around;align-items:centerルックスの使い方は次のとおりです。ここに画像の説明を入力してください

最初の行の3番目のボックスと他のすべてのボックスが、その行の垂直方向の中央に変更されることに注意してください。

ここにいくつかのコードペンリンクがあります:

http://codepen.io/asim-coder/pen/MKQWbb

http://codepen.io/asim-coder/pen/WrMNWR

ここだあなたはフレキシボックス内のほとんどすべてと遊ぶことができますショーや超クールなペンが。


3
ことに注意してくださいalign-*プロパティも水平フレックスアイテムをシフトすることができます。それはに依存しますflex-directionstackoverflow.com/q/32551291/3597276
マイケルベンジャミン

1
これは簡単に最良の説明です。他の誰もが惨めに失敗します。
正義

>「ただし、align-contentは複数行のフレキシブルボックス用です。アイテムが1行にある場合は効果がありません」-これは、最新のFirefox(2020年5月)では当てはまらない、または栄誉がないようです。代わりに、単一のフレックスライン(すべてのコンテンツが主軸の長さ未満に収まる)が全高よりも小さい(軸間のサイズが利用可能なフルよりも小さい)場合は、align-contentを設定すると、align-アイテム。これは理にかなっています:それはそれが見つけたすべての行に適用されますか?
アダム

85

http://flexboxfroggy.com/の例は非常に便利です。

それはあなたに10-20分かかり、レベル21であなたはあなたの質問に対する答えを見つけるでしょう。それは言及しました:

align-contentは行間の間隔を決定し、align-items はアイテムがコンテナー内で全体としてどのように配置されるかを決定します。1行しかない場合、align-contentは効果がありません。


2
確かに、私はカエルの例が本当に役立つと思いました。それから多くを学びました。
Spikatrix

63

1 align-itemsつ目は、1つの行のアイテムです。上の要素の単一の行のように、メイン軸align-items互いのそれぞれのこれらのアイテムを整列し、それは次の行からの新鮮な視点で開始します。

これalign-contentで、行内のアイテムには影響しませんが、行自体には影響します。したがって、align-content行とフレックスコンテナーを基準にして行を揃えようとします。

このフィドルを確認してください:https//jsfiddle.net/htym5zkn/8/


19

私も同じように混乱しました。上記の答えの多くに基づいていじくり回した後、ようやく違いがわかります。私の控えめな意見では、この区別は、次の2つの条件を満たすフレックスコンテナーで最もよく示されます。

  1. フレックスコンテナー自体に高さの制約(例:)があるため、コンテンツに対して高すぎるmin-height: 60rem可能性があります
  2. コンテナに含まれる子アイテムの高さ不均一です

条件1content、親コンテナーとの関係を理解するのに役立ちます。コンテンツがコンテナと同じ高さになると、からの配置効果を確認できなくなりますalign-content。交差軸に沿って余分なスペースがある場合にのみ、その効果がわかります。これは、コンテンツを親コンテナーの境界を基準に配置します。

条件2は、次の効果を視覚化するのに役立ちますalign-items:アイテムを互いに相対的に配置します。


次にコード例を示します。原材料は、Wes BosのCSSグリッドチュートリアル(21. FlexboxとCSSグリッド)から取得

  • HTMLの例:
  <div class="flex-container">
    <div class="item">Short</div>
    <div class="item">Longerrrrrrrrrrrrrr</div>
    <div class="item">💩</div>
    <div class="item" id="tall">This is Many Words</div>
    <div class="item">Lorem, ipsum.</div>
    <div class="item">10</div>
    <div class="item">Snickers</div>
    <div class="item">Wes Is Cool</div>
    <div class="item">Short</div>
  </div>
  • CSSの例:
.flex-container {
  display: flex;
  /*dictates a min-height*/
  min-height: 60rem;
  flex-flow: row wrap;
  border: 5px solid white;
  justify-content: center;
  align-items: center;
  align-content: flex-start;
 }

#tall {
  /*intentionally made tall*/
  min-height: 30rem;
}

.item {
  margin: 10px;
  max-height: 10rem;
}

例1:コンテンツがコンテナと揃うようにビューポートを狭めましょう。これは、align-content: flex-start;コンテンツブロック全体がコンテナ内にぴったり収まるため、影響がない場合です(再配置する余地はありません!)

また、2行目に注目してください。アイテムがどのように中央揃えされるかを確認してください。

ここに画像の説明を入力してください

例2:ビューポートを拡大すると、コンテナー全体を埋めるのに十分なコンテンツがなくなります。次に、-- align-content: flex-start;it の効果を確認し始めます。コンテンツはコンテナーの上端を基準にして配置されます。 ここに画像の説明を入力してください


これらの例はflexboxに基づいていますが、同じ原則がCSSグリッドにも適用されます。お役に立てれば :)


11

よく私は私のブラウザでそれらを調べました。

align-contentそれの値が伸びている場合、列の行方向または幅のために、ラインの高さを変更したりするためのライン間又は周囲に空きスペースを追加することができspace-betweenspace-aroundflex-startflex-end values

align-items行の領域内のアイテムの高さまたは位置を変更できます。アイテムがラップされていない場合、アイテムは1行しかなく、そのエリアは常にフレックスボックスエリアに引き伸ばされ(アイテムがオーバーフローした場合でも)、align-content1行には影響しません。したがって、ラップされていないアイテムには影響がなくalign-items、すべてが1行にある場合にのみ、アイテムの位置を変更したり、アイテムをストレッチしたりできます。

ただし、それらがラップされている場合は、複数の行と各行内に項目があります。また、各行のすべてのアイテムの高さが同じ(行方向の)場合、その行の高さはそれらのアイテムの高さに等しくなり、align-items値を変更しても効果はありません。

したがってalign-items、アイテムがラップされるときにアイテムに影響を与え、同じ高さ(行方向に対して)にしたい場合は、まずalign-content、行領域を拡張するためにストレッチ値を使用する必要があります。


7

align-content

align-content対照交差軸(すなわち、垂直方向場合flex-directionでありrow、水平場合flex-directionであるcolumn)の位置決め複数互いに対してライン。

(段落の行が垂直方向に広がり、上に向かって積み上げられ、下に向かって積み上げられると考えてください。これはflex-direction行パラダイムの下にあります)。

align-items

align-items フレックス要素の個々の線の交差軸を制御します。

(段落の個々の行がどのように配置されているかを考えてください。通常のテキストと数式のようなより長いテキストが含まれている場合。その場合、それは行の各タイプのテキストの下部、上部、または中央になります。整列しますか?)


1

私はすべての答えとブログを訪問して学んだことは

交差軸と主軸は何ですか

  • 主軸は水平方向の行で、交差軸は垂直方向の列です- flex-direction: row
  • 主軸は垂直列であり、交差軸は水平行です-for flex-direction: column

align-contentとalign-items

align-contentは行用であり、コンテナーに(複数の行がある)align-contentのプロパティがある場合に機能します

.container {
  align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}

align-itemsは、align-itemsの行プロパティのアイテム用です

.container {
  align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}

flexへの参照の詳細については


0

主な違いは、要素の高さが同じでない場合です!次に、行がどのように中央にあるかを確認できます\ end \ start


0

私がここから理解したことによると:

align-itemまたはjustify-itemを使用すると、「列軸または行軸に沿ってグリッドアイテム内のコンテンツをそれぞれ調整します。

ただし、align-contentまたはjustify-contentを使用する場合は、列軸または行軸に沿ってグリッドの位置を設定します。これは、より大きなコンテナーにグリッドがあり、幅または高さが(pxを使用して)柔軟性がない場合に発生します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.