ホバーアクションサンプルコード
-
hover-sample
ホバーすると下線が左から右へ流れる装飾です
注意:transitionはtransformを指定→ transition: transform .4s;
hover-sample
transform-origin: のleft topとright topを逆にすると ホバーすると下線が右から左へ流れる装飾です
HTML
<p class="hov-l-r">hover-sample</p>
css
.hov-l-r { display: inline-block; position: relative; } .hov-l-r::after { content: ""; position: absolute; bottom: -4px; left: 0; width: 100%; height: 3px; background-color: #4d6599; transform: scale(0, 1); transform-origin: right top; transition: transform .4s; } .hov-l-r:hover::after { transform: scale(1, 1); transform-origin: left top; }
-
hover-sample
上のコードのtransform-originの指示をなくすとセンターから広がる装飾になります
hover-sample
上のコードのheightを100%にしてz-indexを調節すると文字全体にbackground-colorが広がる装飾になります
HTML
<p class="hov-center">hover-sample</p>
css
.hov-center { display: inline-block; position: relative; } .hov-center::after { content: ""; position: absolute; bottom: 0; left: 0; width: 100%; height: 3px; background-color: #4d6599; transform: scale(0, 1); transition: .4s; } .hov-center:hover::after { transform: scale(1, 1); }
-
hover-sample
ホバーすると下線が下に下がる装飾です
HTML
<p class="hov-down">hover-sample</p>
css
.hov-down { display: inline-block; position: relative; } .hov-down::after { position: absolute; bottom: 10px; left: 0; content: ""; width: 100%; height: 3px; background-color: #4d6599; opacity: 0; transition: .4s; } .hov-down:hover::after { bottom: -5px; opacity: 1; }
-
hover-sample
ホバーすると中心からやわらかく、四角の中で円状に広がる装飾です
注意:疑似要素にmargin: auto;を忘れないように
hover-sample
上のコードの width: 240px;→ width: 200px; height: 48px;→ hight: 200px; にし、border-radius: 50%;を追加するとホバーすると中心からやわらかく円状に広がる装飾です
HTML
<p class="hov-circle"><span>hover-sample</span></p>
css
.hov-circle { position: relative; width: 240px; height: 48px; display: flex; justify-content: center; align-items: center; overflow: hidden; border: 1px solid #4d6599; } .hov-circle span { color: #333; z-index: 5; transition: 0.6s; } .hov-circle:hover span { color: #fff; } .hov-circle::after { content: ''; position: absolute; top: 0; bottom: 0; left: 0; right: 0; border-radius: 50%; margin: auto; width: 60px; height: 60px; background: #4d6599; transform: scale(0); transition: 0.6s; } .hov-circle:hover::after { transform: scale(5); }
-
hover-sample
ホバーすると四角に広がる装飾です
HTML
<p class="hov-sq"><span>hover-sample</span></p>
css
.hov-sq { display: inline-block; position: relative; padding: 10px 20px; } .hov-sq:hover:before, .hov-sq:hover::after { width: 100%; } .hov-sq:hover span:before, .hov-sq:hover span::after { height: 100%; } .hov-sq::before { background-color: #4d6599; content: ""; display: block; position: absolute; bottom: 0; right: 0; height: 3px; width: 0; transition: .4s; } .hov-sq::after { background-color: #4d6599; content: ""; display: block; position: absolute; top: 0; left: 0; height: 3px; width: 0; transition: .4s; } .hov-sq span::before { background-color: #4d6599; content: ""; display: block; position: absolute; bottom: 0; right: 0; height: 0; width: 3px; transition: .4s; } .hov-sq span::after { background-color: #4d6599; content: ""; display: block; position: absolute; top: 0; left: 0; height: 0; width: 3px; transition: .4s; }
-
hover-sample
ホバーすると、文字が1つずつアニメーションする装飾です
HTML
<p class="textAnimation">hover-sample</p>
css
.textAnimation { font-size: 30px; display: block; letter-spacing: 0.05em; transition: .6s; } .textAnimation span { display: inline-block; } .textAnimation:hover > span:nth-last-of-type(odd) > span { animation: showTextBottom01 ease-out 1s backwards; } .textAnimation:hover > span:nth-last-of-type(even) > span { animation: showTextBottom02 ease-out 1s backwards; } @keyframes showTextBottom01 { 0% { transform: translateY(50px); } 100% { transform: translateY(0px); } } @keyframes showTextBottom02 { 0% { transform: translateY(20px); } 100% { transform: translateY(0px); } }
js
const animationTagetElements = document.querySelectorAll(".textAnimation"); for (let i = 0; i < animationTagetElements.length; i++) { const tagetElement = animationTagetElements[i], texts = tagetElement.textContent, textsArray = []; tagetElement.textContent = ""; for (let j = 0; j < texts.split("").length; j++) { const t = texts.split("")[j]; if (t === "") { textsArray.push(" "); } else { textsArray.push('<span><span> style="animation-delay: ' + (j * 0.1) + 's;">' + t + '</span></span>') } } for (let k = 0; k < textsArray.length; k++) { tagetElement.innerHTML += textsArray[k]; } }
-
hover-sample
ホバーすると、文字が1つずつアニメーションして、背景色も左から右へスライドしてくる装飾です
HTML
<p class="textAnimation-02">hover-sample</p>
css
.textAnimation-02 { position: relative; font-size: 30px; display: block; letter-spacing: 0.1em; padding: 0.5rem 2rem; color: #fff; transition: .6s; background-color: #4d6599; text-align: center; z-index: 0; } .textAnimation-02::after { content: ""; position: absolute; bottom: 0; left: 0; width: 100%; height: 100%; background-color: #3f537e; transform: scale(0, 1); transform-origin: right top; transition: transform 2s; z-index: -1; } .textAnimation-02:hover::after { transform: scale(1, 1); transform-origin: left top; } .textAnimation-02 span { display: inline-block; transition: .6s; } .textAnimation-02:hover > span > span { animation: showTextDeg ease-out 1s backwards; z-index: 5; } @keyframes showTextDeg { 0% { transform: rotateY(360deg); } 100% { transform: rotateY(0); } }
js
const animationTagetElements02 = document.querySelectorAll(".textAnimation-02"); for (let i = 0; i < animationTagetElements02.length; i++) { const tagetElement02 = animationTagetElements02[i], texts02 = tagetElement02.textContent, textsArray = []; tagetElement02.textContent = ""; for (let j = 0; j < texts02.split("").length; j++) { const t = texts02.split("")[j]; if (t === "") { textsArray.push(" "); } else { textsArray.push('<span><span style="animation-delay: ' + (j * 0.1) + 's;">' + t + '</span></span>') } } for (let k = 0; k < textsArray.length; k++) { tagetElement02.innerHTML += textsArray[k]; } }
-
ホバーすると画像がカラーを保ったまま黒っぽくなって決められた範囲内で拡大する装飾です
HTML
<p class="hov-pic-dark"><img src="img/page-img/01.jpg" alt=""></p>
css
.hov-pic-dark { width: 100%; overflow: hidden; background-color: #000; } .hov-pic-dark img { max-width: 100%; transition: .6s; } .hov-pic-dark:hover img { transform: scale(1.05); opacity: 0.6; }
-
ホバーすると画像が上に上がり、影がつく装飾です
HTML
<p class="hov-pic-up"><img src="img/page-img/01.jpg" alt=""></p>
css
.hov-pic-up { width: 100%; } .hov-pic-up img { max-width: 100%; transition: .6s; } .hov-pic-up:hover img { transform: translateY(-10px); box-shadow: 10px 10px 10px rgba(0, 0, 0, 0.5); }
-
ホバーすると画像がぼやけながら決められた範囲内で拡大する装飾です
HTML
<p class="hov-pic-01"><img src="img/page-img/01.jpg" alt=""></p>
css
.hov-pic-01 { width: 220px; height: 220px; overflow: hidden; } .hov-pic-01 img { width: 220px; height: 220px; object-fit: cover; transition: .4s; } .hov-pic-01:hover img { transform: scale(1.2); filter: blur(2px); }
-
TEXTTEXT
ホバーすると画像が白黒になってテキストが表示、決められた範囲内でぼかしながら拡大する装飾です
filter: grayscale(100%) blur(2px); を filter: sepia(100%); にすると、ぼかしなしセピアになります。
HTML
<p class="hov-pic-02"><img src="img/page-img/01.jpg" alt=""></p>
css
.hov-pic-02 { width: 220px; height: 220px; position: relative; overflow: hidden; } .hov-pic-02 img { width: 220px; height: 220px; object-fit: cover; transition: .4s; } .hov-pic-02:hover img { transform: scale(1.2); filter: grayscale(100%) blur(2px); } .hov-pic-02:hover .text { opacity: 1; } .hov-pic-02 .text { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #fff; font-size: 2rem; opacity: 0; transition: .4s; }