CSSの:hoverを使って画像の上にdivやspanを重ねて表示する方法
画像ホバー時にdivやspanをオーバーレイ表示させるテクニック
Web制作では、マウスカーソルが画像の上に乗ったとき(ホバー時)に、その画像の上へ別のコンテンツを重ねて表示したいケースがよくあります。たとえば、キャプションの表示やボタンの出現などが代表例です。
このようなオーバーレイ表示は、CSSの :hover 疑似クラスと .overlay クラスを組み合わせることで、JavaScriptを使わずに簡単に実現できます。
実装のポイント
- 絶対配置の活用:
.overlay要素を親要素基準でposition: absoluteにより配置します。 - 親要素の設定: 親要素には
position: relativeとdisplay: inline-blockを指定し、画像のサイズに合わせて幅・高さを100%にします。
HTMLの構造
<div class="image"> <img src="..." /> <div class="overlay">ホバー時に表示するコンテンツ</div> </div>
CSSの記述例
デフォルト状態では .overlay 要素を非表示(display: none)にしておきます。そして .image:hover .overlay セレクターを使うことで、ホバー時のみスタイルを切り替えます。.overlay は .image の子孫要素であるため、このセレクターはHTML構造上うまく機能します。
.image {
position: relative;
display: inline-block;
}
.overlay {
display: none;
}
.image:hover .overlay {
width: 100%;
height: 100%;
background: rgba(0, 0, 0, .5);
position: absolute;
top: 0;
left: 0;
display: inline-block;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/* その他のスタイル調整 */
.image img {
vertical-align: top;
}補足:モダンブラウザへの対応
上記のコードにある -webkit- や -moz- のベンダープレフィックスは、古いブラウザ向けのものです。現在の主要ブラウザでは box-sizing プロパティはプレフィックスなしで動作するため、必要に応じて省略しても問題ありません。
また、表示をより滑らかにしたい場合は、opacity と transition プロパティを組み合わせることで、フェードイン・フェードアウトのアニメーション効果を追加することもできます。
-
HTML DOMのflexGrowプロパティとは?構文と使い方をサンプルコード付きで解説
flexGrowプロパティとは?HTML DOMのflexGrowプロパティは、フレックスコンテナの中で各要素(フレックスアイテム)が余ったスペースをどの割合で受け取って伸びるかを設定するためのプロパティです。値には単位を付けない数値を指定します。構文flexGrowプロパティをJavaScriptから設定する場合は、次のような構文を使用します。object.style.flexGrow = number|initial|inheritそれぞれの値の意味は以下のとおりです。number … 他の要素と比べて、その要素がどれだけ伸びるかを示す数値。デフォルト値は0です。initial … プロパ
-
HTML DOMスタイルのflexFlowプロパティの使い方を徹底解説
HTML DOMのスタイルにおけるflexFlowプロパティは、要素のflexDirection(フレックスアイテムの方向)とflexWrap(折り返しの可否)をまとめて指定するためのプロパティです。これら2つのプロパティに対するショートハンド(一括指定)として機能し、記述した順序に従って値が適用されます。flexFlowプロパティの構文flexFlowプロパティを設定する際の基本的な構文は以下の通りです。object.style.flexFlow = flex-direction flex-wrap|initial|inherit;指定できる値の一覧flexFlowプロパティに設定できる各値