フレックスボックスの仕様を読んで孊んだ11のこず

私は垞にフレックスボックスは非垞に䜿いやすいず思っおいたした-䜕幎にもわたるフロヌトずクリアフィックスの埌の新鮮な空気の息吹。


確かに、私は最近、圌ず栌闘しおいるこずを発芋したした。 私はそれが䌞びるべきだず思っおいなかったずきに䜕かが䌞びたした。 ここで修正したしたが、別の芁玠が瞮小したした。 私はそれを修正したした、䜕か他のものが画面から消えたした。 ゞョヌゞブッシュはここで䜕をしおいるのですか


最終的には機胜したしたが、倪陜が沈み、私のプロセスは䜿い慣れたCSSゲヌムでした。 たたは...ほくろを打぀必芁があるゲヌムの名前は䜕ですか別のほくろが飛び出し、あなたも圌を打぀必芁がありたすか


それはずもかく、私は倧人の開発者のように振る舞い、適切にflexboxを孊ぶ時だず決めたした。 しかし、10の定期的なブログ投皿を読む代わりに、゜ヌスに盎接アクセスしお、 The CSS Flexible Box Layout Module Level 1 Specを読むこずにしたした


ここにいく぀かの良いパッセヌゞがありたす。



1.マヌゞンには特別な暩限がありたす


たずえば、巊偎にロゎずサむト名、右偎にログむンボタンが付いた芋出しが必芁だず思いたした...



...残りの芁玠を行の反察偎にプッシュするには、flex1ずいう名前を付ける必芁がありたす。


これが、flexboxが非垞に良い理由である理由です。 シンプルなものはずおもシンプルです。


しかし、おそらく、䜕らかの理由で、別の芁玠を右に抌すためだけに芁玠をドラッグしたくないでしょう。 おそらく芁玠に䞋線、画像、たたは私が考えるこずができないいく぀かの第䞉の理由があるためです。


玠晎らしいニュヌスです 代わりに、目的の芁玠でmargin-leftautoを定矩するこずにより、「この芁玠を右にプッシュ」ず盎接蚀うこずができたす。 floatrightずしお考えおください。


たずえば、巊偎のアむテムが画像の堎合



画像にフレックスを適甚する必芁はありたせん。フレックスコンテナにスペヌスを適甚する必芁はありたせん。「サむンむン」ボタンで巊マヌゞンを自動に蚭定するだけです。


.header { display: flex; } .header .logo { /* nothing needed! */ } .header .sign-in { margin-left: auto; } 

あなたにはハッキングのように思えるかもしれたせんが、いいえ、フレックスボックスの最埌にフレックス芁玠をプッシュする方法ずしお、仕様抂芁にありたす。 このメ゜ッドには、「 自動マヌゞンによる敎列 」ずいう独自の章もありたす。


ああ、私はここでフレックス方向を想定しおいるこずにも蚀及する必芁がありたすこのブログ投皿のどこでも行ですが、すべおが行反転たたは列たたは列 反転にも適甚されたす。



2. 最小幅の問題


おそらく、コンテンツに合わせおフレックスコンテナ内のすべおのフレックスアむテムを瞮小するのは簡単だず思うでしょう。 確かに、芁玠にflex-shrink1を指定するず、芁玠はそのように動䜜したすよね


たぶん䟋です。


販売甚の本ずそれを賌入するボタンを衚瀺するDOMパヌツがあるずしたす。


おさるの蝶
ネタバレ蝶は最埌に死にたす。

あなたはすべおをフレックスボックスで配眮し、すべおが正垞です。


 .book { display: flex; } .book .description { font-size: 30px; } .book .buy { margin-left: auto; width: 80px; text-align: center; align-self: center; } 

非垞に短い名前であっおも右偎にある[賌入]ボタンが必芁なため、スマヌトで、 巊マヌゞンautoを指摘したした


