点击后如何保留元素状态?菜单标签线条动画点击后复位问题
解决点击标签后线条保持位置的问题
问题出在:active仅在鼠标按下瞬间生效,:focus默认仅通过键盘触发且点击其他区域会失焦,无法实现点击后持久化状态。我们可以通过JavaScript添加/移除类来实现需求:
修改步骤
1. 更新CSS样式
在原有hover相关的选择器中添加.active类,让激活状态和悬停状态保持一致:
body { background-color: #000; } figure.title-line { position: relative; margin: 10px; min-width: 230px; max-width: 315px; width: 100%; color: #ffffff; text-align: center; font-size: 16px; cursor: pointer; /* 添加鼠标指针样式,提示可点击 */ } figure.title-line *:before, figure.title-line *:after { -webkit-box-sizing: border-box; box-sizing: border-box; -webkit-transition: all 0.55s ease; transition: all 0.55s ease; } figure.title-line .title { position: absolute; top: -8px; } figure.title-line .title:before, figure.title-line .title:after { height: 2px; position: absolute; content: ''; background-color: #ffffff; } .title:before, .title:after { opacity: 0; } /* 新增active类的opacity控制 */ .title:hover::before, .title:hover::after, .title.active::before, .title.active::after { opacity: 1; } figure.title-line .title:before { top: 0; right: 0px; width: 186px; -webkit-transform: translateX(-50%); transform: translateX(-50%); -moz-transform: translateX(-50%); -ms-transform: translateX(-50%); -o-transform: translateX(-50%); } figure.title-line .title:after { bottom: 0; left: 0px; width: 260px; -webkit-transform: translateX(50%); transform: translateX(50%); -moz-transform: translateX(50%); -ms-transform: translateX(50%); -o-transform: translateX(50%); } figure.title-line a { margin: 0; } /* 新增active类的transform控制 */ figure.title-line:hover .title:before, figure.title-line.hover .title:before, figure.title-line.active .title:before, figure.title-line:hover .title:after, figure.title-line.hover .title:after, figure.title-line.active .title:after, figure.title-line:hover .title div:before, figure.title-line.hover .title div:before, figure.title-line.active .title div:before, figure.title-line:hover .title div:after, figure.title-line.hover .title div:after, figure.title-line.active .title div:after { -webkit-transform: translate(0, 0); transform: translate(0, 0); } /* 新增active类的过渡延迟 */ figure.title-line:hover .title:before, figure.title-line.hover .title:before, figure.title-line.active .title:before, figure.title-line:hover .title:after, figure.title-line.hover .title:after, figure.title-line.active .title:after { -webkit-transition-delay: 0.15s; transition-delay: 0.15s; }
2. 调整HTML结构
给<a>标签添加href="#"(确保可点击提示):
<figure class="title-line"> <div class="title"> <div> <a class="header" href="#">EXAMPLE</a> </div> </div> </figure> <figure class="title-line"> <div class="title"> <div> <a class="bottom" href="#">EXAMPLE2</a> </div> </div> </figure>
3. 添加JavaScript控制类切换
点击标签时,移除所有标签的active类,给当前点击的标签所在容器添加active类:
// 获取所有标题容器 const titleLines = document.querySelectorAll('.title-line'); titleLines.forEach(line => { line.addEventListener('click', () => { // 移除所有容器的active类 titleLines.forEach(item => { item.classList.remove('active'); item.querySelector('.title').classList.remove('active'); }); // 给当前容器及内部title添加active类 line.classList.add('active'); line.querySelector('.title').classList.add('active'); }); });
原理说明
通过JavaScript在点击时给目标元素添加active类,让CSS样式保持悬停时的状态,同时切换标签时移除其他标签的激活类,确保只有当前选中的标签保持线条状态。
内容的提问来源于stack exchange,提问作者TheCodingTentacle
相关产品推荐
相关产品推荐

