一点点js和一点点css实现霓虹字体
世界上不缺少美 只是缺少发现美的眼睛
前情提要
每个前端er在下定决心从事前端工作的时候,或许是被高薪迷蒙了双眼,或许是偏爱酷炫的css样式,又或许是喜欢寻根问底的那种成就感,不管怎样,到了现在,你们的初心还在吗?笔者一开始就是被酷炫的css特效所吸引入行的,一个个冰冷的代码,组合起来之后居然可以呈现出那么让人热血澎湃的效果,也许这就是前端的魅力吧,本文就带大家一起,重温css的野性之美--实现一个动态霓虹字体,本文需要少量的js知识以及少量的css的知识,效果酷炫,难度却不高,请放心食用。
静态版
酷炫字体的生成当然离不开我们的css样式,首先,我们需要绘制一个一个的正方形盒子,来放置我们的字体,然后点击字体呈现霓虹灯的效果,这里需要用到一个hue-rotate滤镜,稍后我们细说
- 以body为容器,这里用到的就是之前讲过的flex布局实现垂直和水平居中,将承载我们盒子的容器放进去
body {
padding: 0;
margin: 0;
height: 100vh;
background: #18191f;
display: flex;
justify-content: center;
align-items: center;
}
#box {
position: relative;
display: flex;
}
<body>
<!-- <input type="text" id="text"> -->
<div id="box">
</div>
</body>
- 正方体盒子 这里我们想要通过点击字体来实现霓虹灯效果,这里有两种办法,一种是通过js,给我们的盒子添加点击事件,然后去添加/移除我们的样式类名,一种是通过css来实现,有人可能在想了,css还能监听事件?答案是当然不能了,所以我们需要取巧一点,这里我们需要用到css3的一个属性选择器,添加/移除 像是一个开关一样,那么什么东西可以描述呢?原生元素里有checkbox和radio两种都可以表示开关状态,这里我们采用的checkbox类型,有人又要问了,checkbox不是个框吗,怎么能控制文字呢?这里又需要用到一个css3的选择器,叫做相邻元素选择器,
talk is cheap let me show the code
// 让checkbox在上面,与文字重叠起来,这样我们才能选中
input[type="checkbox"] {
position: absolute;
opacity: 0;
cursor: pointer;
height: 80px;
width: 80px;
z-index: 100;
}
// 边框通过阴影的方式来实现,这里采用了多层阴影来模拟立体的浮雕效果,颜色请自行探索
.item {
position: relative;
height: 80px;
width: 80px;
background: #18191f;
color: #555;
font-size: 46px;
line-height: 80px;
text-align: center;
cursor: pointer;
margin: 0 4px;
border-radius: 20px;
box-shadow: -1px -1px 4px rgba(255, 255, 255, 0.05),
4px 4px 6px rgba(0, 0, 0, 0.2),
inset -1px -1px 4px rgba(255, 255, 255, 0.05),
inset 1px 1px 1px rgba(0, 0, 0, 0.1);
}
// :checked伪类选择器 + 相邻元素选择器 实现对文字的操作,文字操作的核心是grow动画内的滤镜效果
input[type="checkbox"]:checked ~ div {
box-shadow: inset 0 0 2px rgba(255, 255, 255, 0.05),
inset 4px 4px 6px rgba(0, 0, 0, 0.2);
color: yellow;
text-shadow: 0 0 15px yellow, 0 0 25px yellow;
animation: glow 1.5s ease-in-out infinite;
}
@keyframes glow {
0% {
filter: hue-rotate(0deg);
}
100% {
filter: hue-rotate(360deg);
}
}
<div id="box">
<div class="child">
<input type="checkbox" />
<div class="item">掘</div>
</div>
</div>
- 滤镜 hue-rotate 这是一个色调旋转滤镜,注意的是,hue-rotate会丢失亮度的变化,因为hue-rotate在调整色调的时候不会调整亮度,通过这个滤镜结合动画,我们就能做出变幻的霓虹效果
动态版
看到这里有人可能就要大呼标题党了,难道每次我还得写dom结构么?所以这里需要小小的用到一点js的知识,input元素是用来接收用户输入的,我们借助input和它的onchange事件,就可以动态的操作变换字体了,下面采用的动态拼接模板字符串的方式,假如你愿意,也可以写成动态创建元素的方式
转载自:https://juejin.cn/post/7151402031956115492