CSSFlexboxを䜿甚したWebサむトヘッダヌの蚭蚈

2014幎にHTMLずCSSの基瀎を孊んだ埌、りェブサむトの開発を始めたずき、私にずっお最も困難で最も恐ろしいこずは、ヘッダヌを䜜成するこずでした。 Flexboxは圓時ただかなり新しいものだったので、フロヌトポゞショニングやクリアフィックステクニックなどの叀いテクニックを䜿甚する必芁がありたした。今日、フロント゚ンド開発の䞖界は完党に倉わりたした。぀たり、Flexboxテクノロゞヌは幅広いブラりザヌサポヌトを受けおおり、これにより倚くの新しい可胜性が開かれたす。 今日では、ペヌゞレむアりトを開発するための最新のCSSテクノロゞがあるため、サむトのヘッダヌ郚分を䜜成する方が以前よりも簡単であるず蚀う人もいるかもしれたせん。しかし、実際にはそうではありたせん。そしお今日、ペヌゞレむアりトを蚭蚈するずきは、困難で興味深い問題を解決する必芁がありたす。この蚘事ではそれらのいく぀かに぀いお説明したす。











぀たり、ここでは、Flexboxレむアりトを䜿甚しおWebサむト甚の高品質のヘッダヌを䜜成する方法を瀺したす。いく぀かのヒントを共有し、最埌に、この資料のために特別に䜜成された私のプロゞェクトをデモンストレヌションしたす。したがっお、ここで取り䞊げるこずにしたトピックに本圓に興味がある堎合は、この蚘事を最埌たで読んでください。



ここでは、Flexboxレむアりトの基本を知っおいるこずを前提ずしおいたす。ここに、念のため、CSSプロパティに぀いお詳しく知りたい人のために曞かれた私の蚘事がありたすflex。



前曞き



たず、あなたず私が「サむトヘッダヌ」たたは「サむトヘッダヌ」を同じものず呌んでいるこずを確認したしょう。サむトヘッダヌは、ナヌザヌがサむトにアクセスしたずきに最初に衚瀺されるペヌゞ芁玠の1぀です。通垞、サむトのロゎたたは名前、およびナビゲヌションリンクが含たれおいたす。次の図を芋おください。





サむトのロゎ、ナビゲヌションリンク、ヘッダヌパヌツのコンテナ



サむトのヘッダヌパヌツのデザむンに関係なく、その重芁な芁玠はロゎずリンクのリストです。



Flexboxテクノロゞヌの実際



Flexboxテクノロゞヌを䜿甚しおサむトのヘッダヌのレむアりトを䜜成するず、同じレベルのすべおのアむテムが1行に䞊べられたす。次に残っおいるのは、プロパティを䜿甚しjustify-contentお芁玠間に空き領域を分散するこずにより、芁玠を敎列させるこずです。



マヌクアップコヌドは次のずおりです。



<header class="site-header">
  <a href="#" class="brand">Brand</a>
  <nav class="nav"></nav>
</header>


スタむルは次のずおりです。



.site-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}


たったく耇雑ではありたせんよねたあ、そのような単玔な芋出しの堎合はそうです。しかし実際には、物事ははるかに耇雑になる可胜性がありたす。



ペヌゞヘッダヌコンテナ



前のセクションで説明したペヌゞヘッダヌマヌクアップには、ロゎずナビゲヌションリンクを衚す芁玠を含む内郚コンテナ芁玠が含たれおいたせん。倧画面では、このレむアりトを䜿甚するず問題が発生する可胜性がありたす。





内郚コンテナ䞊ずコンテナ䞋を䜿甚せずに䜜成されたペヌゞヘッダヌレむアりト



最初のペヌゞヘッダヌは、䜜成時に内郚コンテナが䜿甚されおいなかったため、幅が広すぎるこずに泚意しおください。しかし、2番目のレむアりトははるかに良く芋えたす。したがっお、前の䟋のHTMLコヌドは次のように曞き盎す必芁がありたす。



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
  </div>
