如何用純 CSS 創作一種按鈕被瞄準的互動特效
阿新 • • 發佈:2018-11-20
效果預覽
按下右側的“點選預覽”按鈕在當前頁面預覽,點選連結全屏預覽。
https://codepen.io/zhang-ou/pen/ELWMLr
可互動視訊教程
此視訊是可以互動的,你可以隨時暫停視訊,編輯視訊中的程式碼。
請用 chrome, safari, edge 開啟觀看。
原始碼下載
本地下載
請從 github 下載。
https://github.com/comehope/front-end-daily-challenges/tree/master/009-aimed-button-effects
程式碼解讀
定義 dom,容器中包含 5 個 span,第 1 個是按鈕文字,另 4 個用來修飾:
<div class="box"> <span>BUTTON</span> <span class="top"></span> <span class="bottom"></span> <span class="left"></span> <span class="right"></span> </div>
居中顯示:
html, body {
height: 100%;
display: flex;
align-items: center;
justify-content: center;
background-color: black;
color: silver;
}
設定文字樣式:
.box { width: 9em; height: 3em; font-size: 30px; text-align: center; line-height: 3em; letter-spacing: 0.2em; font-family: sans-serif; }
畫出瞄準鏡中間的圓圈:
.box {
position: relative;
}
.box::after {
content: '';
position: absolute;
width: 3em;
height: 3em;
border: 1px solid red;
border-radius: 50%;
left: 3em;
}
畫出瞄準鏡的十字座標線:
.box span:not(:first-child) {
position: absolute;
background-color: red;
}
.box span.top,
.box span.bottom {
width: 1px;
height: 3em;
left: 50%;
}
.box span.top {
top: -3em;
}
.box span.bottom {
bottom: -3em;
}
.box span.left,
.box span.right {
width: 3em;
height: 1px;
top: 50%;
}
.box span.left {
left: 0;
}
.box span.right {
right: 0;
}
定義瞄準動畫:
@keyframes aim {
from {
filter: opacity(0.2);
}
to {
filter: opacity(0.8);
}
}
應用瞄準動畫到瞄準鏡上:
.box::after {
filter: opacity(0);
}
.box span:not(:first-child) {
filter: opacity(0);
}
.box:hover::after,
.box:hover span:not(:first-child) {
animation: aim 1s linear infinite alternate;
}
最後,為容器設定從模糊到清晰的緩動效果:
.box {
filter: blur(2px);
transition: 0.5s;
}
.box:hover {
filter: blur(0.2px);
}
大功告成!
知識點
- :not https://developer.mozilla.org/en-US/docs/Web/CSS/:not
- :first-child https://developer.mozilla.org/en-US/docs/Web/CSS/:first-child
- filter functions https://developer.mozilla.org/en-US/docs/Web/CSS/filter#Functions
- animation-direction https://developer.mozilla.org/en-US/docs/Web/CSS/animation-direction
原文地址:https://segmentfault.com/a/1190000014680999