网页按钮滑动变色与按钮光影效果的实现
基于chrome,不支持IE与Edge
网页按钮滑动变色与按钮光影效果的实现
网页按钮滑动变色与按钮光影效果的实现)
前言:涉及知识点
1.重塑复选框外观
2.伪元素after
3.是否勾选按钮
原理:
将复选框是否勾选理解为两个元素即可
知识点解释
1.重塑复选框外观
为了让它看上去更像回事,重塑外观
注:基于chrome,不支持IE与Edge
取消复选框默认外观
-webkit-appearance: none;
设置外边框
border: 10px solid #c1c1c1;
/*只是为了好看*/
设置圆角
border-radius: 50px;
/*也只是为了好看*/
设置长,宽,背景颜色
width: 150px;height: 70px;
background-color: #888;
position: relative;
/*如果要更改长度记得连着下面的被勾选伪元素(伪元素被选择时到达的位置)一起改*/
/*如果要更改宽度记得连下面的伪元素一起改*/
设置过渡
transition: 0.6s;
理解:在0.6s后元素完成转换
设置被勾选后的样子
input[type='checkbox']:checked{
background: #232323;
}
主体样式会继承原元素样式
有点类似于子类与父类的关系
元素css样式部分完整代码
input[type='checkbox']{
-webkit-appearance: none;
margin: 50px;
border: 10px solid #c1c1c1;
border-radius: 50px;
width: 750px;height: 70px;
background-color: #888;
position: relative;
transition: 0.6s;
}
input[type='checkbox']:checked{
background: #232323;
}
2.伪元素after
复选框<input type="checkbox"/>是一个单标签结构,无法在其内包裹元素。
所以用复选框改出来的按钮没有负责滑动的部分
为了解决这一问题,使用伪元素after作为负责滑动的部分
生成伪元素
input[type='checkbox']::after{
content: "";/*content表明这个东西存在*/
}
设置宽,高,位置
width: 60px;height: 60px;
position: absolute;
left: -5px;top: -5px;
设置圆角
border-radius: 30px;
设置伪元素颜色
background-color: #000000;
或者渐变色
background: linear-gradient(to bottom , #d3d3d3 , #000000);
ps:没有background-color: linear-gradient(to bottom , #d3d3d3 , #000000);这种写法
ps:如果不设置按钮颜色,颜色透明(同时下面的阴影就没用了)
设置伪元素阴影
box-shadow:0px 2px 2px #eee inset,2px 1px 2px 0px #333;
理解:此处使用box-shadow给伪元素添加了两个阴影(以达到正常光影的立体感)
设置伪元素过渡
transition: 0.6s;
理解:在0.6s后元素完成转换
设置伪元素在复选框被勾选后的样式
input[type='checkbox']:checked::after{
left: 75px;
}
伪元素css样式完整代码
input[type='checkbox']::after{
content: "";
width: 60px;height: 60px;
position: absolute;
left: -5px;top: -5px;
border-radius: 30px;
/*background-color: #000000; *//*设置按钮颜色*/
/* background: linear-gradient(to bottom , #d3d3d3 , #000000);*/ /*设置按钮阴影渐变效果*/
box-shadow: 0px 2px 2px #eee inset,2px 1px 2px 0px #333;
transition: 0.6s;
}
input[type='checkbox']:checked::after{
left: 75px;
}
附录:源代码(含部分注释)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<style type="text/css">
*{
padding: 0;margin: 0;/*取消所有元素默认外边距与内边距*/
}
input[type='checkbox']{
-webkit-appearance: none;/*取消默认样式*/
margin: 50px;/*设置外边距,便于观察*/
border: 10px solid #c1c1c1;/*外边框属性*/
border-radius: 50px;/*圆角*/
width: 150px;height: 70px;/*长宽*/
background-color: #888;/*框内背景色*/
position: relative;/*位置判定方式:生成相对定位的元素,相对于其正常位置进行定位。*/
transition: 0.6s;/*过渡速度*/
}
input[type='checkbox']:checked{
background: #232323;/*设置被勾选时框内颜色*/
}
input[type='checkbox']::after{
content: "";/*一份声明,告诉浏览器这里有一个伪元素*/
width: 60px;height: 60px;/*长宽*/
position: absolute;/*位置判定方式:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。*/
left: -5px;top: -5px;/*位置偏移*/
border-radius: 30px;/*圆角*/
/* background-color: #000000; */
background: linear-gradient(to bottom , #d3d3d3 , #000000);/*按钮渐变色*/
box-shadow: 0px 2px 2px #eee inset,2px 1px 2px 0px #333;/*两种阴影,实现光影效果*/
transition: 0.6s;/*过渡速度*/
}
input[type='checkbox']:checked::after{
left: 75px;/*设置被勾选时伪元素(按钮)最终位置*/
}
</style>
<body>
<input type="checkbox"/>
</body>
</html>
转载请注明出处:http://adysloud.gitee.io/adysloud.github.io/2022/03/18/%E7%BD%91%E9%A1%B5%E6%8C%89%E9%92%AE%E6%BB%91%E5%8A%A8%E5%8F%98%E8%89%B2%E4%B8%8E%E6%8C%89%E9%92%AE%E5%85%89%E5%BD%B1%E6%95%88%E6%9E%9C%E7%9A%84%E5%AE%9E%E7%8E%B0/
版权声明:本文为m0_61428698原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。