Q: 请问icon要怎麽出图好呢?
A: 一定要用图片吗?
本篇要实作的是「加到最爱」的按钮,结合之前所述的伪元素,以不使用图片的方式做出图案,让按钮可以有更多变化。
<script>
function toggle() {
document.getElementById('container').classList.toggle('is-active')
}
</script>
<style>
.container {
box-sizing: border-box;
width: 70px;
height: 40px;
padding: 2px;
border-radius: 20px;
background-color: #eee;
border: 2px solid #ccc;
}
.circle {
position: relative;
width: 32px;
height: 32px;
background-color: #aaa;
border-radius: 50%;
margin-left: 0;
cursor: pointer;
}
.container,
.circle {
transition: .3s;
}
.is-active.container {
background-color: LavenderBlush;
border-color: Crimson;
}
.is-active .circle {
background-color: Crimson;
margin-left: calc(100% - 32px);
}
</style>
<div id="container" class="container">
<div class="circle" onclick="toggle()"></div>
</div>
再来要使用伪元素::before
及::after
做出「+」,以position: absolute
将元素定位在.circle
左方及上方各为50%的位置,然後以transform: translate(-50%, -50%)
将元素回推自己的X
及Y
各一半,最後再给::before
及::after
宽高就可以罗,这时候不论宽高如何调整,都会在.circle
的正中央。
<style>
.circle::before,
.circle::after {
content: '';
position: absolute;
left: 50%;
top: 50%;
background-color: #eee;
transform: translate(-50%, -50%);
border-radius: 2px;
}
.circle::before {
height: 60%;
width: 5px;
}
.circle::after {
width: 60%;
height: 5px;
}
</style>
将::before
及::after
都做成拱形的样子,并将两个重叠就会是爱心。先移除原本位移的transform
,并让 top
及 left
的位置修改为24%。最後对 .circle
进行旋转就可以让爱心变成正的了!
<style>
.is-active .circle::before,
.is-active .circle::after {
transform: none;
top: 24%;
left: 24%;
}
.is-active .circle::before {
width: 32%;
border-radius: 0 0 20px 20px;
}
.is-active .circle::after {
height: 32%;
border-radius: 0 20px 20px 0;
}
.is-active .circle {
transform: rotate(-135deg);
}
</style>
再来为了icon也有渐变的效果,所以需要在::before
及::after
也都加上属性transition
。
<style>
.circle::before,
.circle::after {
transition: .3s;
}
</style>
如果可以用css就做出icon取代图片,还可以让画面变化时有转场的效果,这样不美吗?
如果有写错的地方,欢迎点评! 会及时改进~
如果有更好的写法,欢迎指教! 希望各位不吝赐教~
如果想看更多效果,欢迎敲碗! 提供示意图小编写写看~
如果内容疑似侵权,拜托告知! 内容皆为小编理解後原创~
如果对你有点帮助,拿去用吧!
<<: [火锅吃到饱-3]【士官长野地餐厅(台中) Sauerkraut Hot Pot】酸菜火锅吃到饱
>>: D14-(9/14)-台泥(1101)-全台湾第一号股票
由於自己对ML的所知的大略概念,和Vertex的基本使用方式介绍已经结束,已经能够部署和得到预估值,...
前言 在学习 FP 的过程中,会看到 FP 常常被拿来跟 OOP 做比较,那 OOP 究竟是什麽呢?...
一般来说日期、时间几乎都同时出现 既然昨天学了Android的日期交谈视窗 今天就来学时间的交谈视窗...
今日目标 认识 SpriteKit 创建 Game Playground 认识 SKView 及 S...
今天要学习如何用React的Component的概念来设计你的UI画面,下面用React官网提供的素...