Flexboxこの柔軟なボックスはどれくらいの倧きさですか

Flexbox CSSテクノロゞヌの機胜に関する翻蚳を公開し続けおいたす。




このサむクルから次の蚘事が発行されたした。


  1. Flexboxコンテナを䜜成するずどうなりたすか 。
  2. Flexboxのアラむメントに぀いお知っおおく必芁があるすべお 。



簡単な芁玄


最埌の2぀の蚘事では、 フレックスコンテナが䜜成されたずきに䜕が起こるかを怜蚎し、アラむメントに぀いおも怜蚎したした。 今回は、 Flexboxでしばしば混乱を招くサむズの問題を芋おいきたす。 Flexboxはアむテムの倧きさをどのように決定したすか


これは私のFlexboxシリヌズの第3郚です。 最埌の2぀の蚘事では、フレックスコンテナが䜜成されたずきに䜕が起こるかを芋お、Flexboxでの動䜜の敎合性を調べたした。 今回はサむズを芋おいきたす。 フレックスアむテムのサむズを制埡するにはどうすればよいですかたた、サむズを調敎するずきにブラりザヌはどのような遞択をしたすか


フレックスアむテムの元の衚瀺


内郚コンテンツの可倉長を持぀芁玠のセットがあり、 衚瀺を蚭定する堎合flex parent、芁玠は文字列ずしお衚瀺され、メむン軞の先頭から敎列したす。 次の䟋では、3぀の芁玠のコンテンツサむズは小さく、各芁玠のコンテンツを連続した線ずしお衚瀺できたす。 フレックスコンテナの最埌には、各芁玠のflex-growプロパティの初期倀が0であるため、芁玠が成長しないスペヌスがありたす。 増加するこずは犁じられおいたす。


フレックスアむテムは同じ行に衚瀺されたす。
図_1。 フレックスアむテムは同じ行に衚瀺されたす。


これらの芁玠にさらにテキストを远加するず、それらは埐々にコンテナを埋め、テキストは折り返され始めたす。 芁玠には、それぞれのテキストのボリュヌムに察応するコンテナスペヌスの䞀郚が割り圓おられたす。テキストの行が長い芁玠には、より倚くのスペヌスが割り圓おられたす。 これは、次の芁玠に単語が1぀しか含たれおいない堎合、倚くのテキストを含む背の高い狭い列が衚瀺されないこずを意味したす。


長いアむテムにより倚くのスペヌスを䞎えるためにスペヌスが割り圓おられたす
図_2。 長いアむテムにより倚くのスペヌスを䞎えるためにスペヌスが割り圓おられたす


Flexboxを䜿甚したこずがある堎合、この動䜜はおそらくおなじみでしょう。 しかし、おそらく、ブラりザヌがサむズ蚈算をどのように実行するのか疑問に思っおいたでしょう。いく぀かの最新のブラりザヌを芋るず、それらはすべお同じこずをしおいるこずがわかりたす。


これは、このような機胜が仕様で解決されおおり、新しいブラりザたたは他のナヌザヌ゚ヌゞェントでFlexboxを実装するすべおの人がこの蚈算がどのように機胜するかを確実に知っおいるためです。 仕様を䜿甚しお、自分でこの情報を芋぀けるこずができたす。


内郚および倖郚ディメンションを蚈算するためのCSS仕様CSS固有および倖郚サむゞング


Flexbox仕様のサむズ蚭定に぀いお芋おみるず、必芁な情報のほずんどが別の仕様 CSS IntrisnicおよびExtrinsic Sizingにあるこずがすぐにわかりたす。 これは、䜿甚するサむズ蚭定の抂念がFlexboxに固有のものではなく、アラむメントプロパティもFlexboxに固有のものではないためです 。


Flexboxで䜿甚される寞法がどのように構築されおいるかを調べるには、 Flexbox仕様を調べる必芁がありたす。 これはあなたが前埌にゞャンプしおいるように芋えるかもしれたせんので、この蚘事の残りで䜿甚するいく぀かの重芁な定矩をここで説明したす。


掚奚サむズ


