我为按钮创建了一个动画,如果该按钮是div容器,则该动画效果很好。但是,如果我将相同的CSS应用于输入字段,则动画会中断。有人可以解释为什么会这样,以及如何解决它?
这就是我的CSS的样子:
.submit__button {
font-family: BentonSans;
font-weight: 500;
font-size: 0.9rem;
padding: 0.78125rem;
line-height: 60px;
display: flex;
border: 2px solid #303333;
margin: 2rem auto 0;
transition: 0.5s;
-webkit-transition:0.5s;
position: relative;
vertical-align: middle;
color: #303333;
display: inline-block;
text-align: center;
transition: 0.5s;
padding: 0 20px;
cursor: pointer;
-webkit-transition:0.5s;
}
.submit__button:hover {
border: 2px solid rgba(0,0,0,0);
color: #303333;
}
.submit__button::before, .submit__button::after {
width: 100%;
height:100%;
z-index: 3;
content:'';
position: absolute;
top:0;
left:0;
box-sizing: border-box;
-webkit-transform: scale(0);
transition: 0.5s;
}
.submit__button::before {
border-bottom: 2px solid #000;
border-left: 0;
-webkit-transform-origin: 0% 100%;
}
.submit__button::after {
border-top: 0;
border-right: 0;
-webkit-transform-origin: 50% 50%;
}
.submit__button:hover::after, .submit__button:hover::before {
-webkit-transform: scale(1);
}
答案 0 :(得分:1)
您的动画是使用::before
中的伪元素div
实现的。因此,它的工作非常好。
但是,在input
,img
,br
等自封闭的元素中,不支持或不存在伪元素。应用于这些自封闭标记的伪元素赢得了#39 ;在DOM中可见。
根据MDN,
替换元素是其外观和尺寸由外部资源定义的任何元素。示例包括图片(
<img>
标签),插件(<object>
标签)和表单元素(<button>
,<textarea>
,<input>
和<select>
标签)。所有其他元素类型都可以称为非替换元素。
::before
和::after
仅适用于未替换的元素。
另外,正如用户@AndreiGheorghiu所提到的那样:
可以从&#34; Living Standard&#34;关于这个主题,看起来
::before
和::after
用法仅限于可以包含其他类型(HTML)元素节点的元素。这就是为什么<textarea>
虽然是配对标记但却不能有::before
和::after
的原因。它只能包含文本节点。
注意强>
然而,有时可以使伪元素与img
标记一起使用(少数浏览器支持它)。
img {
display: block;
content: "";
height: 50px /* height of image in px */
}
将<{1}}添加到html中的style="background-image: url(image.jpg)"
元素。
答案 1 :(得分:0)
您的动画依赖于:before元素。这对输入无效,因为它们需要在输入字段中显示容器,而不能使用其他元素。
此问题可能重复: Can I use the :after pseudo-element on an input field?