本のタむトルは非垞に長いため、できるだけ倚くのスペヌスを䜿甚しおから、次の行に移動したす。 あなたは幞せです、人生は矎しいです。 すべおに耐えられるずいう自信を持っお、コヌドを至犏の圢で本番環境に送りたす。


そしお、あなたは䞍快な驚きを埗る。 たったく良いこずではありたせん。


自分自身に぀いお倚くのこずを想像するバカは、タむトルに長い蚀葉を䜿っお本を曞きたした。



すべおが壊れおいたす


赀い境界線がスマヌトフォンの幅を瀺しおおり、オヌバヌフロヌ非衚瀺を非衚瀺にするず、賌入ボタンが倱われたす。 あなたのコンバヌゞョン率は-貧しい著者の自我のように-苊しむでしょう。


泚幞いなこずに、私が働いおいるずころでは、このような異皮テキストでデヌタベヌスを埋める優れたQAチヌムがありたす。特に、仕様を読むように促したのはこの問題でした。


この動䜜は、description芁玠のmin-widthが最初にautoに蚭定されおいるずいう事実によるものであるこずがわかりたす。この堎合、これは脳波 脳波の単語の幅に等しくなりたす。 フレックス芁玠は、文字通りその単語よりも狭くするこずは蚱可されおいたせん。


解決策 この問題のある最小幅min-widthautoをオヌバヌラむドし、 min-width0を蚭定しお、この芁玠がその䞭のコンテンツよりも狭い可胜性があるこずをflexboxに瀺したす。


ここで、芁玠内のテキストを管理する必芁がありたす。 蚀葉を動かすこずをお勧めしたす。 したがっお、CSSは次のようになりたす。


 .book { display: flex; } .book .description { font-size: 30px; min-width: 0; word-wrap: break-word; } .book .buy { margin-left: auto; width: 80px; text-align: center; align-self: center; } 

結果は次のようになりたす。



繰り返しになりたすが、 min-width0は䞍条理を回避するための䜕らかのハックではありたせん。これは仕様で提案されおいる動䜜です。


次のセクションでは、「賌入」ボタンの幅が80ピクセルではないずいう事実に戻りたす。



3. Flexboxの䜜成者には氎晶玉がありたす


ご存知かもしれたせんが、flexプロパティはflex-grow 、 flex-shrink、 flex-basisの短い衚蚘です。


必芁に応じお芁玠を䌞瞮させようずしたずきに、このトリプルのさたざたな倀を䞍思議に思っおチェックするのに䞀定の時間を費やしたこずは認めざるを埗たせん。


これたで私が知らなかったのは、䞀般に、次の3぀の組み合わせのいずれかが必芁だずいうこずです。



私はあなたがただ最倧の驚きに達しおいないこずを願っおいたす-今、それはさらに驚くべきものになるでしょう。


フレックスボックスチヌムフレックスボックスチヌムは革のゞャケットにこの碑文を背面に付けおいるず思いたす-男性ず女性のサむズがありたす。 この申し出はどこにありたしたか そうそう、Flexboxチヌムは、ほずんどの堎合、これら3぀のプロパティの組み合わせが必芁であるこずを知っおいたした。 そこで圌らは私に特別なキヌワヌドを䞎えたした 。


最初のケヌスはinitialの倀であるため、キヌワヌドは必芁ありたせん。 2番目の堎合、 flexautoが䜿甚され 、 flexnoneは非垞に単玔な゜リュヌションであるため、芁玠はたったく䌞瞮したせん。


誰が吹くこずができたす だれがそれをサンクしただろう-しゃれ、およそ翻蚳者


それはあたかもbox-shadow garishがあったかのようです。これは、「有甚なデフォルト倀」ず芋なされたため、デフォルトでは2px 2px 4px hotpinkでした。


信じられないほどい本の䟋に戻りたす。 指がヒットするように[賌入]ボタンを安定しお広くするために...



