HTMLとCSSのみでテキストホバー時に画像を文字背景に表示させる(備忘録)
今回は、HTMLとCSSのみでテキストホバー時に画像を文字背景に表示させてみます。
Webデザインギャラリーを眺めていると、リンクをホバーしたときに、画像が表示される演出が多いと思ったので、一旦CSSだけでテキストホバー時に画像を文字背景に表示させてみることにしました。JavaScriptを使った実装は後日やっていきたいと思います。
それではやっていきましょう。
HTMLの記述について
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTMLとCSSのみでテキストホバー時に画像を文字背景に表示させる(備忘録)</title>
<link rel="stylesheet" href="../reset.css">
<link rel="stylesheet" href="./style.css">
</head>
<body>
<main>
<ul>
<li class="menuItem">
<a class="menuItem-link">止まっているシマエナガ
<img class="menuItem-img" src="images/img_01.webp" alt="" />
</a>
</li>
<li class="menuItem">
<a class="menuItem-link">飛んでいるシマエナガ
<img class="menuItem-img" src="images/img_02.webp" alt="" />
</a>
</li>
</ul>
</main>
</body>
</html>
aタグの中にimgタグを入れているだけです。特に難しいことはしていません。
CSSの記述について
@charset "utf-8";
/* ==========================
初期設定
========================== */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
position: relative;
word-wrap: break-word;
}
img {
width: 100%;
height: auto;
vertical-align: bottom;
}
/* レイアウト設定 */
body {
font-family: sans-serif;
}
main {
margin: 80px 0;
padding: 0 24px;
}
ul {
list-style: none;
}
.menuItem-link {
font-size: 80px;
cursor: pointer;
position: relative;
color: transparent;
-webkit-text-stroke: 1px #000;
text-stroke: 1px #000;
transition: 0.3s;
font-weight: bold;
display: block;
width: fit-content;
}
.menuItem-link:hover {
color: #c3512f;
-webkit-text-stroke: 1px #c3512f;
text-stroke: 1px #c3512f;
}
.menuItem-img {
width: 320px;
z-index: -1;
position: absolute;
max-height: 240px;
opacity: 0;
left: 100%;
top: 50%;
transform: translate3d(-120%, -40%, 0) translate3d(0, 24px, 0);
transition: opacity 0.3s, transform 0.6s;
}
.menuItem-link:hover .menuItem-img {
opacity: 1;
transform: translate3d(-120%, -40%, 0) rotate3d(0, 0, 1, 8deg);
}
menuItem-imgに対して、ホバーする前はopacityを0に、ホバー時はopacityを1にして、transformで位置を移動しているだけです。
これだけで対応が完了です。
次回はJavaScriptを使って、応用編の動きを作っていきたいと思います。