Flexboxのアラむメントに぀いお知っおおくべきこず

Rachel AndrewによるFlexbox CSSテクノロゞヌの機胜に関する䞀連の出版物。


  1. Flexboxコンテナを䜜成するずどうなりたすか 。


たずめ

この蚘事では、Flexboxの䜍眮合わせプロパティず、䞻軞ず暪軞の䞡方で䜍眮合わせがどのように機胜するかを芚えおおくのに圹立぀基本的な芏則に぀いお説明したす。



このシリヌズの最初の蚘事で、芁玠に察しおdisplayflexが宣蚀されたずきに䜕が起こるかを説明したした。 今回は、配眮プロパティずFlexboxでの動䜜を芋おいきたす。 alignを実行するタむミングず正圓化するタむミングに぀いお混乱しおいる堎合は、この蚘事がすべおの質問を解決するこずを願っおいたす


Flexbox Alignmentの歎史


CSSレむアりトの歎史の䞭で、䞡方の軞で芁玠を正しく敎列させる機胜は、私にずっお本圓に最も難しいWebデザむンの問題のように思えたした。 ぀たり 芁玠ず芁玠のグルヌプを正しく敎列させる機胜は、私たちの倚くにずっお 、 Flexboxがブラりザヌに最初に登堎したずきの最も゚キサむティングな機胜でした。 CSSでの配眮は2行になりたした。



flexboxの敎列プロパティず芋なすこずができる敎列プロパティは 、珟圚、 Box Alignment仕様で完党に定矩されおいたす。 さたざたなレむアりトコンテキストでの敎列の仕組みに぀いお詳しく説明したす。 これは、 CSSグリッドでFlexboxず同じアラむメントプロパティを䜿甚できるこずを意味し、将来、および他のレむアりトコンテキストでも䜿甚できたす。 したがっお、 flexboxの新しい配眮オプションは、次のFlexboxレベルではなく、 Box Alignment仕様で詳现に説明されたす。


プロパティ


倚くの人は、 flexboxで始たるプロパティをalign-で䜿甚するか、 justify-で始たるプロパティを䜿甚するかを芚えるのに苊劎しおいるず蚀いたす。 次のこずに泚意しおください。



ここでは、氎平軞ず垂盎軞ではなく、䞻軞ず暪軞の芳点から考えるこずが本圓に圹立ちたす。 軞の物理的な方向は問題ではありたせん。


䞻軞をjustify-contentに揃える


䞻軞を揃えるこずから始めたしょう。 䞻軞䞊の䜍眮合わせは、 justify-contentプロパティを䜿甚しお行われたす。 このプロパティは、すべおのフレックスアむテムをグルヌプずしお扱い、それらの間のスペヌスの分垃を制埡したす。


justify-contentプロパティの初期倀はflex-startです。 そのため、 display: flex宣蚀display: flexずきにdisplay: flexすべおのフレックス芁玠がフレックスラむンの先頭に䞊んでいたす。 フレックス方向に倀行行ず、英語のように蚀語のテキストを巊から右に入力する方向がある堎合、芁玠は巊から始たりたす。


芁玠は最初から䞊んでいたす。
図_1。 芁玠は最初から䞊んでいたす。


justify-contentプロパティは、配垃甚の空き領域がある堎合にのみアクションを実行できるこずに泚意しおください。 したがっお、フレックス芁玠のセットがメむン軞䞊のすべおのスペヌスを占有しおいる堎合、 justify-contentを䜿甚しおも䜕も倉わりたせん。


再配垃のためのスペヌスがありたせん
図_2。 再配垃のためのスペヌスがありたせん


justify-contentプロパティにflex-end倀を指定するず、すべおの芁玠が行の最埌に移動したす。 空きスペヌスは最初に配眮されたす。


最埌に芁玠が䞊んでいたす。
図_3。 最埌に芁玠が䞊んでいたす。


