悬停时移动边框(CSS)

3

我喜欢这个网站上的按钮 - https://veronicaromney.com/

我尝试复制该网站上的CSS,但效果并不正确。

我使用Elementor,并将代码添加到主题(用于按钮),然后将ID添加到按钮中,但我得到的是整个按钮块都受到了CSS的影响,在悬停时没有任何效果。

您能帮助我创建这些按钮吗?

以下是我目前拥有的代码,但它对我来说基本上无效。

.mmb-btn { -webkit-text-size-adjust: 100%;
    box-sizing: border-box;
    text-decoration: none;
    text-rendering: optimizeLegibility;
    position: relative;
    color: #fff;
    border: 0 none;
    box-shadow: 0 4px 13px rgba(0, 0, 0, 0.1);
    background-color: #e4b067;
    display: inline-block;
    transition: none 0s ease 0s;
    text-align: inherit;
    line-height: 24px;
    border-width: 0px;
    margin: 0 auto;
    padding: 12px 33px 11px;
    letter-spacing: 4px;
    font-weight: 400;
    font-size: 14px;
  }
.mmb-btn:before {
    border: 1px solid #000;
    top: 7px;
    left: 7px;
}
.mmb-btn::after {
    bottom: 0;
    right: 0;
}
.mmb-btn:before, .mmb-btn:after {
    box-sizing: inherit;
    content: '';
    position: absolute;
    width: 100%;
    height: 100%;
    transition-property: all;
    transition-duration: 0.25s;
    transition-timing-function: ease;
    transition-delay: 0s;
}

2
你能同时包含你的HTML吗? - Kameron
3个回答

2

.mmb-btn { -webkit-text-size-adjust: 100%;
    box-sizing: border-box;
    text-decoration: none;
    text-rendering: optimizeLegibility;
    position: relative;
    color: #fff;
    border: 0 none;
    box-shadow: 0 4px 13px rgba(0, 0, 0, 0.1);
    background-color: #e4b067;
    display: inline-block;
    transition: none 0s ease 0s;
    text-align: inherit;
    line-height: 24px;
    border-width: 0px;
    margin: 0 auto;
    padding: 12px 33px 11px;
    letter-spacing: 4px;
    font-weight: 400;
    font-size: 14px;
  }
.mmb-btn:before {
    border: 1px solid #000;
    top: 7px;
    left: 7px;
}
.mmb-btn::after {
    bottom: 0;
    right: 0;
}
.mmb-btn:before, .mmb-btn:after {
    box-sizing: inherit;
    content: '';
    position: absolute;
    width: 100%;
    height: 100%;
    transition-property: all;
    transition-duration: 0.25s;
    transition-timing-function: ease;
    transition-delay: 0s;
}
.mmb-btn:hover:before, .mmb-btn:hover:after {
    top: 0;
    left: 0;
    transition: all 0.25s ease;
}
<a id="start-here-btn" class="mmb-btn alignright" href="/contact/"> GET STARTED </a>

您缺少了.mmb-btn:hover:before, .mmb-btn:hover:after

2

这里是一个快速的技巧。我建议使用transform而不是改变位置,因为它更加流畅和语义化清晰。

同时,记得将pointer-events: none应用于伪元素,这样当有人悬停在按钮外的边框上时,您就不会看到其他提供的答案中出现的抽搐行为。

.fancy-btn {
  padding: .5rem 1.5rem;
  background-color: #eee;
  position: relative;
  transition: background-color .5s ease;
}

.fancy-btn:after {
  content: '';
  display: block;
  pointer-events: none;
  border: red 1px solid;
  position: absolute;
  width: 100%;
  height: 100%;
  top: 0;
  left: 0;
  transform: translate(1rem,1rem);
  transition: transform .25s ease;
}

.fancy-btn:hover {
  background-color: yellow;
}

.fancy-btn:hover:after {
  top: 0;
  left: 0;
  border-color: green;
  transform: translate(0,0);
}





body {
  height: 90vh;
  display: flex;
  align-items: center;
  justify-content: center;
}
<a class="fancy-btn">HEY I AM A BUTTON, YAY</a>


1

您只需要添加:hover伪类即可。

.mmb-btn:hover::before, .mmb-btn:hover::after {
    top: 0;
    left: 0;
    transition: all 0.25s ease;
}

.mmb-btn { -webkit-text-size-adjust: 100%;
    box-sizing: border-box;
    text-decoration: none;
    text-rendering: optimizeLegibility;
    position: relative;
    color: #fff;
    border: 0 none;
    box-shadow: 0 4px 13px rgba(0, 0, 0, 0.1);
    background-color: #e4b067;
    display: inline-block;
    transition: none 0s ease 0s;
    text-align: inherit;
    line-height: 24px;
    border-width: 0px;
    margin: 0 auto;
    padding: 12px 33px 11px;
    letter-spacing: 4px;
    font-weight: 400;
    font-size: 14px;
  }
.mmb-btn:before {
    border: 1px solid #000;
    top: 7px;
    left: 7px;
}
.mmb-btn::after {
    bottom: 0;
    right: 0;
}
.mmb-btn:before, .mmb-btn:after {
    box-sizing: inherit;
    content: '';
    position: absolute;
    width: 100%;
    height: 100%;
    transition-property: all;
    transition-duration: 0.25s;
    transition-timing-function: ease;
    transition-delay: 0s;
}


.mmb-btn:hover::before, .mmb-btn:hover::after {
    top: 0;
    left: 0;
    transition: all 0.25s ease;
}
<a href="https://stackoverflow.com" id="start-here-btn" class="mmb-btn aalignright" href="/contact/"> GET STARTED </a>


这些代码在 CSS 中运作良好。不过,鼠标悬停会使链接失效,因此当您悬停时,按钮将无法正常工作。 此外它只能着色按钮框,但不能更改默认按钮。 现在就是这个样子:https://paste.pics/d459949e93a3b81beb61adb21548e8e8 - wolf81
1
@wolf81 感谢您的反馈。但是我无法重现您的问题。如果您将鼠标悬停在链接上,链接不会“失效”!您能否在问题中添加完整的必要代码? - Maik Lowrey
您分享的代码是我放置在Elementor“附加CSS”框中仅针对按钮元素的整个代码。按钮仍然看起来像默认(红色),新样式应用于整个按钮部分,而不仅仅是按钮本身。当我将鼠标悬停在黑色边框上时,它确实移动到了橙色矩形上,但该区域内没有链接,尽管在按钮设置中已设置。 - wolf81
我明白了。我需要使用文本/链接才能使其工作,而不是按钮元素! - wolf81
@wolf81 好的!谢谢您的反馈! - Maik Lowrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接