コアポイント
ご存知のように、ブラウザのサポートが増加するにつれて、FlexBoxは最近多くの注目を集めています。開発者は、冗長CSSやJavaScriptのトリックに依存することなく、複雑なUIを構築できます。
FlexBoxは線形レイアウトモデルを使用して、間隔計算なしに水平または垂直にコンテンツをレイアウトできるようにします。フレックスレイアウトは、コンテナ内の要素に応答し、メディアクエリの必要性を減らします。
この記事では、このレイアウトモデルを使用して巨大なナビゲーションメニューを構築します。その過程で、FlexBoxを使用してUIコンポーネントを構築および拡張するのがどれほど簡単かがわかります。ここでは、個々のFlexboxプロパティについて詳しく説明しませんが、これらの機能の実際のアプリケーションに焦点を当てます。 FlexBoxの基本的な紹介については、次のリソースを参照してください。
Guy RoutledgeのFlexBoxチュートリアル
Flexboxの初心者向けは紹介
単一のドロップダウンメニューセグメントを構築します
単一のドロップダウンメニューセグメントを3列に制限します
まず、.menu要素にフレックスフォーマットコンテキストを作成する必要があります。これを使用して実装します。現在、.menu要素のすべての直接の子供(つまり、フレックスコンテナ)がフレックスプロジェクトになります。 display: flex
を追加して、それらを等しい幅で均等に成長させるようにしました。コードは次のとおりです
flex: 1
<nav class="navbar"> <ul class="menu"> <li><a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">Electronics</a><i> class="fa fa-angle-down"></i></li> </ul> </nav>
デモでは、メニュー項目の上にホバリングすると、背景色が変わります。 Flexプロジェクトのdisplay: flex
プロパティを
display
コンテンツを親要素の幅全体に拡張するために、フレックスプロジェクト自体もフレックスコンテナに変えました。この設定を使用すると、各ネストされた要素を親(flex
を使用して)と同じくらい広い要素にして、強調表示された領域全体をクリック可能にすることができます。
あるいは、LI要素をフレックスコンテナに設定せずにこれを達成することもできますが、3つの追加プロパティ(flex: 1
、
)を使用する必要があり、この状況を避けることを好みます。 display: inline-block
width: 100%
このデモは、これまでに行われたことを示しています。 box-sizing: border-box
次のセクションでは、巨大なナビゲーションを構築する方法の一部を紹介します。
単一のドロップダウンメニューセグメントを構築します
以下は、複数のセグメントに拡張される単一のドロップダウンメニューセグメントを構築するために使用されるマークアップです。 Container __Listプロジェクトがコピーされ、追加のセグメントが作成されます。
コンテナはフレックスコンテナであり、各直接子要素(つまり、Container__List)はフレックスプロジェクトです。各container__listには複数のナビゲーションアイテムがあり、それぞれがcontainer_listitemでラップされています。コンテンツをdivに巻き付けましたが、後で戻ってきます。
.navbar .menu { display: flex; position: relative; } .navbar .menu li { flex: 1; display: flex; text-align: center; } .navbar .menu a { flex: 1; justify-content: center; color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; padding: 20px; }
containerer__listで
プロパティを使用したことに注意してくださいが、ナビゲーションバー自体には使用しませんでした。前述のように、スペースが不十分なときにナビゲーションバーのアイテムを包みません。代わりに、利用可能な水平スペースが減少すると、それらは均等に縮小します。<ul class="container"> <div class="container__list"> <div class="container__listItem"> <div>Televisions</div> </div> </div> </ul>
flex-wrap
今、divに包まれたコンテンツはどうですか?コンテンツがあふれないようにしたい状況に対処したいと思います。これは、コンテンツがFlex Child Element(つまり、Container_LESTITEM)の内側に直接ある場合、非常に簡単です。次のコードを使用して、カットテキストを省略記事( "…")に置き換えることができます。
<nav class="navbar"> <ul class="menu"> <li><a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">Electronics</a><i> class="fa fa-angle-down"></i></li> </ul> </nav>
単一のドロップダウンメニューセグメントを3列に制限します
.navbar .menu { display: flex; position: relative; } .navbar .menu li { flex: 1; display: flex; text-align: center; } .navbar .menu a { flex: 1; justify-content: center; color: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bffffff; padding: 20px; }
containerer__listを2回コピーして、「Appliances」と呼ばれる新しいドロップダウンメニューセグメントに使用します。これはデモンストレーション用です。実用的な例では、JavaScriptまたはバックエンド言語でリストを生成する場合があります。
has-multiクラスを追加して、ユーザーインターフェイスを調整します。このクラスを使用して、いくつかのプロパティをオーバーライドする必要があります。
ここでは、コンテナに3つの部分を表示する必要があるため、
<ul class="container"> <div class="container__list"> <div class="container__listItem"> <div>Televisions</div> </div> </div> </ul>
のみを変更しましたが、他の2つのプロパティflex-basis
とflex-basis
は単一のセクションコードから継承されました。これにより、Container__Listが3未満の場合、柔軟性が得られます。リストが2つしかない場合、Container__Listプロジェクトは成長し、それらの間にスペースを割り当てます。つまり、各アイテムは総幅の50%を占めます。 flex-grow
flex-shrink
.container__listitemは
flex-basis: 100%
巨大なメニューの使いやすさに関するいくつかのメモ
メガメニューの可用性の利点と短所(Megaメニューパート1)
さまざまなFlexBoxベースのテクノロジーを使用してMegaメニューシステムを構築する場合は、コメントでお気軽にお知らせください。
更新:このCodepenデモで見つけることができるこれらのメガメニューのレスポンシブなモバイルフレンドリーなバージョンを作成しました。
FLEXBOX(FAQ)FlexBoxを使用してマルチレベルのメガメニューを作成できますか?
メガフレックスボックスメニューにアニメーションを追加する方法は?
Flexboxメガメニューのアクセシビリティを改善する方法は?
FlexBoxを使用して粘着性メガメニューを作成できますか?
メガフレックスボックスメニューにアイコンを追加する方法は?
Mega Flexboxメニューに検索バーを追加する方法は?
ネストされたフレックスコンテナを作成して、FlexBox Megaメニューにドロップダウンメニューを追加できます。 CSSを使用して、デフォルトでドロップダウンメニューを非表示にして、ユーザーが親メニュー項目を上回ったときにそれらを表示できます。 JavaScriptを使用して、ドロップダウンメニューに追加のインタラクティブ性を追加することもできます。たとえば、ユーザーがドロップダウンメニューの外側をクリックしたときに閉じるなどです。
メニューディスプレイを切り替えるボタンを作成して、FlexBox Megaメニューにモバイルメニューのトグルを追加できます。メディアクエリを使用して、大きな画面のトグルを非表示にし、小さな画面に表示できます。 JavaScriptを使用して、ボタンがクリックされたときにメニューの「表示」プロパティを切り替えることもできます。
以上がFlexBoxでメガメニューを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。