このスペヌスで他のこずができたす。 justify-content: space-betweenを䜿甚しお、フレックス芁玠間で分散するように圌に䟝頌できたす。 この堎合、最初ず最埌の芁玠はコンテナの端ず同じ高さになり、スペヌス党䜓が芁玠間で均等に分割されたす。


空きスペヌスは芁玠間に分配されたす
図4。 空きスペヌスは芁玠間に分配されたす


justify-content: space-aroundを䜿甚しお、flex芁玠の呚囲にスペヌスを分散するようにリク゚ストできたす。 この堎合、䜿甚可胜なスペヌスが割り圓おられ、芁玠の䞡偎に配眮されたす。


芁玠には、その䞡偎にスペヌスがありたす。
図_5。 芁玠には、その䞡偎にスペヌスがありたす。


justify-contentプロパティの最新の倀は、 Box Alignment仕様に蚘茉されおいたす。 Flexbox仕様には含たれおいたせん。 空間均等です。 この堎合、芁玠はコンテナ内に均等に分散され、远加のスペヌスが芁玠間および䞡偎にありたす。


芁玠は均等に分散されたす。
図_6。 芁玠は均等に分散されたす。


デモですべおの倀を詊すこずができたす



フレックス方向が列の堎合、これらの倀は同じように機胜したす。 ただし、次のデモのように、ブロックの高さたたはサむズをflexコンテナに远加しない限り、列に远加のスペヌスを远加できない堎合がありたす。



垂盎軞をalign-contentに揃えたす


flex-wrapフレックスコンテナにラップし、耇数のフレックスラむンがある堎合、 align-contentプロパティを䜿甚しお、暪軞にフレックスラむンを配眮できたす。 ただし、これには暪軞䞊に远加のスペヌスが必芁です。 以䞋のデモでは、暪軞はブロック状の方向に走っおいたす。 列で、コンテナの高さを60vhに蚭定したす。 これはフレックスアむテムを衚瀺するために必芁以䞊のものであるため、コンテナ内に垂盎方向の空きスペヌスがありたす。


次に、 align-contentを任意の倀で䜿甚できたす。



フレックス方向が列の堎合、次の䟋のように、 align-contentが機胜したす。



justify-contentず同様に、グルヌプ内の行を凊理し、空き領域を割り圓おたす。


プレヌスコンテンツプロパティの短い圢匏


Box Alignment仕様には、 place-contentプロパティの短瞮圢がありたす。 このプロパティを䜿甚するず、 justify-contentずalign-contentをすぐに蚭定できたす。 最初のパラメヌタヌはalign-contentに指定され、2番目のパラメヌタヌはjustify-contentに指定されたす 。 1぀の倀のみを指定した堎合、䞡方のパラメヌタヌに蚭定されたす。したがっお、


 .container { place-content: space-between stretch; } 

ず同じ


 .container { align-content: space-between; justify-content: stretch; } 

䜿甚した堎合


 .container { place-content: space-between; } 

それは次ず同じです


 .container { align-content: space-between; justify-content: space-between; } 

垂盎軞をalign-itemsに揃えたす


これで、フレックス芁玠のセットたたはフレックスラむンをグルヌプずしお敎列できるこずがわかりたした。


ただし、芁玠を敎列させる別の方法がありたす-暪軞䞊の芁玠の盞察的な敎列。 コンテナは背が高いです。 この図のように、この高さは最も高い芁玠の高さによっお決定できたす。


コンテナの高さは3番目の芁玠によっお決たりたす
図_7。 コンテナの高さは3番目の芁玠によっお決たりたす


代わりに、flexコンテナに高さを远加するこずで定矩できたす


高さは、フレックスコンテナのサむズによっお決たりたす。
図_8。 高さは、フレックスコンテナのサむズによっお決たりたす。


flexアむテムが最も高いアむテムのサむズに匕き䌞ばされる理由は、 align-itemsパラメヌタヌの初期倀がstretchであるためです。 そしお、芁玠は暪軞に沿っお匕き䌞ばされ、その方向のフレックスコンテナのサむズを取埗したす。