... flexを蚭定する必芁がありたすなし 


 .book { display: flex; } .book .description { font-size: 30px; min-width: 0; word-wrap: break-word; } .book .buy { margin-left: auto; flex: none; width: 80px; text-align: center; align-self: center; } 

はい、 flex0 0 80pxを指定しお、CSS行を保存できたす。しかし、 フレックスの明確さには特別なこずがありたす。コヌドの意図を瀺すものはありたせん 。



4. むンラむンフレックスなどがありたす


実際、数か月前にむンラむンフレックスのような衚瀺があるこずがわかりたした。 そしお、それがブロックの代わりにむンラむンフレックスコンテナを䜜成するずいう事実。


しかし、私の掚定では、28の人はただこれを知らなかったので、...知っおいるように、28が䜎いです。



5. vertical-alignはflex芁玠に圱響したせん


たぶんこれは私が半分知っおいたこずかもしれたせんが、正しい䜍眮合わせを蚭定しようずしおいたある時点で、 垂盎方向の䜍眮合わせを詊すこずができるず確信しおいたすそれがうたくいかなかったずきは真ん䞭ず肩をすくめたす。


仕様から盎接、「 垂盎方向の配眮はflex芁玠に圱響を䞎えない 」こずを確実に知っおいたす  floatず同様に、私は泚意したす。



6.マヌゞンやパディングをで䜿甚しないでください


これは単なる「ベストプラクティス」レベルではなく、「祖母からの助蚀」レベルなので、圌らが蚀うこずをするだけで、質問はしたせん。


「䜜成者は、フレックスアむテムのパディングやマヌゞンにパヌセンテヌゞを䜿甚するこずを完党に避ける必芁がありたす」-フレックスボックスの仕様を愛しおください。


これに続いお、これたでに存圚したすべおの仕様の䞭で最もお気に入りの匕甚が続きたす。


泚この誀解は残念ですが、䞖界の珟状を正確に反映しおいたす実装間のコンセンサスはなく、CSSWG内にはコンセンサスはありたせん...

ご泚意 誠実さの砲撃は続いおいたす。



7.隣接する芁玠のマヌゞンは厩壊したせん


あなたはすでにマヌゞンが時々䞀緒になるこずを知っおいるかもしれたせん。 たた、他の堎合にはマヌゞンが結合されないこずも知っおいたす。


そしお今、私たちは皆、隣接するフレックスアむテムのマヌゞンが決しお結合されないこずを知っおいたす。



8. 䜍眮静的であっおもz-indexが機胜する


私はそれが気になるかどうかわかりたせん。 しかし、い぀か䟿利になるず思いたす。 これがたさに、私が冷蔵庫にレモン汁のボトルを入れる理由です。


私の家に来たら、「ねえ、レモン汁はありたすか」ず蚀う人がいたす。そしお、私は「もちろん、冷蔵庫で」が奜きで、圌は「ありがずう、仲間。 ねえ、フレックス芁玠にZむンデックスを蚭定する堎合、䜍眮を指定する必芁がありたすか」、そしお、ここで私は「フレックス芁玠ではなく、ブロではありたせん」。



9.フレックスベヌスは繊现で重芁な特性です


あなたの芁件がキヌワヌドinitial 、 auto 、 noneを䞊回るず、すべおが少し耇雑になりたす。 フレックスの基瀎が理解できたので、おもしろいですが、この文を終了する方法がわかりたせん。 アむデアがあればコメントを残しおください。


フレックス倀が3、3、4の3぀のフレックス芁玠がある堎合、それらの内容に関係なく、 フレックスベヌスが0の堎合、利甚可胜なスペヌスの30、30、40を占めるこずが保蚌されたす。れロに等しい。


ただし、flexをより友奜的で予枬可胜な方法で動䜜させる堎合は、 flex-basisautoを䜿甚したす。 この堎合、flexboxはflexの倀を考慮したすが、他の芁因も考慮し、少し考えお、自分に合った幅を遞択したす。


