フロントエンド開発者リファレンス:水平ナビゲーションパネルのビュー


前書き:レイアウトデザイナーとして、謙虚な僕は、いくつかのタイプのメニューがあることに気付きました。 同時に、それぞれのレイアウトについては、自分のテクニックを使用する必要があります。
詳細-カットの下。

この記事は初心者のコーダーをより対象としていますが、経験豊富な専門家も新しいものを見つけるか、参照として参照するでしょう。
トピックの構造は次のとおりです。まず、タスクが提示されます-必要なナビゲーションブロックの種類が説明され、次に、そのようなナビゲーションを作成できる技術が検討されます。
スタイルは、次のような意味的に正しいメニュー構造の下で記述されていることが理解されます。






  



html5以外のdoctypeを補う場合、nav要素を省略するか、対応するdivに置き換えます。

さあ、始めましょう!..

右側/左側にあるメニュー項目


このセクションでは、要素が右側/左側に配置されるナビゲーションブロックについて説明します。 そのようなブロックのレイアウトでは、状況に応じて、いくつかの方法を使用できます。
  1. 表示:インライン;
  2. float:左/右;
  3. 表示:インラインブロック。


ディスプレイ:インライン

いつ応募するか
このメソッドを使用して、単純なメニューを植字することをお勧めします。この方法では、要素はパディングなしの個別の単語として表示され、それらの間のスペースのみで区切られます。


生きている例


どうやって
CSSのli要素の場合、display:inlineプロパティを設定する必要があります。 ちなみに、これは、この種のほとんどのメニューで不要なマーカーも削除します。これらのマーカーは、display:list-itemの要素に含まれる追加ブロックにあり、インラインが欠落しているためです。
ulの場合、text-alignプロパティをそれぞれrightまたはleftに設定します。

注釈


フロート:左/右

いつ応募するか
パディングおよび/または固定の高さ/幅を持つ要素でメニューを作成する必要がある場合:


生きている例


どうやって
li要素にfloat:leftまたはfloat:rightを設定します。 マーカーを削除する必要がある場合は、display:blockまたはlist-style:noneを追加する必要があります。

注釈


ディスプレイ:インラインブロック

いつ応募するか
タスクは、floatを使用したレイアウトと同じです。 そして、はい、この問題を解決する際に、インラインブロックは不平等な戦いに陥りました。 第一に、このようなソリューションのブラウザ間の互換性はフロートの互換性よりも低く、第二に、インラインブロックとインライン要素の間にスペースが出現します。これは多くの場合不要です。 これらの問題は解決可能ですが、なぜそれらを作成するのですか?

どうやって
display:inline-blockをli要素に設定します。 IE7(サポートしている場合)では、* display:inline; *ズーム:1。

左右のナビゲーションブロックに関して対称


このセクションでは、対称的に配置されたナビゲーションブロックについて説明します。 このようなメニューにはいくつかの種類があります。 それぞれに独自のレイアウトメソッドがあります。
  1. メニュー項目は中央揃えです。
  2. メニュー項目は幅全体に均等に分散され、要素間にギャップがあります。
  3. メニュー項目は幅全体に均等に分配され、要素は幅全体を満たします。


中央揃えのメニュー項目

いつ応募するか
メニューは中央にあります:




生きている例


どうやって
メニュー項目のタイプに応じて、display:inlineまたはdisplay:inline-block(メニュー項目にパディングが提供され、幅および/または高さが指定されている場合)をli要素に設定します。 親(ul)は、text-align:centerを設定します。

注釈
繰り返しますが、インライン要素とインラインブロック要素の間のギャップを取り除くことが必要になる場合があります。 この問題を解決するいくつかの方法がここにあります

メニュー項目は幅全体に均等に分散され、要素間にギャップがあります

いつ応募するか
メニュー項目は幅全体に均等に分散され、個々の項目間にギャップがあります。




生きている例
残念ながら、このタイプのメニューは見つかりませんでした。JSFiddleの例を次に示します。



どうやって
メニュー項目のタイプに応じて、display:inlineまたはdisplay:inline-blockをli要素に設定します。 親(ul)text-align:justifyを設定します。 しかし、justifyはすぐには機能しません。最初の行をオーバーフローさせる必要があります(これがなぜそうなのか明確でない場合は、単語を開始し、justifyでいくつかの単語を全幅に広げてみてください)。 したがって、ul要素の最後に、display:inline-blockおよびwidth:100%の要素を追加します。同じ特性を持つ疑似要素の後に::を追加することをお勧めします。

注釈
以前のタイプのメニューでは、displayプロパティがinlineおよびinline-blockに設定されている要素間のスペースを削除したことを覚えていますか? したがって、この場合、これを行うことは絶対に不可能です。ブラウザにはメニュー項目間にギャップが必要です。 ところで、いくつかの要素間のスペースを削除すると、ボタンをグループ化できます( JSFiddle ):


メニュー項目は幅全体に均等に分散され、要素はulの幅全体に広がります。

いつ応募するか
メニュー項目間にギャップはなく、任意の数のメニュー項目が幅全体を占有します。


生きている例
Apple.com


JSFiddleのこのようなメニューの例については、 こちらをご覧ください


どうやって
この問題を解決するとき、テーブルでメニューを作成する誘惑があります。 しかし、ドキュメントのセマンティクスに違反することはありませんか? したがって、liにはdisplay:table-cellを使用し、ulにはdisplay:table-cellを使用します。 次に、ulの幅を設定します
古いブラウザのサポートが必要な場合は、このようなブロックをIE6およびIE7のテーブルに置き換えるか、他の方法でフォールバックを整理するポリフィルスクリプトを使用ます。

注釈
この方法でメニューを作成する場合、要素をposition:table-cellに相対的な絶対位置に配置できないことに注意する必要があります。
なんで?
実際のところ、w3c仕様では、table-cellに対する位置:相対アクションは定義されていないため、各ブラウザーは独自の特性を持つことができます。
さまざまなブラウザーでこの例を見てください(Mozilla Firefoxの動作を詳しく調べます!)。

この問題を解決するには、配置するセルにdivを配置する必要があります。


まとめ


この記事には、メニューの主なタイプとそのレイアウトの機能がリストされています。 この資料がお役に立てば幸いです。ご清聴ありがとうございました。

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


All Articles