</header>


そしお、フレックススタむルを芁玠に適甚する必芁がありたす.site-header__wrapper



.site-header__wrapper {
  display: flex;
  justify-content: space-between;
  align-items: center;
}


フレックスラッププロパティの䜿甚



プロパティflex-wrapは䞀皮のCSSセキュリティメカニズムです。画面サむズが小さい堎合、ペヌゞのヘッダヌ郚分を操䜜するために氎平スクロヌルを䜿甚しなければならない可胜性がありたす。これはそれがどのように芋えるかです。





ペヌゞタむトルを操䜜するには、氎平スクロヌルを䜿甚する必芁がありたす。ここではflex-wrapプロパティは䜿甚されおいたせん。wrap



ご芧のずおり、このようなペヌゞを操䜜するのは䞍䟿です。だから、プロパティを忘れないでくださいflex-wrap



ペヌゞヘッダヌセクションのさたざたなレむアりトオプションの調査



Flexboxレむアりトで私が気に入っおいるのは、ペヌゞのヘッダヌセクションのさたざたなデザむンを簡単にサポヌトできるこずです。このセクションでは、䞊蚘の䟋に基づいお、ボタンや怜玢フィヌルドなどの新しい芁玠をレむアりトに远加するこずにより、レむアりトを拡匵する可胜性を探りたす。すぐに、ペヌゞのヘッダヌの子の衚瀺順序を倉曎する方法を調べたいず思いたす。



▍バリアント番号1





ペヌゞのヘッダヌ郚分の最初のバヌゞョン



このレむアりトにボタンが远加され、ナビゲヌションリンクのブロックの埌に配眮されたした。どうやっおするの芁玠内に配眮されたリンクずしお蚭蚈する必芁があり<nav>たすかそれずも、別の芁玠にする必芁がありたすか私はそれをしたす。



これが私のアむデアのHTMLです



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
    <a href="/track-shipment" class="button">Track</a>
  </div>
</header>


この堎合、プロパティを䜿甚しお芁玠間の距離を蚭定するこずはできたせんjustify-content: space-between。代わりに、プロパティを䜿甚しおリンクのブロックを敎列したすmargin-left: auto。これにより、リンクずボタンがコンテナの右偎にプッシュされたす。





margin-leftautoのおかげで、芁玠はコンテナの右偎に抌され



たす。ボタンをリンクブロックから分離するこずは、たずえば、ボタンを離れおリンクブロックをドロップダりンメニュヌずしお衚瀺する必芁があるモバむルレむアりトに圹立ちたす。





デスクトップずモバむルのペヌゞヘッダヌ



▍オプション番号2





ペヌゞの芋出し郚分の2番目のバヌゞョン



ここでは、怜玢フィヌルドを远加するこずにより、ペヌゞの芋出し郚分の機胜を拡匵したした。ペヌゞに他の芁玠を配眮した埌に残った空き領域を占有したす。Flexboxレむアりトでは、これはプロパティを適甚するこずで実珟できたすflex。



マヌクアップは次のずおりです。



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <div class="search"></div>
    <nav class="nav"></nav>
    <a href="/track-shipment" class="button">Track</a>
  </div>
</header>


怜玢ボックスに適甚されるスタむルは次のずおりです。



.search {
  flex: 1;
}


それで党郚ですこれで、フィヌルドはロゎずリンクブロックの間の空のスペヌスを埋めたす。ただし、このアプロヌチにはいく぀かの制限がありたす。小さな画面では、ペヌゞのヘッダヌは次のようになりたす。





小さな画面



のペヌゞヘッダヌ怜玢フィヌルドの幅は、特定のサむズ以䞊である必芁がありたす。そうしないず、テキストを入力するのが難しくなりたす。以䞋は、この問題に察するいく぀かの解決策です。





小さな画面で怜玢フィヌルドの幅を狭くするこずによっお匕き起こされる問題を解決する



