vertical-alignが効かない時の対処法

verticalなalignをmiidleにしたいのに、全くいう事を聞きてくれません。
そんな時の対処法です。

目標はただ1つ!
上下高さの真ん中に位置づけしたい。

この目標を一緒に解決していきましょう。

まず落ち着く

焦っても解決しないので、どっしり構えましょう。
そして、次の事項を確認してください。

確認する

1・その要素、ブロック要素じゃないですか?
2・その要素にfloatかけてませんか?
3・かけてる所、間違ってませんか?
4・そもそもvertical-alignじゃないとダメですか?

1・ブロック要素には効かないので、インライン要素に変える。

例えば<div>タグはブロック要素なので、そのままだとvertical-alignは効きません。
なので、displayプロパティを使って、インライン要素に変えてあげましょう。
この時 display: inline; だと高さや幅の指定ができないので、 display: table-cell; を使います。
あとは必ず、高さを指定してください。
高さの真ん中に来るはずです。

2・インライン要素でも、floatが掛かっている場合は効きません。

せっかくインライン要素にしたのに、floatを使って横並びにしている時は、やはりvertical-alignは効きません。
さて、困りましたね。。。
こんな時は、floatを使うことをやめましょう。
そして横並びにしたい要素に display: table-cell; で横に並ばせ、かつ、 vertical-align: middle; をつけましょう。
もちろん、高さの指定も忘れずに!

3・vertical-alignをかける所、お間違えないですか?

vertical-alignは、子要素に継承されません。
従って、かけたい要素に向かって書いてあげる必要があります。
vertical-align: middle; にしたい要素の親要素に書いても、効きません。
もう一度、記述が間違っていないか確認しましょう。

4・本当にvertical-alignを使わないとダメなのでしょうか?

そもそも、高さの真ん中に位置付けする方法として、vertical-align以外にもあらゆる手段があります。
ちょっと他との兼ね合いで、display: table-cell;に出来ないんだよなー・・・っていう時もあります。

ならば、ブロック要素での高さの中央寄せにトライしてみてください。

親要素には、

.クラス名{
    position: relative;
    width: ○○px;
    height: ●●px;
}

を指定。

真ん中にしたい子要素には、

.クラス名{
     position: absolute;
     top: 0;
     bottom: 0;
     margin: auto;
     width: ▲▲px;
     height: ▲▲px;
}

を指定。

コードサンプルは以下の通りです。
【html】

Lorem ipsum dolor sit amet.

【css】

.aaA{
        position: relative;
	width: 300px;
	height: 300px;
}
.bbB{
	position: absolute;
	top: 0;
	bottom: 0;
	margin: auto;
	width: 100px;
	height: 100px;
}

コーディングって本当に言うこと聞いてくれないと疲れちゃうけど、サクッと動いてくれるととてもうれしいですよね!だから、今日も頑張ってコーディングしていきましょう♪

Written by

売上が上がらない、人手が足りない…EC運営代行歴15年のプロが解決 繁忙期猫の手も借りたい!そんなあなたに代わって制作いたします。バナー・LP・商品画像・イラスト