作成したサンプルは以下のURLを参照
https://codepen.io/dninja9902/pen/ZMVaRQ
画像とボタンでそれぞれに対して@keyframesによる
アニメーションで実現しました。
How to create?
HTMLファイルにて一つのdiv要素の中に画像とボタンを表示する要素を入れます。
<div id="sample"> <img src="・・・" /> <div><p>Button</p></div> </div>
CSSでid="sample"に対して表示する領域を決めます。
その時に、画像がその表示領域からはみ出した場合の対処が必要なので、
overflow: hidden;
をいれます。
#sample { width: 660px; height: 480px; margin: 0 auto; /* 表示位置を中央にするための小技 */ overflow: hidden; }
画像に対するスタイルを記載します。
こちらはマウスオンする前の初期状態として、
filter: brightness(100%);
を指定します。
#sample > img { filter: brightness(100%); }
ボタンに対するスタイルですが、
こちらもマウスオンする前の初期状態を指定します。
#sample > div { position: relative; top: -180px; } p { margin: 0 auto; width: 100px; text-align: center; border: 2px solid black; padding: 15px; font-family: sans-serif; font-weight: bold; color: black; }
次はマウスオンした場合のスタイルを定義します。
画像の場合は少しズームインし、かつ明度を暗くします。
ボタンも同様のタイミングで、文字の色を黒から白にします。
これをアニメーションで実現するので
@Keyframes
を利用しています。
#sampleの要素をマウスオンすると、
画像とボタンはそれぞれimageHover, imageBtnHover
というanimation-nameで定義された内容に従い、
animation-duration: 1s;
animation-timing-function: liner;
の定義により、1秒間の等速でアニメーションします。
また、アニメーション後の状態も維持するために、
animation-fill-mode:both;
を使用しています。
#sample:hover img { animation-name: imageHover; animation-duration: 1s; animation-timing-function: liner; animation-fill-mode:both; } #sample:hover p { animation-name: imageBtnHover; animation-duration: 1s; animation-timing-function: liner; animation-fill-mode:both; } @keyframes imageHover { 100% { transform: scale(1.2); filter: brightness(70%); overflow: hidden; } } @keyframes imageBtnHover { 100% { color: white; border-color: white; } }
以上により、完成となります。
サンプル例は当記事の冒頭にあるURLから確認できます。
Comment
2022年12月4日11:27 FK
不適切な内容が含まれている可能性があるため、削除されました。