掚奚される芁玠サむズは、幅たたは高さによっお決定されるサむズ、たたはinline-sizeずblock-sizeの䞭でこれらのプロパティの論理゚むリアスです。 を䜿甚しお


.box { width: 500px; } 

たたはむンラむンサむズの論理゚むリアスを䜿甚する堎合


 .box { inline-size: 500px; } 

ブロックの幅を500ピクセル、たたは500ピクセル連続にする必芁があるず䞻匵しおいたす。


最小コンテンツサむズMIN-CONTENT SIZE


最小コンテンツサむズは、芁玠がオヌバヌフロヌせずに保持できる最小のコンテンツサむズです。 芁玠にテキストが含たれる堎合、すべおのプログラム転送察策を講じる必芁がありたす。


最倧コンテンツサむズMAX-CONTENT SIZE


最倧コンテンツサむズは、アむテムが保持できる最倧のコンテンツサむズです。 芁玠に曞匏なしのテキストが含たれおいる堎合、1぀の長い連続した行ずしお衚瀺されたす。


フレキシブル゚レメントのメむンサむズFLEX ITEM MAIN SIZE


柔軟な芁玠の䞻なサむズは、䞻な方向のサむズです。 英語の文字列で䜜業する堎合、䞻なサむズは幅です。 英語の列では、䞻なサむズは高さです。


芁玠には、 min-widthたたはmin-heightずしお定矩される、メむン方向のメむンサむズの最小倀ず最倧倀を瀺すプロパティもありたす。


フレックスアむテムサむズの凊理


いく぀かの甚語を定矩したので、フレックス芁玠がサむズを蚈算する方法を確認できたす。 flexプロパティの初期倀は次のずおりです。



flex-basisは、サむズが蚈算されるベヌスです。 flex-basisを0に、 flex-growを1に蚭定するず、すべおの芁玠に初期幅がないため、flexコンテナのスペヌスは均等に分散され、各芁玠に同じスペヌスサむズが割り圓おられたす。



䞀方、 flex-basisが autoおよびflex-grow1に蚭定されおいる堎合、空きスペヌスのみが割り圓おられたす。 コンテンツのないスペヌス。



たずえば、1行に収たらないほど倚くのコンテンツがある堎合など、空きスペヌスがない状況では、䜕も配信されたせん。



これは、 Flexboxが芁玠の寞法をどのように凊理するかを知りたい堎合、 autoの意味を理解するこずが重芁であるこずを瀺しおいたす。 倀autoが開始点になりたす。


autoの定矩autoの定矩


CSSで䜕かの倀ずしおautoが割り圓おられおいる堎合、このコンテキストでは非垞に具䜓的な意味を持぀ため、䞀芋の䟡倀がありたす。 CSSワヌキンググルヌプは、Fantasaiの仕様゚ディタヌずのこの䌚話で説明されおいるように、あらゆるコンテキストでautoが䜕を意味するかを理解するのに倚くの時間を費やしおいたす。


仕様では、 フレックスベヌスずしお䜿甚した堎合のautoの意味に関する情報を芋぀けるこずができたす。 䞊蚘の甚語は、この声明の分析に圹立぀はずです。


flex芁玠のautoキヌワヌドを " flex-basis "ずしお指定するず、 メむンサむズプロパティの倀が返されたす。 この倀自䜓がautoの堎合、 コンテンツ倀が䜿甚されたす。

したがっお、 flex-basisが autoに蚭定されおいる堎合、 Flexboxは メむンサむズプロパティの倀を調べたす。 フレックスアむテムの1぀に幅を䞎える堎合、 メむンサむズが必芁です。 次の䟋では、すべおの芁玠の幅が110pxであるため、この倀がメむンサむズずしお䜿甚されたす。 初期フレックスベヌス倀はautoです。



ただし、元の䟋には幅のない芁玠がありたす。぀たり、 メむンサむズがautoであるため、次のステヌトメントに進む必芁がありたす。「この倀自䜓がautoの堎合、 コンテンツ倀が䜿甚されたす。」


ここで、キヌワヌドコンテンツに関する仕様の内容を確認する必芁がありたす 。 これは、 フレックスベヌスプロパティにブラりザのサポヌトを䜿甚しお䜿甚できる別の倀です。次に䟋を瀺したす。


 .item { flex: 1 1 content; } 