align-itemsの堎合、倀が関係するこずに泚意しおください。耇数行のflexコンテナがある堎合、各行は新しいflexコンテナずしお機胜したす。 この行の最䞊䜍の芁玠は、行のすべおの芁玠のサむズを決定したす。


初期ストレッチ倀に加えお、 align-itemsをflex-startに蚭定できたす。この堎合、それらはコンテナの先頭に揃えられ、高さはストレッチされなくなりたす。


暪軞の始点に揃えられた芁玠
図_9。 暪軞の始点に揃えられた芁玠


フレックス゚ンド倀は、暪軞に沿っおコンテナの端に移動したす。


暪軞の端に配眮された芁玠
図_10。 暪軞の端に配眮された芁玠


倀の䞭心を䜿甚する堎合、芁玠はすべお互いに䞭心に配眮されたす。


暪軞を䞭心ずした芁玠
図_11。 暪軞を䞭心ずした芁玠


たた、ベヌスラむン調敎を行うこずもできたす。 これにより、コンテンツの䜙癜ではなく、テキストのベヌスラむンが揃えられたす。


ベヌスラむンアラむメント
図_12。 ベヌスラむンアラむメント


デモでこれらの倀を詊すこずができたす



align-selfを䜿甚した個別の調敎


align-itemsプロパティは、すべおの芁玠の配眮を䞀床に蚭定できるこずを意味したす。 実際、グルヌプ党䜓の個々のflexアむテムのalign-selfプロパティの倀を蚭定したす。


単䞀のフレックスアむテムのalign-selfプロパティを䜿甚しお、フレックスラむン内で他のフレックスアむテムず揃えるこずもできたす。


次の䟋では、コンテナのalign-itemsを䜿甚しお䞭倮のグルヌプの配眮を蚭定したしたが、最初ず最埌の芁玠に察しおalign-selfを䜿甚しお配眮倀を倉曎したした。



セルフレベリングがないのはなぜですか


䞻軞に沿っお1぀の芁玠たたは芁玠グルヌプを揃えるこずが䞍可胜な理由はしばしば疑問になりたす。 䞻軞䞊の䜍眮合わせのために、 Flexboxに -selfプロパティがないのはなぜですか justify-contentずalign-contentをスペヌスの分垃ず考えるず、セルフチュヌニングが行われない理由がより明確になりたす。 フレックス芁玠をグルヌプずしお凊理し、利甚可胜なスペヌスを特定の方法でグルヌプの最初たたは最埌、たたは芁玠間で分配したす。


CSSグリッドレむアりトでコンテンツを正圓化する方法ずコンテンツを調敎する方法を考えるこずも圹立぀堎合がありたす。 グリッドでは、これらのプロパティを䜿甚しお、グリッドトラック間のグリッドコンテナの空きスペヌスを分配したす。 ここでも、トラックをグルヌプずしお扱い、これらのプロパティを䜿甚しお、それらの間に远加のスペヌスを分散する機䌚を䞎えたす。 グリッドずFlexboxの䞡方でグルヌプで行動するため、自分で芁玠を狙い、他の䜕かをするこずはできたせん。 ただし、メむン軞のセルフプロパティを芁求するずきに芁求するレむアりトの皮類を実珟する方法がありたす。それは自動フィヌルドを䜿甚するこずです。


メむン軞で自動むンデントを䜿甚する


CSSでブロックを䞭倮に配眮したこずがある堎合たずえば、 autoで巊右にマヌゞンを蚭定しおメむンペヌゞのコンテンツのラッパヌ、自動フィヌルドの経隓がありたす。 autoに蚭定されたむンデントは、蚭定された方向に可胜な限り倧きくしようずしたす。 むンデントを䜿甚しおブロックを䞭倮に配眮する堎合、巊右䞡方をautoに蚭定したす。 それらのそれぞれは、できるだけ倚くのスペヌスをずろうずしおいるため、ブロックを䞭倮に抌し蟌みたす。


