フロートでよこ並び
そのむかし、よこ並びCSSといえばfloatプロパティでした。よこ並びといえば、ほぼfloatプロパティだけでまかなっていましたよね。現在はよこ並びとして使うのは忌まわれがちなfloatプロパティですが、フレックスボックスレイアウトやグリッドレイアウトとは違う、特殊なよこ並びの手法のひとつとして、覚えておいても良いんじゃないかなと思います。
フロートでのレイアウト
floatプロパティは本来、よこ並びするためのプロパティではなく、特定の要素を左右に寄せて配置するためのプロパティです。
例えば、下のサンプルみたく、文章中の挿絵をレイアウトする時。img要素に対してfloat: left
と指定すれば、画像は左側に寄り、float: right
と指定すれば、画像は右側に寄り、その後に続く要素は、画像を避けながら、その隣に回り込むようにレイアウトされます。
フロートでのよこ並び
そんなfloatプロパティを使って要素をよこ並びにしてみます。
例えば下のサンプルのようなナビゲーションならば、li要素すべてにfloat: left
を指定して、続々と左へ寄せることで、横一列に並べることができます。横幅を指定しなければ、その要素の内容(ここでは文字数)に準拠した横幅でよこ並びになります。
また、ふたつめ以降のli要素(li:nth-child(n+2)
)の左側に1pxのパディングを指定して、ボタンごとに隙間を空けています。
フロートしたら解除が必要
※フロートした後には、フロート解除も忘れずに。ここでは、.nav_list
の::after擬似要素に、clearfixを適用しています。
clearfixについては下記ページを参照のこと。
clear - CSS: カスケーディングスタイルシート | MDN
ナビゲーションを中央に配置する
上のサンプルだと、ナビゲーション全体が左に寄っちゃってますけれど、中央に配置したいなって時には、ul要素の横幅にfit-contentという値を指定して、左右のマージンにauto
を適用すれば、うまく中央に配置されます。
fit-content
は、指定した要素内のコンテンツに準拠したサイズを表すキーワードで、ここでは、li要素5つ分の横幅が、ul要素に適用されます。そして幅を持つプロック要素は、左右のマージンにauto
が適用されると、うまい具合に中央に寄るのです。:)
ナビゲーションを横幅いっぱいにレイアウトする
ナビゲーション全体を親要素の横幅いっぱいに広げるには、widthプロパティの値の合計が100%となるように、li要素の横幅に20%
を指定します。
あれれ、なんだか変になっちゃいました。最後のリンクボタンが改行しちゃってるみたいですね…:(。
width/heightプロパティで指定したサイズは、paddingプロパティの内側のサイズとして適用されて、paddingプロパティの値は指定したサイズの外に適用されるんです。
つまり今、リンクボタンの横幅は、20% + 1px
になってるってこと。100%を超えて、最後のひとつだけ改行しちゃいました。Xp
この振る舞いは、box-sizingプロパティで変更できます。
デフォルトではcontent-box
という値になっていて、width/heightプロパティで指定したサイズは、padding/borderプロパティの値を含まないサイズとして適用されるのだけれど、これをborder-boxという値に変えると、padding/borderプロパティの値を含むサイズとして適用されるようになります。
レイアウトする時にはこちらの振る舞いの方がわかりやすくて良いですね:)!
均等に横に並んだけれど、文字数によって改行されると、リンクボタンの高さが揃わなくてかっこ悪いです…。
下のサンプルでは、リンクボタンのテキストがなるべく1行になるように、文字数に合わせてボタンの横幅を調整してみたけれど、画面幅によっては結局、改行したりしなかったりするし…X(。
文字数をうかがいながら細かい調整するのは、面倒臭いから、ちょっと厭かも…。
そんな時にはテーブルレイアウトを使う方法が便利です!…けれどそれはまた次の記事で。
テーブルレイアウトでよこ並び