• このエントリーをはてなブックマークに追加
  • このエントリーをはてなブックマークに追加

レスポンシブWebデザインでも便利なinline-blockの3つの使い方

今回は、display:inline-blockを使って、要素を横並びにする方法をご紹介します。

display:inline-blockとは

display:inline-blockを適用すると、要素がインライン要素のように横に並び、かつブロックレベル要素のように高さの指定等もできるようになります。インライン要素?ブロックレベル要素?な方は下記の記事も参考にしてみてください。

参考:CSSの display: inline、display: block、display: inline-block をマスターしよう!  |  たねっぱ!

inline-blockはこんな時にぴったり

①高さが違う要素を並べるとき

高さを揃える
例えば複数の商品を並べるときなどで、一部の商品だけテキストが改行されたりで高さが合わない…というような場合。

高さが違う要素をfloatで並べると、レイアウトが崩れてしまいますが、inline-blockの場合は簡単に高さが揃ってくれます。

また、幅の合計が100%を越えると改行されるので、幅を調整することで、横に並べる要素の数を調整できます。

デモサイト①はこちら

<div>
<div class="itemBox disp-inBlock">
 <p>商品名</p>
 <img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名が長い!<br>商品名が長い!<br>商品名が長い!</p>
 <img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名</p><img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名</p><img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名</p><img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名</p><img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名が長い!<br>商品名が長い!<br>商品名が長い!</p><img src="item.png">
</div>
<div class="itemBox disp-inBlock">
 <p>商品名</p><img src="item.png">
</div>
</div>
.disp-inBlock{display:inline-block:}
/*小さいデバイスでは横に並べる数を変更*/
@media screen and (max-width: 600px){
	.itemBox{
	width:47%
}
}
/*以下はスタイルの調整*/
img{width:100%;}
.box1{height: 300px;
	width:500px;
	background-color:red}
.itemBox{
	width:22%;
	border:1px solid gray;
	margin:1%;}

 

②並んでいる要素の高さを調整したいとき

並んでいる要素の高さを調整

また、inline-blockに指定すると、floatと違って要素をvertical-alignプロパティを用いて調整することができます。

top、middleだけでなく、%やpxを指定して細かい調整も可能です。

画像とテキストを横に並べる際に便利です。

なお、このときmiddleや%、px等の基準となるのはベースラインで、これはテキストにしかありません。したがってテキストとテキストでないものを横に並べる際には、テキストでないもののほうにvertical-alignを適用します。

参考:vertical-align-スタイルシートリファレンス

デモサイト②はこちら

<div class="box">
<div class="disp-inBlock half v-btm"><img src="item.jpg"></div>
<div class="disp-inBlock text half">画像に対して<br>vertical-align:bottom;<br>が適用されています。</div></div>
<div>
<div class="box">
<div class="disp-inBlock text half">画像に対して<br>vertical-align:50%;<br>が適用されています。</div>
<div class="disp-inBlock half v-50"><img src="item.jpg"></div></div>
<div class="box">
<div class="disp-inBlock half v--35px"><img src="item.jpg"></div>
<div class="disp-inBlock text half">画像に対して<br>vertical-align:-35px;<br>が適用されています。</div></div>
</div>
.disp-inBlock{display:inline-block}
.v-btm{vertical-align:bottom;}
.v-50{vertical-align:middle;}
.v--35px{vertical-align:-35px;}
/*小さいデバイスでは縦に並べる*/
@media screen and (max-width: 600px){
	.half{
	width:100%
}
}
/*以下はスタイルの調整*/
.half{width:49%}
.text{text-decoration: underline;}

img{width:100%;}
body{font-size:35px;}
.box{margin:15px 0;
	border:1px solid;}

 

③折り返したくないテキストがあるとき

改行させない

折り返したくないテキストがあるときに、inline-blockで改行位置を変えることができます。

例えば、レスポンシブWebデザインのチェックボックスで、デバイス幅が変わっても、テキストの途中で改行されないようにすることができます。

デモサイト③はこちら

<div>希望職種<br>
<label><input type="checkbox" name="q1" value="その1"> SE</label>
<label><input type="checkbox" name="q1" value="その2"> プログラマー</label>
<label><input type="checkbox" name="q1" value="その3"> Webデザイナー</label>
<label><input type="checkbox" name="q1" value="その4"> ディレクター</label>
<label><input type="checkbox" name="q1" value="その5"> 営業</label>
<label><input type="checkbox" name="q1" value="その6"> その他 </label>
<label><input type="checkbox" name="q1" value="その7"> ブラウザ幅が変化してもテキストの途中で改行されません! </label>
</div>
</html>
label{display:inline-block;}

/*以下はスタイルの調整*/
input{font-size:20px;}

 

なお、inline-blockを使うと意図しない隙間ができてしまうので注意が必要です。

参考:inline-blockを並べた場合に発生する「隙間」を消去するCSS | INSPIRE TECH

終わりに

いかがでしたでしょうか。

レスポンシブWebデザインでコーディングをしているとよく高さが不揃いになり、見た目の違和感が出てくるケースはよくありますが、inline-blockで解決することは多いです。

同じく横に並べるプロパティで、table-cellの記事も併せてご覧ください。

レスポンシブ化するなら知っておきたいtable-cellの使い方

黒河