如何实现按钮与箭头两个CSS hover悬停效果同时触发
实现方案
你可以通过纯CSS实现两个hover效果同步触发,不需要额外写JS,步骤如下:
第一步:修正非法HTML结构
你当前代码里嵌套了<a>标签,这不符合HTML规范,浏览器会自动拆分解析成同级元素,导致样式和交互异常。如果两个元素跳转目标一致,直接把箭头改成普通<span>放在按钮<a>内部即可:
<a href="#kontakt" class="btnMain gradient scrollto"> Contact me <span id="arrowIntroId" class="arrowIntro"></span> </a>
如果后续两个元素需要跳转不同地址,就给二者套一个共同父容器:
<div class="btn-wrapper"> <a href="#kontakt" class="btnMain gradient scrollto">Contact me</a> <a id="arrowIntroId" href="#其他地址" class="arrowIntro"></a> </div>
第二步:调整CSS hover触发规则
把两个效果的触发条件都绑定到共同父元素的hover事件上即可:
- 如果你用的是第一种单
<a>结构,只需要修改箭头动画的选择器:
/* 原来的按钮hover规则不需要改动 */ .btnMain:hover { background-position: 100% 0; color:#fff; -moz-transition: all .4s ease-in-out; -o-transition: all .4s ease-in-out; -webkit-transition: all .4s ease-in-out; transition: all .4s ease-in-out; } /* 把箭头动画的触发从箭头自身hover改成父按钮hover */ .btnMain:hover .arrowIntro::before { transform: translateX(12px); }
- 如果你用的是第二种父容器包裹两个独立
<a>的结构,就修改两个hover选择器:
/* 父容器悬浮时触发按钮渐变 */ .btn-wrapper:hover .btnMain { background-position: 100% 0; color:#fff; -moz-transition: all .4s ease-in-out; -o-transition: all .4s ease-in-out; -webkit-transition: all .4s ease-in-out; transition: all .4s ease-in-out; } /* 父容器悬浮时触发箭头动画 */ .btn-wrapper:hover .arrowIntro::before { transform: translateX(12px); }
额外优化点
你原有CSS里的moz-transition写法有误,需要补全前缀横杠改成-moz-transition,否则火狐浏览器不会生效。另外箭头的color: black可以根据按钮背景色调整,避免和渐变背景对比太突兀。
内容的提问来源于stack exchange,提问作者Simonsoft177
相关产品推荐
相关产品推荐

