Sponsored Link
WEBページレイアウト 中央寄せのやり方
リストの横並びと左右中央揃え
左右中央に揃える際に重要なのが
揃えたい要素が「インライン要素」か「ブロック要素」かです。
li 要素はブロック要素のため、横並びにするにはいくつか方法があります。
float を設定する方法と、 display でインライン要素に変更する方法です。
今回は横並びにする方法と併せて、中央揃えに設定する方法も記載します。
<div class="list"> <ul> <li><a href="#">ナビ1</a></li> <li><a href="#">ナビ2</a></li> <li><a href="#">ナビ3</a></li> </ul> </div>
floatで横並びにするケース
.list { overflow: hidden; position: relative; } .list ul { float: left; left: 50%; margin: 0; /* 余分なマージンを消す */ padding: 0;/* 余分なパディングを消す */ position: relative; } .list ul li { background-color: #f00; float: left; left: -50%; margin: 0 10px; /* 隙間を入れたい場合に設定 */ position: relative; text-align: center;/* インラインの左右の中央揃え */ width: 100px; /* 任意の幅 */ } .list ul li a { display: block;/* 文字以外にも幅全体にリンクを付けたい時はブロック要素にする */ }
.list { overflow: hidden; position: relative; ul { float: left; left: 50%; margin: 0; /* 余分なマージンを消す */ padding: 0;/* 余分なパディングを消す */ position: relative; li { background-color: #f00; float: left; left: -50%; margin: 0 10px; /* 隙間を入れたい場合に設定 */ position: relative; text-align: center;/* インラインの左右の中央揃え */ width: 100px; /* 任意の幅 */ a { display: block;/* 文字以外にも幅全体にリンクを付けたい時はブロック要素にする */ } } } }
- .listのrelativeで相対位置を決定します。
- 下位要素のulのrelativeで、.listの左(left)位置から50%右に移動させます。
- さらに下位要素のliのrelativeで、ulの左(left)位置から-50%右に移動させます。
※-50%右は単に左に50%分移動すると考えればOK
.list ul { width: 1000px;/* リスト全体の幅 */ margin: auto; /* 中央揃え */ padding: 0; /* 余分なパディングを消す */ } .list ul li { float: left; margin: 10px; /* 隙間が必要な場合はmarginを設定 */ padding: 10px;/* liの大きさを変えたい場合はpaddingを設定(高さも持たせられる) */ width: 293px; /* liが3つで想定 */ } .list ul li a { display: block;/* 文字以外にも幅全体にリンクを付けたい時はブロック要素にする */ }
.list ul { width: 1000px;/* リスト全体の幅 */ margin: auto; /* 中央揃え */ padding: 0; /* 余分なパディングを消す */ li { float: left; margin: 10px; /* 隙間が必要な場合はmarginを設定 */ padding: 10px;/* liの大きさを変えたい場合はpaddingを設定(高さも持たせられる) */ width: 293px; /* liが3つで想定 */ a { display: block;/* 文字以外にも幅全体にリンクを付けたい時はブロック要素にする */ } } }
※ポイント※
- ulでwidth(幅)を指定する
- liの幅がulで設定した幅を超えてしまうとカラム落ちします。
width以外にも、「margin」「padding」「border」の数値も含みます。 - 逆にulで設定した幅に満たない場合は、中央に揃いません。
float以外のケース
.list ul { margin: 0; /* 余分なマージンを消す */ padding: 0;/* 余分なパディングを消す */ text-align: center; } .list ul li { display: inline-block; margin: 10px; /* 隙間が必要な場合はmarginを設定 */ padding: 10px 0;/* liの高さを変えたい場合はこのpaddingを設定 */ } .list ul li a{ display:block; padding:0 10px;/* ここで幅全体にリンクをつける事が出来る */ }
.list ul { margin: 0; /* 余分なマージンを消す */ padding: 0;/* 余分なパディングを消す */ text-align: center; li { display: inline-block; margin: 10px; /* 隙間が必要な場合はmarginを設定 */ padding: 10px 0;/* liの高さを変えたい場合はこのpaddingを設定 */ a{ display:block; padding:0 10px;/* ここで幅全体にリンクをつける事が出来る */ } } }
※ポイント※
- ul要素のtext-aline:centerで、内部のインライン要素を中央に揃える
- li要素がブロック要素のため文字列しか中央に揃わないので、
li要素をdisplay:inline-blockにしてインライン要素に変える - li要素で幅を変更してしまうと、a要素がブロック要素でも反応しないため、
幅全体をリンクしたいときはa要素で幅を変更すること。
逆にa要素で高さも変更してしまうと、高さにもリンクが付いてしまうため注意が必要
inline-blockはfloatを使用しなくても、横並びの中央寄せが出来るので便利です。
ただしリストに隙間が出来るので、隙間を気にするのであれば別途対応が必要です。
- liタグを改行しないで並列で書く
- コメントアウトして書く(なんか気持ち悪い…)
- liの閉じタグをつけない(html5のみらしい)
- ulタグにletter-spacing:-.40em;をつけて、liタグにletter-spacing:nomal;で隙間を埋める(liタグのところがいまいちよく分かってない・・・)
.list ul { display: table; margin: 0 auto;/* ulの中央揃え */ padding: 0; /* 余分なパディングを消す */ } .list ul li { border-right: 10px solid #fff;/* 隙間を入れたい時の力技 */ display: table-cell; width: 200px; /* 任意の幅 */ height:100px; /* 任意の高さ */ text-align: center; /* 左右の中央揃え */ vertical-align: middle; /* 上下の中央揃え */ }. list ul li:last-child { border-right: 0;/* 隙間を入れた時に一番最後のリストのボーダーを消す */ } .list ul li a { display: block;/* 文字以外にも幅全体にリンクを付けたい時はブロック要素にする */ }
.list ul { display: table; margin: 0 auto;/* ulの中央揃え */ padding: 0; /* 余分なパディングを消す */ li { border-right: 10px solid #fff;/* 隙間を入れたい時の力技 */ display: table-cell; width: 200px; /* 任意の幅 */ height:100px; /* 任意の高さ */ text-align: center; /* 左右の中央揃え */ vertical-align: middle; /* 上下の中央揃え */ &:last-child { border-right: 0;/* 隙間を入れた時に一番最後のリストのボーダーを消す */ } a { display: block;/* 文字以外にも幅全体にリンクを付けたい時はブロック要素にする */ } } }
※ポイント※
table => table要素のような表示になる
table-cell => td要素のような表示になる
table-cellにmarginは効きません。(paddingは効く)
- ul要素をdisplay:tableとmargin:0 autoを使って中央に揃える
- li要素にdisplay:table-cellとvertical-align:middleを使って上下中央に揃える