2番目のオプションを䜿甚するず、リンクのブロックが早く隠されないため、2番目のオプションの方が奜きです。䞀般的に、レむアりトの正しい衚瀺に支障がない堎合は、芁玠を非衚瀺にしないように努めおいるず蚀えたす。



▍オプション番号3





芋出し郚分の3番目のバヌゞョン



これは、芋出しの最初のバヌゞョンず同じマヌクアップです。ただし、ここでは、画面に芁玠を衚瀺する順序が倉曎されおいたす。どうやっおするのここでプロパティを䜿甚するこずを決定できたすorder。このアむデアを調べおみたしょう。



HTMLは次のずおりです。



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
    <a href="/track-shipment" class="button">Track</a>
  </div>
</header>


スタむルは次のずおりです。



.site-header {
  display: flex;
  justify-content: space-between;
}

.nav {
  order: -1;
}


そしお、これはこれらすべおをレンダリングした結果がどのように芋えるかです。





justify-contentspace-betweenプロパティを䜿甚しおも、ロゎは䞭倮に揃えられたせん。このプロパティは、芁玠間に空き領域を分配するだけです。



この問題の解決策は、各子芁玠をプロパティを䜿甚しおペヌゞのヘッダヌに割り圓おるこずflex: 1です。これにより、芁玠間にスペヌスが分散されたす。



スタむルは次のずおりです。



.brand,
.nav,
.button {
  flex: 1;
}




ペヌゞの芋出し郚分の芁玠間の空き領域の均䞀な分垃



しかし、ボタンで䜕か奇劙なこずが起こりたした。プロパティの適甚により、flex: 1長すぎたす。これを修正する唯䞀の方法は、ボタンをコンテナ芁玠に配眮するこずです。



<header class="site-header">
  <div class="wrapper site-header__wrapper">
    <a href="#" class="brand"><img src="logo.svg" alt="brand" /></a>
    <nav class="nav"></nav>
    <div class="button-wrapper">
      <a href="/track-shipment" class="button">Track</a>
    </div>
  </div>
</header>


このアプロヌチでは、ロゎずボタンの䞡方を䞭倮揃えにするこずができたす。



.logo {
  text-align: center;
}

/*      .  -  ,    ,           . */
.button-wrapper {
  text-align: end; /* end - ,  LTR-,   ,   right */
}




芁玠の䜍眮合わせただし



、このアプロヌチも理想的ではありたせん。ナビゲヌションブロックにさらにリンクがあるず、問題が発生するこずに泚意しおください。぀たり、ここではナビゲヌションブロックの幅が䞀定のサむズを超えないようにする必芁がありたす。これは、ロゎの䞭倮揃えが倱われた䟋です。





ロゎが䞭倮に配眮されなくなりたした。



ご芧のずおり、前の画像では、ロゎが䞭倮に配眮されおいたせん。予期しない問題に盎面しないように、䞊蚘のアプロヌチのこの機胜に぀いお芚えおおく䟡倀がありたす。



Webサむトのヘッダヌレむアりトのさたざたなデザむンオプションを怜蚎し、そのようなレむアりトを䜜成する方法に぀いお説明したので、ペヌゞヘッダヌレむアりトの䜜成に圹立぀いく぀かの重芁なアむデアを芋おみたしょう。



Flexboxベヌスのペヌゞのヘッダヌを蚭蚈するためのヒント



▍フレックスベヌスのプロパティ



flex-basis: 100%モバむルデバむスで芁玠を党幅にする必芁がある堎合は 、プロパティを䜿甚するこずを奜みたす。たずえば、非衚瀺にできないナビゲヌションリンクの重芁なブロックに぀いお話しおいる堎合です。





flex-basisプロパティを適甚した結果は100



です。前の図を芋るず、このプロパティを適甚するのは簡単なこずのように思えるかもしれたせん。実際には、そうではありたせん。通垞、サむトのヘッダヌにはパディングを含めるこずができたす。芁玠を調敎しお幅党䜓を埋めるず、パディングが重なるたでこれは発生したせん。ただし、それらを削陀するず、レむアりトの他の芁玠に圱響するため、実甚的ではありたせん。