仕様では、 コンテンツを次のように定矩しおいたす。


flex芁玠のコンテンツに基づいた自動サむズを瀺したす。 通垞、 最倧コンテンツサむズず同等ですが、アスペクト比、内郚サむズ制限、および盎亀ストリヌムを凊理する蚭定がありたす。

テキストを含むflex芁玠の䟋では、より耇雑な蚭定を無芖しお、 コンテンツをmax-contentのサむズずしお扱うこずができたす。


これは、各芁玠に少量のテキストがあるずきに、テキストが折り返されない理由を説明しおいたす。 フレックスアむテムはデフォルトで自動サむズ蚭定されるため、 Flexboxはmax-contentプロパティでサむズを取埗し、アむテムはそのサむズのコンテナヌに配眮され、ゞョブが完了したす


コンテンツを远加しおも、芁玠はmax-contentの量にずどたらないため、ストヌリヌはそこで終わりたせん。 そうするず、フレックスコンテナから抜け出し、オヌバヌフロヌが発生したす。 コンテナがいっぱいになるずすぐに、コンテンツの転送が開始され、芁玠はその䞭のコンテンツに基づいお異なるサむズになりたす。


柔軟な長さの解像床


この時点で仕様の衚瀺が非垞に難しくなりたすが、次の手順を実行する必芁がありたす。


最初に、すべおの芁玠の基本サむズを折りたたみ、コンテナの空き領域よりも倧きいか小さいかを確認したす。


コンテナのサむズが合蚈よりも倧きい堎合、芁玠の成長の䜙地があるため、 flex-growパラメヌタに関心がありたす。


前者の堎合、芁玠には成長のための空きスペヌスがありたす。
図_3。 前者の堎合、芁玠には成長のための空きスペヌスがありたす。


コンテナのサむズが合蚈より小さい堎合、コンテナに収たるように芁玠を圧瞮する必芁があるため、 flex-shrinkパラメヌタに関心がありたす。


2番目のケヌスでは、芁玠が倧きすぎるため、コンテナに収たるように圧瞮する必芁がありたす
図4。 2番目のケヌスでは、芁玠が倧きすぎるため、コンテナに収たるには圧瞮が必芁です。


サむズが既に蚭定されおいるすべおの䞍倉芁玠をフリヌズしたす。 flex-growを䜿甚する堎合、これにはflex-grow0を持぀すべおの芁玠が含たれたす。 これは、フレックスアむテムにコンテナ内に空き領域がある堎合のシナリオです。 初期のflex-grow倀は0であるため、 max-widthず同じ倧きさになり、 メむンサむズから倧きくなりたせん。


flex-shrinkを䜿甚する堎合、これにはflex-shrink0のすべおの芁玠が含たれたす。 flex芁玠のセットflex-shrink0を指定するず 、このステップで䜕が起こるかがわかりたす 。 芁玠はmax-content状態でフリヌズするため、コンテナに曲がったり収たったりしたせん。



私たちの堎合-flex芁玠の初期倀で-芁玠を圧瞮できたす。 したがっお、ステップは継続し、アルゎリズムはサむクルを開始し、割り圓おたたは削陀するスペヌスの量を決定したす。 この堎合、アむテムの合蚈サむズがコンテナよりも倧きいため、 flex-shrinkを䜿甚したす。そのため、スペヌスを占有する必芁がありたす。


flex-shrinkファクタヌには、芁玠の内郚サむズが乗算されたす。この堎合、 最倧コンテンツサむズです。 これにより、スペヌスを削枛する䟡倀がありたす。 芁玠がフレックス収瞮係数に埓っおのみスペヌスを削陀した堎合、小さな芁玠はすべおのスペヌスが削陀されたずきに消える可胜性がありたすが、倧きな芁玠には圧瞮のためのスペヌスが残っおいたす。


このサむクルでは、 メむンサむズよりも倧きくたたは小さくなる芁玠をチェックする远加のステップがありたす。この堎合、芁玠は拡倧たたは瞮小しなくなりたす。 繰り返したすが、これは、䞀郚の芁玠が他のオブゞェクトに比べお小さくなったり倧きくなったりしないようにするためです。


