ホームページ >ウェブフロントエンド >CSSチュートリアル >マスタードを切ることでフレックスボックスに移行します

マスタードを切ることでフレックスボックスに移行します

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-02-25 22:20:12713ブラウズ

Migrating to Flexbox by Cutting the Mustard

マスタードを切ることでフレックスボックスに移行します

キーテイクアウト

  • この記事では、CSSフロートを使用してFlexBoxへの移行について、CSSのレイアウトを構築するための遷移について説明します。 FlexBoxの古い構文とTweener構文の制限を強調し、新しい構文を完全に実装するTweener構文とブラウザバージョンのみをターゲットにすることをお勧めします。
  • 「マスタードの切断」または機能検出の概念は、どのブラウザー/デバイス/ユーザーエージェントが使用されており、利用可能なテクノロジーに最も適切なソリューションを提供するかを特定する方法として導入されています。これは、Plain JavaScriptまたはModernizrを使用して実行できます。
  • 著者は、SASSを使用してCSS出力のサイズを縮小し、維持を容易にすることを提案しています。また、FlexBoxの実装は、プログレッシブエンハンスメントの概念により、各エクスペリエンスでまったく同じように見えないことも言及しています。 この記事は、ブラウザ向けに新機能が開発されているため、機能検出に対するこのアプローチが将来の要件に合わせて適応および進化できることを強調することで締めくくります。それは、読者が次のプロジェクトでFlexBoxに精通していることを奨励しています。
  • フロントエンド開発者として、CSSフロートを使用してFlexBoxの新しいエキサイティングな世界に飛び込むことから離れる時が来ました。 CSSフロートは、レイアウトのスタイリングへの時代遅れのアプローチです。バージョン4.0以来、インターネットエクスプローラーで利用可能であり、回避策は順応性があります(ClearFixハックを含み、列をラッピングするためにnth-child pseudo-classを使用しています)。 この記事の主なトピックは、その断片化を考慮して複数のブラウザにFlexBoxを実装する方法です。 FlexBoxに精通したい場合は、多くの優れたリソースがあります。次のことを強くお勧めします。
  • FlexBoxを使用する準備はできていますか? SitePointのNick Salloum
CSS-TricksのChris CoyierによるFlexBoxの完全なガイドMSDNのインターネットエクスプローラー10のフレキシブルボックス(「FlexBox」)レイアウト(オプション)

この記事の終わりまでに、できるはずです:

  • レスポンシブWebサイトのターゲットにするFlexBoxのバージョンを理解してください。
  • 機能検出(マスタードの切断)を介してFlexBoxを使用し、レガシーブラウザーにフォールバックを提供します。
  • ほとんどの状況でIE条件付きコメントを使用することから離れて移動します。 レガシーフォールバックを備えた基本的な2×2グリッドを作成することにより、FlexBoxの実用的な使用を示します。
  • flexboxの簡単な歴史
  • フレキシブルボックスレイアウトモジュール(別名FlexBox)は、CSSのレイアウトを構築する新しい方法です。複数の改訂を受け、比較的短い存在が大幅に進化しています。執筆時点では、FlexBoxはまだW3Cワーキングドラフトですが、他の基準と同様に、生産環境で魅力的ではないはずです。
  • 標準には3つの反復があり、一般に古い構文、Tweener構文、新しい構文と呼ばれます。
FlexBoxの制限は十分に文書化されています:

古い構文はFlex-Wrapをサポートしていません

Tweener構文は、IE 10(モバイルを含む)でのみサポートされています。

新しい構文は、Firefox(22-27)にFlex-wrapおよびFlex-flowの特性が欠落しているため、完全には実装されていません。

ラッピング(Flex-Wrap)は、レスポンシブグリッドを作成するために必要な仕様の重要な機能です。このため、新しい構文を完全に実装するTweenerの構文とブラウザーのバージョンのみをターゲットにすることをお勧めします。

これにより、次のブラウザバージョンが残ります
  • Internet Explorer 10(-ms-プレフィックスを使用した構文のtweener)
  • Internet Explorer 11およびEdge(新しい構文)
  • firefox 28(新しい構文)
Chrome 21-28(-webkit-プレフィックスを使用した新しい構文)

Chrome 29(新しい構文)