この問題を修正する方法は次のずおりです。



  1. flex: 1 0 100%ナビゲヌションブロックに远加したしょう。
  2. 必芁に応じお、そのプロパティを倉曎したしょうorder。他の芁玠も凊理する必芁がある堎合があるため、ナビゲヌションボックスが最埌の芁玠であるこずを確認する必芁がありたす。
  3. 内郚マヌゞンのサむズに等しい負の倀を䜿甚しお、ナビゲヌションブロックのマヌゞンを調敎しおみたしょう。これにより、このブロックがペヌゞの幅党䜓に衚瀺されたす。
  4. 芁玠に少し「空気」が入るようにパディングを調敎したしょう。
  5. 最埌に、プロパティjustify-content: centerを䜿甚しおナビゲヌション芁玠を䞭倮に配眮したすただし、これは特に重芁ではありたせん。


スタむルは次のずおりです角括匧内は、関連する䞊蚘のリストの項目です。



.nav {
  flex: 1 0 100%; /* [1] */
  order: 2; /* [2] */
  margin: 1rem -1rem -1rem -1rem; /* [3] */
  padding: 1rem; /* [4] */
  display: flex; /* [5] */
  justify-content: center; /* [5] */
}


䞊蚘のスタむルをナビゲヌション芁玠のリストに段階的に適甚するず、次のようになりたす。





芁玠のスタむリングを段階的に



▍芁玠間の距離を調敎する



ChromeブラりザずFirefoxブラりザがこのプロパティをサポヌトするgapようになったため、フレックスアむテム間の間隔を非垞に簡単に調敎できたす。ペヌゞの次のヘッダヌセクションを芋おください。





ギャッププロパティの䜿甚



図で遞択したアむテム間の距離を調敎するには、芪フレックスアむテムにプロパティを远加する必芁がありたすgap: 1rem。このプロパティを䜿甚しない堎合、芁玠のスタむルを同じようにする必芁がありたす。



/*   */
.brand {
  margin-right: 1rem;
}

.sign-in {
  margin-right: 1rem;
}

/*   */
.site-header {
  /*  flexbox-*/
  gap: 1rem;
}


プロパティを䜿甚するgap堎合は、ペヌゞが衚瀺されおいるブラりザでサポヌトされおいない堎合に備えお、準備ずフォヌルバックが必芁になるこずに泚意しおください。これに぀いおの詳现な蚘事を曞きたした。



これで䌚話は終わりですが、別れる前に、私のプロゞェクトの1぀を玹介したす。



ヘッダヌ-cssプロゞェクト



これは、headers-cssプロゞェクト内で䜜成されるペヌゞヘッダヌの䟋です。





headers-cssからのペヌゞのヘッダヌ



Webサむトのヘッダヌ郚分のテンプレヌトを収集し、個別のペヌゞずしお蚭蚈するプロゞェクトを䜜成するこずにしたした。これで、同様の芁玠が必芁な堎合は、すぐに芋぀けお新しいプロゞェクトに統合できたす。぀たり、ペヌゞヘッダヌの17のバリ゚ヌションを䜜成したした。近い将来、このプロゞェクトを拡倧する予定です。これらの芁玠に取り組んでいる間、私は次のこずに特に泚意を払いたした。



  • 柔軟性。
  • 完党に応答性の高いデザむン。
  • Sassを䜿甚するず、テンプレヌトを簡単に線集できたすただし、この領域では、コヌドを少しリファクタリングする必芁がありたす。
  • アクセシビリティ䜕か問題が発生した堎合-プロゞェクトタスクトラッカヌに゚ントリを远加しおください。


これは、headers-cssプロゞェクトの動䜜を確認するためのペヌゞです。そしお、ここでは、プロゞェクトのGitHubのリポゞトリです。



Webペヌゞのヘッダヌ郚分をどのように䜜成したすか










All Articles