javascript - 如何在不使用伪状态的情况下在悬停时在现有边框底部上设置边框底部动画
问题描述
我想在将鼠标悬停在现有边框底部上时为边框底部设置动画,如下所示: Gif 显示边框底部过渡
我尝试过使用伪状态来执行此操作::before
,::after
而这只会使边框底部动画化。而且我还尝试在原始元素上包含边框底部,但这不起作用,因为过渡发生在::after
元素上,并且两者不会像 gif 示例中那样重叠:https ://jsfiddle.net/nicyuvi /6xem7zgp/3/
h1 {
color: #666;
display: inline-block;
margin: 0;
text-transform: uppercase;
border-bottom: 3px solid lightgray;
}
h1:after {
display: block;
content: '';
border-bottom: solid 3px #019fb6;
transform: scaleX(0);
transition: transform 250ms ease-in-out;
}
h1:hover:after {
transform: scaleX(1);
}
h1.fromLeft:after {
transform-origin: 0% 50%;
}
<h1 class="fromLeft">Expand from left</h1>
任何使用html/css/vanilla javascript的答案?
解决方案
您需要创建堆叠在一起的元素,然后添加pointer-events: none
到上面的元素,这将使其对指针事件“透明”,因此您仍然可以访问input
它下面的元素。使用~
选择器,我们现在可以在悬停 时编辑上部元素的宽度input
,因为它“物理地”放置在input
.
/* optional */
input[type=text] {
background-color: #ECEFF1;
border: 0;
}
/**/
*,
::after,
::before {
box-sizing: border-box;
}
.wrapper {
display: inline-block;
position: relative;
}
input[type=text],
.onHover {
height: 2rem;
border-bottom-style: solid;
border-bottom-width: 1px;
}
input[type=text] {
border-bottom-color: #B0BEC5;
}
input[type=text]:hover ~ .onHover {
width: 100%;
}
.onHover {
position: absolute;
top: 0;
left: 0;
width: 0;
border-bottom-color: #000;
pointer-events: none;
transition: width 400ms ease-in;
}
<div class="wrapper">
<input type="text">
<div class="onHover"></div>
</div>
推荐阅读
- database - 对于 DML 操作中的错误记录,是否可以将错误记录到集合或临时表中?
- angular - 如何实现 Angular 的约定优于配置?
- c# - 如何从 C# 中的文本文件中读取特定行
- regex - 获取具有可变属性的标签之间的内容
- java - 如何在改造中从 json 对象键中删除空格?
- numpy-ndarray - 如何逐块循环ndarray
- symfony-security - Symfony 安全组件不记得会话
- node.js - Vue 定义 index.html 文件在哪里
- javascript - 如何修复javascript中的复制到剪贴板错误?
- wpf - 获取 WPF 中的数据网格列数