tranform-origin + transform
自己可以先简单的实现 hover 默认的两种状态实现下滑线滑动
使用元素的 before 和 after , 定位到当前操作的为父级元素上, 效果前后利用 hover 和 transition 实现过度动画, 方便往下进阶。
达到的效果
采用 transition(过度效果)、transform: scaleX (缩放)、transform-origin(改变原点位置),实现下滑线从左边近,右边出
首先理解 hover 选择器的作用, 使用它时元素被分解成三个步骤
hover 前(默认样式)
hover 中(:hover 设置样式)
hover 后(默认样式)
由此可以看出 hover 正常状态下只有两种状态
所以,必须要有一种方法,能够使得 hover 动画的进入与离开产生两种不一样的效果, 实现:
hover 前设置原点位置 transform-orgin: right 0)、缩放大小 transform: scaleX(0), 隐藏 before 选择器
hover 中(设置原点位置 transform-orgin: 0 0)、缩放大小 transform: scaleX(1), 显示 before 选择器
hover 前(恢复 transform: scaleX(0)、transform-orgin: right 0), 向右隐藏 before 选择器
代码如下
<div class="box">Hover default</div>
.box {
position: relative;
left: 25%;
width: 200px;
height: 60px;
line-height: 60px;
color: #333;
text-align: center;
transition: color .5s;
border-top: 2px solid #e2e2e2;
border-bottom: 2px solid #e2e2e2;
}
.box::before {
content: '';
position: absolute;
left: 0px;
bottom: 0px;
width: 200px;
height: 2px;
background-color: #000;
transition: transform .5s;
transform: scaleX(0);
transform-origin: right 0;
}
.box::after {
content: '';
position: absolute;
right: 0px;
top: -2px;
width: 200px;
height: 2px;
background-color: #000;
transition: transform .5s;
transform: scaleX(0);
transform-origin: left 0;
}
.box:hover {
color: red;
}
.box:hover::before {
transform: scaleX(1);
transform-origin: 0 0;
}
.box:hover::after {
transform: scaleX(1);
transform-origin: right 0;
}
参考文档
transform-origin 取值:
x-axis 默认以元素框上边框为 x正半轴, 上边框与左边框的焦点为顶点; 水平偏移量有以下几种取值方式
left 等于 0 或 0%
center 等于 50%
right 等于 100%
y-axis 以元素框左边框为 y正半轴, 左边框与上边框的焦点为顶点; 水平偏移量有以下几种取值方式
top 等于 0 或 0%
center 等于 50%
right 等于 100%
z-axis 3D变形中会用到 详解见文档
transform-origin 实例解析: https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform-origin
transform-origin 坐标系图析: https://www.jianshu.com/p/fd44d21287ea
Last updated