横並びのリストタグの高さを揃える
こんにちは、ゼノフィ渡部です。
CSSだけで横並びのリストタグの高さを揃える方法をご紹介いたします。
リストタグの横並びは「float」プロパティが思い浮かぶと思います。ここでは横並びに関しては、「display: inline-block;」を使用します。
2行目の「display: inline-block;」で横並びにし、4行目の「vertical-align: top; 」でli要素を上端揃えにします。これでFirefoxやSafariなどのブラウザに対しては高さを揃えることができます。
IE6とIE7は「display: inline-block;」に対応していませんので、CSSハックで代替プロパティを指定します。12行目から13行目、18行目から19行目が各プロパティになります。
IE6とIE7は「display: inline;」で横並びにします。「zoom: 1;」はli要素のマージンやパディングの指定がうまくいかない場合などの解消用に指定します。ただ、「zoom: 1;」はリストマーカーの表示がおかしくなってしまう問題があるので状況によって使い分けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ul.inl_block li { display: inline-block; /* 横並び */ width: 148px; vertical-align: top; /* li要素を上端揃えに */ margin: 0 20px 20px 0; padding: 20px; border: 1px solid #CCC; } /* IE6 */ ul.inl_block li { _display: inline; /* display: inline-block;の代わり */ _zoom: 1; /* 状況によって使い分ける */ } /* IE7 */ *:first-child+html ul.inl_block li { display: inline; /* display: inline-block;の代わり */ zoom: 1; /* 状況によって使い分ける */ } |
高さがそろっているソースと揃っていない、ソースを記述しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <p> 高さが揃っている </p> <div class="box"> <ul class="inl_block"> <li> 1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番 </li> <li> 2番 </li> <li> 3番 </li> </ul> </div> <p> 高さが揃っていない </p> <div class="box"> <ul class="block"> <li> 1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番 </li> <li> 2番 </li> <li> 3番 </li> </ul> </div> |
「display: inline-block;」で横並びにしているリストタグでは、1番の要素が多くても左上から「1番」、「2番」、「3番」と表示されています。
「float: left;」で横並びにしているリストタグでは、1番の要素が多いと「3番」が「2番」の下に移動してしまっています。
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | ul { list-style-type: none; margin: 0; padding: 0; } div.box { width: 470px; } ul.inl_block { margin: 0 0 40px; } ul.inl_block li { display: inline-block; /* 横並び */ width: 148px; vertical-align: top; /* li要素を上端揃えに */ margin: 0 20px 20px 0; padding: 20px; border: 1px solid #CCC; } ul.block li { float: left; width: 148px; margin: 0 20px 20px 0; padding: 20px; border: 1px solid #CCC; } /* IE6 */ ul.inl_block li { _display: inline; /* display: inline-block;の代わり */ _zoom: 1; /* 状況によって使い分ける */ } /* IE7 */ *:first-child+html ul.inl_block li { display: inline; /* display: inline-block;の代わり */ zoom: 1; /* 状況によって使い分ける */ } |
HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <p> 高さが揃っている </p> <div class="box"> <ul class="inl_block"> <li> 1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番 </li> <li> 2番 </li> <li> 3番 </li> </ul> </div> <p> 高さが揃っていない </p> <div class="box"> <ul class="block"> <li> 1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番1番 </li> <li> 2番 </li> <li> 3番 </li> </ul> </div> |