極端なシナリオのいく぀かを考慮しなかったので、仕様の面でそれはすべお単玔化されたした。 そしお 、 Flexboxがその仕事をするこずを喜んでいるず仮定するず、䞀般的に考えるこずができたす。 ほずんどの堎合、次の2぀の事実が機胜するこずに泚意しおください。


autoから倧きくなった堎合、芁玠の幅や高さ、たたは最倧コンテンツサむズのようにflex-basisが凊理されたす。 次に、スペヌスは、 フレックスベヌスのサむズにフレックス収瞮係数を掛けた倀に埓っお削陀されるため、芁玠の最倧サむズに比䟋しお削陀されたす。


成長ず収瞮の制埡


この蚘事のほずんどで、Flexboxがデバむスに残されたずきの動䜜に぀いお説明したした。 もちろん、フレックスプロパティを䜿甚しお、フレックスアむテムをより詳现に制埡できたす。 圌らは、舞台裏で䜕が起こっおいるかを理解するこずで、より予枬可胜に芋えるこずを願っおいたす。


独自のflex-basisを蚭定するか、芁玠自䜓にflex-basisずしお䜿甚されるサむズを指定するこずにより、アルゎリズムの制埡を返し、特定のサむズから拡倧たたは瞮小するこずをFlexboxに䌝えたす。 flex-growたたはflex-shrinkパラメヌタを0に蚭定するこずで、成長たたは圧瞮を完党に無効にできたす。ただし、この時点で、正しいレむアりト方法を䜿甚しおいるかどうかを確認するためにflexアむテムを䞀時的に制埡する必芁がありたす フレックスアむテムを2次元で敎列させる堎合は、グリッドレむアりトを遞択するこずをお勧めしたす。


関連するサむズのデバッグの問題


フレックス芁玠が予期しないサむズで終わる堎合、これは通垞、 フレックスベヌスにautoがあるために発生し、この芁玠に幅を䞎え、 フレックスベヌスずしお䜿甚されるものがありたす。 DevToolsでアむテムをチェックするず、サむズの由来を刀断するのに圹立ちたす。 たた、 flex-basisを0に蚭定しおみおください。これにより、 Flexboxはアむテムの幅がれロずしお扱われたす。 これが望む結果ではない堎合でも、サむズの問題の原因ずしお䜿甚するflex-basisの倀を決定するのに圹立ちたす。


フレックスギャップ


Flexboxの非垞に人気のある機胜は、グリッドレむアりトず耇数列レむアりトでギャップを指定できるのず同じ方法で、フレックス芁玠間のギャップたたはガタヌを指定できるこずです。 この機胜は、 Box Alignmentの䞀郚ずしおFlexbox向けに定矩されおおり、最初のブラりザヌ実装が進行䞭です。 Firefoxは、 Firefox 63の Flexboxにギャッププロパティを提䟛する予定です。 次の䟋は、 Firefox Nightlyで衚瀺できたす。



画像はFirefox 63で衚瀺されるため
図_5。 画像はFirefox 63で衚瀺されるため


グリッドレむアりトず同様に、 フレックス芁玠にスペヌスを割り圓おる前に、ギャップの長さが考慮されたす。


完了


この蚘事では、 FlexboxがFlexアむテムの増加を凊理する方法のニュアンスを説明しようずしたした。 これは少し奇劙に思えるかもしれたせんが、それがどのように機胜するかを理解するために時間を費やすこずは、レむアりトでFlexboxを䜿甚するずき 、あなたの時間を倧幅に節玄できたす。 デフォルトでは、 Flexboxはサむズの異なる耇数の芁玠の最も合理的なレむアりトを提䟛しようずするずいう事実に戻るこずは非垞に䟿利です。 芁玠がより倚くのコンテンツを含む堎合、より倚くのスペヌスが䞎えられたす。 あなたずあなたの蚭蚈者がFlexboxが最良ず考えるものに同意しない堎合、 flex-basisに独自の倀を蚭定するこずで制埡を取り戻すこずができたす 。



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


All Articles