You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

input[type="submit"]按钮hover样式及过渡效果失效求助

input[type="submit"]样式及过渡效果不生效的问题分析与解决

请问有人能帮我分析为何input[type="submit"]元素的CSS样式无法正确生效?我需要通过CSS实现平滑过渡效果,但该样式未正常应用。

HTML代码片段

<input type="submit" value="Submit" />

原CSS代码

input[type="submit"] {
  background: #fff; 
  color: #4741d7;
  border: 2px solid #4741d7; 
  padding: 16px 20px;
  border-radius: 3px;
  position: relative;
  z-index: 1;
  overflow: hidden;
  display: inline-block;
  font-size: large;
  letter-spacing: 12px;
}
input[type="submit"]:hover {
  color: #fff;
}
input[type="submit"]::after {
  content: "";
  background-color: #4741d7; 
  position: absolute;
  z-index: -1;
  padding: 16px 20px;
  display: block;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  transform: scale(0, 0) rotate(-180deg);
  transition: all 0.3s ease;
}
input[type="submit"]:hover::after {
  transition: all 0.3s ease-out;
  transform: scale(1, 1) rotate(0deg);
}

问题分析

  • input伪元素支持限制:<input>属于替换元素,部分浏览器不支持为其添加::after/::before伪元素——这类元素没有内部内容容器,伪元素无法被正常渲染。
  • 冗余padding干扰布局:伪元素已通过left:0;right:0;top:0;bottom:0;占满容器,额外添加padding:16px 20px会导致伪元素超出容器范围,破坏过渡效果。
  • 过渡规则重复定义:在hover状态下重新声明过渡属性,可能导致动画起始状态混乱,引发效果异常。

修复方案

方案1:改用button元素(推荐)

将<input type="submit">替换为<button type="submit">Submit</button>,button元素对伪元素的支持更完善,仅需修改CSS选择器即可:

<button type="submit">Submit</button>
button[type="submit"] {
  background: #fff; 
  color: #4741d7;
  border: 2px solid #4741d7; 
  padding: 16px 20px;
  border-radius: 3px;
  position: relative;
  z-index: 1;
  overflow: hidden;
  display: inline-block;
  font-size: large;
  letter-spacing: 12px;
}
button[type="submit"]:hover {
  color: #fff;
}
button[type="submit"]::after {
  content: "";
  background-color: #4741d7; 
  position: absolute;
  z-index: -1;
  display: block;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  transform: scale(0, 0) rotate(-180deg);
  transition: all 0.3s ease;
}
button[type="submit"]:hover::after {
  transform: scale(1, 1) rotate(0deg);
}

方案2:保留input元素,调整过渡实现

如果必须使用input,可直接为元素本身添加背景色过渡,放弃伪元素方案:

input[type="submit"] {
  background: #fff; 
  color: #4741d7;
  border: 2px solid #4741d7; 
  padding: 16px 20px;
  border-radius: 3px;
  overflow: hidden;
  display: inline-block;
  font-size: large;
  letter-spacing: 12px;
  transition: background-color 0.3s ease, color 0.3s ease;
}
input[type="submit"]:hover {
  color: #fff;
  background-color: #4741d7;
}

内容的提问来源于stack exchange,提问作者Esteban Fierro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:35:17