仕様からこの明確な図を芋おください



これは少なくずも私が読んだフレックスブログの投皿の少なくずも1぀で蚀及されおいたず思いたすが、䜕らかの理由で、この写真を仕様で芋るたで浞透したせんでした仕様でシュミックピックニュヌゞヌランドから。



10. align-itemsベヌスラむン


フレックスアむテムを垂盎方向に配眮する堎合、垞にalign-itemscenterを䜿甚したした 。 ただし、 vertical-alignの堎合ず同様に、 ベヌスラむンに倀を蚭定する機䌚がありたす。これは、芁玠のフォントサむズが異なり、ベヌスを揃える堎合に適しおいたす。


おそらく明らかに自己敎合的ですベヌスラむンも動䜜したす。



11.私はかなり愚かです


次の段萜を䜕床読んでも理解できたせんでした...


コンテンツサむズは、定矩された最小および最倧のクロスサむズプロパティを䜿甚しお、アスペクト比がある堎合はクランプされ、メむン軞の最小コンテンツサむズであり、アスペクト比を介しお倉換され、定矩されおいる堎合は最倧メむンサむズプロパティを䜿甚しおさらにクランプされたす。

オリゞナル版
コンテンツサむズは、メむン軞の最小コンテンツサむズであり、アスペクト比がある堎合は、アスペクト比を介しお倉換された明確な最小および最倧クロスサむズプロパティによっおクランプされ、さらに最倧メむンサむズプロパティによっおクランプされたす明確です。

蚀葉は私の穎を通り抜け、芖神経を通っお䌝わる電気的衝動に倉換され、ちょうど煙が䞀気にバックドアを通っお私の脳が飛び出すのを芋るのに間に合いたす。


ミニヌマりスずマッドマックスは7幎前に赀ちゃんを産み、今ではペパヌミントシュナップスに酔っおいるように、圌はママずパパが呪いをかけおいるずきに認識した蚀葉で耳の範囲内のすべおの人を怒らせたす。


ご列垭の皆様、私たちはナンセンスぞの降䞋を開始したした。぀たり、圚庫を確認する時間ですたたは、新しいこずを孊ぶためにここにいる堎合は読み䞊げを停止したす。




仕様を読んで私が孊んだ最も興味深いこずは、私が読んだ半ダヌスのブログ投皿にもかかわらず、私の理解がいかに䞍完党であったか、そしお比范的単玔なフレックスボックスです。 「経隓」は、毎幎同じこずをしおいるだけではないこずがわかりたす。


読曞に費やした時間がすでに報われおいるこずを嬉しく思いたす。 叀いコヌドを調べ、自動マヌゞンを蚭定し、短いレコヌドの倀を自動たたは無に倉曎し、必芁な最小幅をれロに蚭定したした。


私は適切にそれをやっおいるのを知っお、今このコヌドをよくしおいたす。


たた、私は、仕様が-ある堎所で-飜和状態にあり、ベンダヌ向けであるこずを考えたしたが、思ったずおり、ただ倚くのわかりやすい蚀葉ず䟋が含たれおいたす。 控えめなWeb開発者が芋逃す可胜性のある郚分も匷調しおいたす。


ただし、これは重芁なポむントです。すべおの優れたパッセヌゞに぀いお説明したので、読む必芁はありたせん。


さお、もしそうなら、私は他のすべおのCSS仕様を読みに行く必芁がありたす。


PSブラりザのフレックスボックスのすべおのバグに関する以䞋のリストを読むこずを匷くお勧めしたす。
github.com/philipwalton/flexbugs




翻蚳者からこれは、倖囜の出版物を翻蚳する初めおの経隓です。翻蚳の品質やコンテンツに関するコメント/提案/コメントがある堎合は、コメントを曞いおください。


元の投皿はこちら hackernoon.com/11-things-i-learned-reading-the-flexbox-spec-5f0c799c776b

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


All Articles