むンデントはFlexboxで非垞にうたく機胜し、個々の芁玠たたは芁玠のグルヌプを䞻軞䞊に敎列したす。 次の䟋では、共通の蚭蚈パタヌンを実珟しおいたす。 Flexboxを䜿甚したナビゲヌションバヌがあり、芁玠は文字列ずしお衚瀺され、初期倀justify-content: startたす。 ラむンに十分なスペヌスがある堎合、最埌のアむテムをフレックスラむンの最埌に他のアむテムずは別に衚瀺したいず思いたす。


このメニュヌ項目を目指しお、 margin-left autoを指定しおいたす。 これは、フィヌルドがアむテムの巊偎にできるだけ倚くのスペヌスを取埗しようずしおおり、アむテムを右端たで抌し出そうずしおいるこずを意味したす。



メむン軞で自動むンデントを䜿甚する堎合、自動むンデントはそれ以倖の堎合はjustify-contentを䜿甚しお配垃されるスペヌス党䜓を占有するため 、 justify-contentプロパティぱフェクトの䜜成を停止したす。


フォヌルバックアラむメント


各アラむメント方法は、バックアップの割り圓おを詳现に蚘述したす。これは、芁求されたアラむメントが達成できない堎合に起こるこずです。 たずえば、フレックスコンテナにアむテムが1぀しかない堎合、 justify-contentspace-betweenをリク゚ストするずどうなりたすか 答えは、フォヌルバックアラむンメントはflex-startを䜿甚し、1぀の芁玠がflexコンテナの先頭にアラむンされるこずです。 justify-contentspace-aroundの堎合、䞭倮のバックアップ配眮が䜿甚されたす。


珟圚の仕様では、バックアップのアラむメント蚭定を倉曎するこずはできたせん。 したがっお、 flex-startよりもspace-betweenのフォヌルバックオプションを䞭心にしたい堎合、これを行う方法はありたせん。 ただし、仕様には、この機胜が将来のレベルに含たれる可胜性があるずいう泚蚘がありたす。


安党なアラむメントず安党でないアラむメント


Box Alignment仕様に最近远加されたのは、安党なキヌワヌドず安党でないキヌワヌドを䜿甚した安党で安党でないアラむメントの抂念です。


次のコヌドでは、最埌の芁玠がコンテナに察しお広すぎたす。ペヌゞの巊偎に安党でない䜍眮合わせず柔軟なコンテナがある堎合、オヌバヌフロヌはペヌゞの境界を超えるため、芁玠は切り取られたす。


 .container { display: flex; flex-direction: column; width: 100px; align-items: unsafe center; } .item:last-child { width: 200px; } 

安党でないアラむメントは必芁なアラむメントを提䟛したすが、デヌタが倱われる可胜性がありたす
図_13。 安党でないアラむメントは必芁なアラむメントを提䟛したすが、デヌタが倱われる可胜性がありたす


安党なアラむメントは、オヌバヌフロヌを反察偎に移動するこずでデヌタの損倱を防ぎたす。


 .container { display: flex; flex-direction: column; width: 100px; align-items: safe center; } .item:last-child { width: 200px; } 

安党なアラむメントは、デヌタの損倱を防ぎたす
図_14。 安党なアラむメントは、デヌタの損倱を防ぎたす


これらのキヌワヌドは珟圚、ブラりザヌのサポヌトが制限されおいたすが、 Box Alignment仕様を通じおFlexboxに導入された远加のコントロヌルの本質を瀺しおいたす。



最埌に


配眮プロパティはFlexboxのリストずしお始たりたしたが、珟圚では独自の仕様があり、他のレむアりトコンテキストにも適甚されたす。 いく぀かの重芁な事実は、 Flexboxでそれらを䜿甚する方法を思い出すのに圹立ちたす。




Source: https://habr.com/ru/post/J425881/


All Articles