お知らせ / ブログINFO / BLOG

2019.06.05

【CSS】display:inline-block;での横並びと隙間対策

グローバルナビなど、要素を横並びにする場面は結構あります。
通常、要素を横並びにする場合はfloatを使用する事が多いとは思いますが、クリアを忘れてしまう、floatだと中央揃えにならないなど不便な事も多いです。

その際に便利なのがdisplay:inline-blockです。
「inline-block」は「block要素」と「inline要素」の両方の属性をもっており、文字数によりwidthが変動する「inline要素」の特徴と、widthやheight・marginなどの「block要素」の特徴があります。また、一番の利点としては「vertical-align」で縦位置中央に配置出来るのが良い所です。

要素の横並び

まずは、以下のようなHTMLでグローバルナビの横並びのやり方です。

<nav>
	<ul>
		<li>メニュー1</li>
		<li>メニュー2</li>
		<li>メニュー3</li>
	</ul>
</nav>

CSSは以下のように記載します。
横並びにする要素にdisplay:inline-block;を指定し、vertical-align:middle;で縦位置中央に揃えています。

ul {
	text-align:center; /* 中央揃え */
}
ul li {
	display:inline-block;
	vertical-align:middle; /* 縦位置中央揃え */
}

liの右・下側に余白が入る

上記のようなdisplay:inline-block;で横並びにした際、inline-blockを指定した要素の右・下に若干の余白が入ってしまいます。
これは、ソース上の改行が原因のようです。これを解消すにはcssを以下のように変更して下さい。

ul {
	font-size:0;
	text-align:center; /* 中央揃え */
}
ul li {
	font-size:14px;
	display:inline-block;
	vertical-align:middle; /* 縦位置中央揃え */
}

余白を削除する為に、横並びにする要素の直前の親要素に対しfont-size:0;を指定し、このままではliの文字サイズが0なので任意で文字サイズを指定して下さい。

他には以下のような方法もあります。
・<li>の終了タグ</li>を記載しない
・<li>タグ後の改行を取りつなげる
・親要素にletter-spacing:-1em;を指定し、子要素にletter-spacing:0em;を指定する
というようなやり方もありますが、あまりソース上綺麗ではない感じがします(笑)

最後に

他にも横並びのやり方はあります。
例えばdisplay:table;display:table-cell;での方法など。また後日掲載したいと思っています。

ページトップに戻る