safari 6.1(-webkit -prefixを使用した新しい構文)
  • iOS Safari 7.0(-webkit-プレフィックスを備えた新しい構文)
  • FlexBoxをサポートしていない重要な市場シェアを持つブラウザがあるため、これらはCSSフロートを使用することにフォールバックするはずです。しかし、これはコードでどのように表現できますか? FlexBoxの代わりにフロートを使用してCSSを受信する必要があるブラウザバージョンを区別する最良の方法は何ですか?新しい構文をサポートするがラッピングをサポートしないFirefoxのバージョンを確実に保証するために使用できる戦略は、レガシーとして識別されますか?
  • 紹介:マスタードを切る。
  • マスタードの切断(機能検出)
  • 以前に技術用語として聞いたことがない場合、「マスタードのカット」はBBC Newsの開発チームによって造られました。この用語は、BBCのWebサイトが膨大な国際的な視聴者に対応し、ブラウザバージョンとデバイスをターゲットにしなければならないという事実に由来しています。

    コンセプトの核心は、どのブラウザ/デバイス/ユーザーエージェントが使用されているかを識別し、サイトを機能させるためにポリフィルを提供しています。特定の機能の存在がクライアント側で検出されるため、利用可能な技術に最も適したソリューションが提供されます。

    機能検出は新しいものではありません。前述のBBCの記事は2012年3月に公開され、人気が高まっていますが、2008年にPaul Irishによって普及しているIE固有の条件付きクラスをまだ実装しているWebサイトを見るのは驚くべきことです。

    Modernizr(Paul Irishによる貢献)はすべて機能検出に関するものです。

    クールな新しいWebテクノロジーを利用することは、遅れているブラウザをサポートする必要があるまで、とても楽しいです。 Modernizrを使用すると、ブラウザが機能をサポートするかどうかにかかわらず、条件付きJavaScriptとCSSを簡単に作成して各状況を処理できます。プログレッシブエンハンスメントを簡単に行うのに最適です。

    CSSにはネイティブの機能検出がありますが、現在、実際の使用に実行可能になるのに十分な市場シェアがありません。この記事の残りの部分では、JavaScriptでの機能検出を支持して、IE条件付きコメントを捨てる方法について説明します。

    機能とブラウザの識別

    すべてのプロジェクトでは、機能するために異なる機能セットが必要です。機能検出を実現できる複数の方法があり、その中で最も簡単な方法は次のとおりです。

    Plain JavaScript(BBCで使用されている)を使用して

    を使用しています

    Modernizrを使用して(この記事で使用されます)

      最も効率的なアプローチは、Vanilla JavaScriptの実装です。高速で(クライアントが追加のライブラリをダウンロードする必要はないため)、追加の処理は必要ありません。このアプローチは、既知の問題があるため、完全ではありません。ただし、一般的な機能検出の問題を克服する方法があります。
    • [B]ラウザー検出は不可能な絡み合いになり、ほとんど使用されなくなり、はるかに優れたものに取って代わられます - 機能検出。
    • […]機能検出も完全に信頼できません。失敗する場合があります。
    • -
    ジェームズ・エドワーズ

    マスタードを切断するためのModernizrの選択はそれほど効率的ではないかもしれません(ダウンロードとクライアントの処理が必要なため)が、手動でFlex-Rapサポートを検出することは簡単なタスクではありません。また、Modernizrバージョン2はFlex-Wrapを検出しないが、バージョン3はそうであることに注意することも重要です。この機能には、フレックスラインラッピングとラベル付けされています

    このオプションは、Modernizrが作成したドキュメントルートに添付されたCSSクラスを使用するために存在しますが(例:html.flexwrap)、サイトのダウンロードサイズを削減するために、各エクスペリエンスに個別のCSSファイルを提供することをお勧めします。

    BBCニュース開発者は、2種類のブラウザを参照してください。

    チームの誰かが「HTML4ブラウザ」および「HTML5ブラウザ」と呼び始めました。

    -

    BBCレスポンシブニュース

    この根拠は、2012年のブラウザの風景の気候を考えると、完全に有効でした。ただし、新機能が利用可能になると、部門は必ずしも明確ではありません。たとえば、FlexBoxはすべての「HTML5」ブラウザで完全にサポートされていません。

    堅牢なアプローチは、「レガシー」と「モダン」ブラウザバージョンを区別することです。さらに、一部のプロジェクトでは、中途半端(または「遷移」)ブラウザを識別できる複数の部門が必要になる場合があります。

    アプローチの実装

    以下のファイルを作成することから始めます:

    index.html - メインのHTMLファイル

      styleSheets/modern.css - 最新のブラウザ用のスタイル(メディアクエリ、ラッピング付きのフレックスボックス)
    • styleSheets/legacy.css - レガシーブラウザ用のスタイル(メディアクエリなし、フレックスボックスなし)
    • Scripts/Dependencies.js - 機能検出
    • を実行します
    • index.htmlファイルがどのように見えるかは次のとおりです
    条件付きコメントがないことに注意してください。クリーンで有効なHTMLコードだけです。また、ブラウザがJavaScriptを有効にしていない場合、サポートのレベルに関係なく、Legacy.cssの使用に戻ります。

    スクリプトタグがHTMLページの上部にあることにも気付くかもしれません。これは、Modernizrがブラウザが初めてペイントする前にスタイルシートを処理して注入する必要があるためです。これにより、塗り直しが減少し、スタイルのないコンテンツ(FOUC)のフラッシュを回避するのに役立ちます。ただし、ほとんどのスクリプトタグはページの下部にあることを忘れないでください。

    Legacy.cssファイルには、次のものが含まれます
    <span><span><!DOCTYPE html></span>
    </span><span><span><span><html</span> class<span>="no-js"</span>></span>
    </span>  <span><span><span><head</span>></span>
    </span>    <span><span><span><title</span>></span>Cutting the mustard<span><span></title</span>></span>
    </span>    <span><span><span><script</span> src<span>="javascripts/dependencies.js"</span>></span><span><span></script</span>></span>
    </span>    <span><span><span><noscript</span>></span>
    </span>    <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="stylesheets/legacy.css"</span>></span>
    </span>    <span><span><span></noscript</span>></span>
    </span>    <span><!-- ... -->
    </span>  <span><span><span></head</span>></span>
    </span>  <span><span><span><body</span>></span>
    </span>    <span><span><span><div</span> class<span>="container"</span>></span>
    </span>      <span><span><span><div</span> class<span>="cell cell-1"</span>></span>Cell 1<span><span></div</span>></span>
    </span>      <span><span><span><div</span> class<span>="cell cell-2"</span>></span>Cell 2<span><span></div</span>></span>
    </span>      <span><span><span><div</span> class<span>="cell cell-3"</span>></span>Cell 3<span><span></div</span>></span>
    </span>      <span><span><span><div</span> class<span>="cell cell-4"</span>></span>Cell 4<span><span></div</span>></span>
    </span>    <span><span><span></div</span>></span>
    </span>  <span><span><span></body</span>></span>
    </span><span><span><span></html</span>></span></span>
    この実装には、ClearFixハックと、ラッピング用のNth-Child Pseudo-Classが含まれます。ほとんどのブラウザで動作します。ただし、インターネットエクスプローラー8には、セレクターを動作させるためにSelectIVizrまたは同等のソリューションが必要です。

    次に、Modern.cssファイル:

    このファイルのサイズで延期されないでください。コメントにより大きく見えるようになりますが、これらは各セクションがターゲットにしているものを理解することを開発しやすくします。

    次に、dependencies.js。

    のコードを書きます
    <span><span>.container</span> {
    </span><span>}
    </span>
    <span>/* clearfix */
    </span><span><span>.container:after</span> {
    </span>  <span>content: "";
    </span>  <span>display: table;
    </span>  <span>clear: both;
    </span><span>}
    </span>
    <span><span>.cell</span> {
    </span>  <span>width: 50%;
    </span>  <span>float: left;
    </span><span>}
    </span>
    <span>/* wrapping */
    </span><span><span>.cell:nth-child(<span>2n+1</span>)</span> {
    </span>  <span>clear: left;
    </span><span>}
    </span>
    <span>/* for visiblity */
    </span><span><span>.cell-1</span> { background-color: #000; color: #fff; }
    </span><span><span>.cell-2</span> { background-color: #666; color: #fff; }
    </span><span><span>.cell-3</span> { background-color: #ccc; color: #000; }
    </span><span><span>.cell-4</span> { background-color: #fff; color: #000; }</span>
    前述のように、Flex-Rapプロパティのサポートを検出するModernizr(バージョン3)のバージョンを生成する必要があります。 JavaScriptファイルの上部にコードを含めてください。

    オプションで、Ismodern Booleanに追加することで、最新の体験の要件を増やすことができます。たとえば、

    <span><span>.container</span> {
    </span>  <span>/* Internet Explorer 10
    </span><span>   */
    </span>  <span>display: -ms-flexbox;
    </span>  <span>-ms-flex-wrap: wrap;
    </span>
      <span>/* Chrome 21-28
    </span><span>   * Safari 6.1+
    </span><span>   * Opera 15-16
    </span><span>   * iOS 7.0+
    </span><span>   */
    </span>  <span>display: -webkit-flex;
    </span>  <span>-webkit-flex-wrap: wrap;
    </span>
      <span>/* Chrome 29+
    </span><span>   * Firefox 28+
    </span><span>   * Internet Explorer 11+
    </span><span>   * Opera 12.1 & 17+
    </span><span>   * Android 4.4+
    </span><span>   */
    </span>  <span>display: flex;
    </span>  <span>flex-wrap: wrap;
    </span><span>}
    </span>
    <span><span>.cell</span> {
    </span>  <span>-webkit-flex: 1 0 50%;
    </span>      <span>-ms-flex: 1 0 50%;
    </span>          <span>flex: 1 0 50%;
    </span><span>}
    </span>
    <span>/* for visiblity */
    </span><span><span>.cell-1</span> { background-color: #000; color: #fff; }
    </span><span><span>.cell-2</span> { background-color: #666; color: #fff; }
    </span><span><span>.cell-3</span> { background-color: #ccc; color: #000; }
    </span><span><span>.cell-4</span> { background-color: #fff; color: #000; }</span>
    SASS Solutions

    <span><span><!DOCTYPE html></span> </span><span><span><span><html</span> class<span>="no-js"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Cutting the mustard<span><span></title</span>></span> </span> <span><span><span><script</span> src<span>="javascripts/dependencies.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><noscript</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="stylesheets/legacy.css"</span>></span> </span> <span><span><span></noscript</span>></span> </span> <span><!-- ... --> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><div</span> class<span>="container"</span>></span> </span> <span><span><span><div</span> class<span>="cell cell-1"</span>></span>Cell 1<span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="cell cell-2"</span>></span>Cell 2<span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="cell cell-3"</span>></span>Cell 3<span><span></div</span>></span> </span> <span><span><span><div</span> class<span>="cell cell-4"</span>></span>Cell 4<span><span></div</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>

    プログレッシブエンハンスメントとブラウザテスト

    FlexBoxとCSSのフロートの違いを理解することが重要です。実装はそれぞれの経験でまったく同じように見えませんが、進歩的な強化の概念は、必ずしもそうする必要はないことを意味します。 たとえば、

    デフォルトでは、FlexBoxはすべてのセルを同じ列に伸ばして同じ高さを持つようになります。したがって、1つのセルが長さ3行で、隣接する列の長さが10行の場合、背景は両方のセルで10行まで伸びます。 CSSフロートのフォールバックはこれを行わず、両方のセルは不均一な高さを持っています。

    複数のブラウザでレイアウトをテストすることは依然として要件ですが、JavaScriptでISModernの値をFalseに強制することで、あらゆるブラウザでレガシーソリューションをテストするのに役立つことを忘れないでください。

    結論

    この記事では、同じHTMLコードベースで2つの異なるスタイルシートを提供するために機能検出を使用するための基本を提供しました。これは、CSSフロートから離れてアップグレードプロセスを開始し、IE条件付きコメントへの依存度を低下させる非常に効果的な方法です。
    <span><span>.container</span> {
    </span><span>}
    </span>
    <span>/* clearfix */
    </span><span><span>.container:after</span> {
    </span>  <span>content: "";
    </span>  <span>display: table;
    </span>  <span>clear: both;
    </span><span>}
    </span>
    <span><span>.cell</span> {
    </span>  <span>width: 50%;
    </span>  <span>float: left;
    </span><span>}
    </span>
    <span>/* wrapping */
    </span><span><span>.cell:nth-child(<span>2n+1</span>)</span> {
    </span>  <span>clear: left;
    </span><span>}
    </span>
    <span>/* for visiblity */
    </span><span><span>.cell-1</span> { background-color: #000; color: #fff; }
    </span><span><span>.cell-2</span> { background-color: #666; color: #fff; }
    </span><span><span>.cell-3</span> { background-color: #ccc; color: #000; }
    </span><span><span>.cell-4</span> { background-color: #fff; color: #000; }</span>
    FlexBoxのサポートを検出することには強く焦点を当てていますが、ブラウザ向けに新しい機能が開発されているため、マスタードを切断するこのアプローチは、将来の要件に合わせて適応および進化させることができることに注意することが重要です。

    インターネットエクスプローラー10がターゲットセクターのブラウザ市場シェアで人気がなくなったら、Tweenerの構文を捨てて、新しい構文の使用だけを通じてよりlear的なコードを提供できるかもしれません。

    それで、あなたはすべての理論を持っているので、次のプロジェクトでFlexBoxに精通してみませんか?

    FlexBoxに移住し、レガシーJavaScriptを回避することについてのよくある質問 FlexBoxに移行することの重要性は何ですか?レガシーJavaScriptを最新のブラウザに提供することを避けるにはどうすればよいですか?

    ​​

    レガシーJavaScriptを最新のブラウザに提供することを避けるために、モジュール/ノモジュールパターンを使用できます。このパターンを使用すると、JavaScriptの2つの個別のバンドルを作成できます。モダンな「モジュール」バンドルとレガシー「Nomodule」バンドルです。 「type =” module "'属性を理解する最新のブラウザは最新のバンドルをダウンロードしますが、古いブラウザーはそれを無視し、代わりにレガシーバンドルをダウンロードします。

    FlexBoxは、従来のレイアウト方法よりもいくつかの利点を提供します。これにより、柔軟なレイアウト構造が可能になり、レスポンシブWebサイトの設計が容易になります。また、コンテナ内の要素のアライメント、分布、および順序付けも簡素化されます。 FlexBoxを使用すると、従来のCSSで難しい複雑なレイアウトとアラインメントを簡単に実現できます。特に大規模な既存のプロジェクトのプロセス。移行を開始する前に、フレックスボックスモデルを徹底的に理解することが重要です。より複雑なレイアウトに徐々に移動するシンプルなレイアウトを実験することから始めます。ステップバイステップアプローチを使用して、1つのコンポーネントを一度に移動し、各変更を徹底的にテストします。

    レガシーJavaScriptを最新のブラウザに提供しているかどうかを確認するために使用できますか? > Google Lighthouse、Gtmetrix、WebPageTestなどのツールは、最新のブラウザにレガシーJavaScriptを提供しているかどうかを特定するのに役立ちます。これらのツールは、ウェブサイトのパフォーマンスを改善できる領域を強調して、詳細なパフォーマンスレポートを提供します。古いブラウザでのサポートの。ただし、いくつかの矛盾とバグがあるかもしれません。必要なベンダープレフィックスをCSSに追加し、古いブラウザーとの互換性を確保できるAutoprefixerなどのツールを使用することをお勧めします。 SEO。レスポンシブで高速で積み込まれたWebサイトは、より優れたユーザーエクスペリエンスを提供します。これはSEOの重要な要素です。さらに、より速くロードされるウェブサイトは、検索エンジンによってrawい回り、インデックス化される可能性が高くなります。新しいレイアウトモデル、ブラウザの不一致に対処し、後方互換性を確保します。さまざまなブラウザやデバイスでウェブサイトを徹底的にテストして、一貫したユーザーエクスペリエンスを確保することが重要です。

    FlexBoxとModern JavaScriptの詳細については、FlexBoxとModern JavaScriptについて学ぶための多くのオンラインリソースがあります。 CSS-Tricks、MDN Web Docs、SitePointなどのWebサイトは、包括的なガイドとチュートリアルを提供します。さらに、CodecademyやFreeCodecampなどのオンラインコーディングプラットフォームは、これらのトピックに関するインタラクティブなレッスンを提供します。

以上がマスタードを切ることでフレックスボックスに移行しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。