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

如何反转按钮Hover边框效果:默认隐藏,鼠标悬停时显示

反转按钮Hover边框效果的实现方案

需要将原按钮的Hover效果反转:默认状态下边框隐藏,鼠标悬停时边框显示(原效果为默认显示边框,悬停时隐藏)。

修改后的代码

CSS 代码

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background: #fcf3ec;
}

.button {
  --offset: 10px;
  --border-size: 2px;
  display: block;
  position: relative;
  padding: 1.5em 3em;
  appearance: none;
  border: 0;
  background: transparent;
  color: #e55743;
  text-transform: uppercase;
  letter-spacing: .25em;
  outline: none;
  cursor: pointer;
  font-weight: bold;
  border-radius: 0;
  /* 默认隐藏内部边框 */
  box-shadow: inset 0 0 0 0 currentcolor;
  transition: background .8s ease, box-shadow .8s ease;
}

.button:hover {
  background: rgba(100, 0, 0, .03);
  /* hover时显示内部边框 */
  box-shadow: inset 0 0 0 var(--border-size) currentcolor;
}

.button__horizontal,
.button__vertical {
  position: absolute;
  top: var(--horizontal-offset, 0);
  right: var(--vertical-offset, 0);
  bottom: var(--horizontal-offset, 0);
  left: var(--vertical-offset, 0);
  transition: transform .8s ease;
  will-change: transform;
}

.button__horizontal::before,
.button__vertical::before {
  content: '';
  position: absolute;
  border: inherit;
}

.button__horizontal {
  --vertical-offset: calc(var(--offset) * -1);
  border-top: var(--border-size) solid currentcolor;
  border-bottom: var(--border-size) solid currentcolor;
  /* 默认隐藏水平边框 */
  transform: scaleX(0);
}

.button__horizontal::before {
  top: calc(var(--vertical-offset) - var(--border-size));
  bottom: calc(var(--vertical-offset) - var(--border-size));
  left: calc(var(--vertical-offset) * -1);
  right: calc(var(--vertical-offset) * -1);
}

.button:hover .button__horizontal {
  /* hover时显示水平边框 */
  transform: scaleX(1);
}

.button__vertical {
  --horizontal-offset: calc(var(--offset) * -1);
  border-left: var(--border-size) solid currentcolor;
  border-right: var(--border-size) solid currentcolor;
  /* 默认隐藏垂直边框 */
  transform: scaleY(0);
}

.button__vertical::before {
  top: calc(var(--horizontal-offset) * -1);
  bottom: calc(var(--horizontal-offset) * -1);
  left: calc(var(--horizontal-offset) - var(--border-size));
  right: calc(var(--horizontal-offset) - var(--border-size));
}

.button:hover .button__vertical {
  /* hover时显示垂直边框 */
  transform: scaleY(1);
}

HTML 代码

<button class="button">
  Fancy Button
  <div class="button__horizontal"></div>
  <div class="button__vertical"></div>
</button>

核心修改说明

  • 内部 inset 边框:默认将box-shadow的宽度设为0隐藏,hover时恢复为var(--border-size)显示
  • 外部水平边框:默认给.button__horizontal设置transform: scaleX(0)隐藏,hover时改为scaleX(1)显示
  • 外部垂直边框:默认给.button__vertical设置transform: scaleY(0)隐藏,hover时改为scaleY(1)显示
  • 过渡动画:给.button的box-shadow添加过渡效果,保证边框显示/隐藏时的平滑动画

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:35:18