本文用两种方式实现了鼠标移动到图片上时,有光线闪过的效果。
第一种:使用::before伪元素实现。
1.html代码部分
<div class='container'><div class="item"><a href="#"><div><img src="./img/dizi.jpg" /></div></a></div><div class="item"><a href="#"><div><img src="./img/yishu.jpg" /></div></a></div><div class="item"><a href="#"><div><img src="./img/laikang.jpg" /></div></a></div>
</div>
2.css代码部分
实现思路:
使用伪元素::before在item的前面放置一个盒子,内容为空,设置盒子的宽度高度,初始位置在.item的左侧,结束位置在.item的右侧,光线效果使用linear-gradient线性渐变,并让盒子绕x轴倾斜-25deg
当鼠标移到.item图片上时,这个光线盒子从左边移动到右边
.container {width: 1000px;margin: 20px auto;height: 200px;display: flex;justify-content: space-between;}.container .item {position: relative;width: 300px;overflow: hidden;}.container .item img {width: 100%;height: 200px;}.container .item::before {content: '';position: absolute;width: 200px;height: 100%;top: 0;left: -150%; /*初始水平位置,光线用渐变效果生成*/background-image: linear-gradient(rgba(255, 255, 255, 0) 0,rgba(255, 255, 255, 0.2) 50%,rgba(255, 255, 255, 0) 100%);transform: skewX(-25deg);}.item:hover::before {left: 150%; /*结束处的水平位置*/transition: all .5s ease 0s; /*过渡效果*/}
第二种:额外添加标记<i></i>实现
1.html代码部分
增加<i></i>标记
<div class="item"><a href="#"><div><img src="./img/laikang.jpg" /></div></a><i class="light"></i></div>
2.css代码部分
实现思路:和第一种基本一样,区别是这里用的hsla颜色值,第一种用的是rgba颜色值
.item {position: relative;width: 300px;height: 200px;overflow: hidden;}.item img {width: 100%;height: 100%;}.item .light {cursor: pointer;position: absolute;left: -150%; /*初始水平位置*/top: 0;width: 100%;height: 100%;background-image: linear-gradient(0deg, hsla(0, 0%, 100%, 0), hsla(0, 0%, 100%, .5), hsla(0, 0%, 100%, 0));transform: skewX(-25deg); /*绕X轴倾斜-25度*/}.item:hover .light {transition: all .5s ease; /*过渡效果*/left: 150%; /*结束水平位置*/}