如何反转按钮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
相关产品推荐
相关产品推荐

