使用CSS实现,带有动态浮动高亮效果的导航菜单

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  <style>
    *{
        margin:0;
        padding:0;
        box-sizing: border-box;
    }

    body {
        background:#f5f7fa;
        padding:40px;
    }

    .nav{
        position: relative;
        display: inline-flex;
        padding: 8px;
        background:#1e293b;
        border-radius: 12px;
        box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
    }

    .nav-item{
        padding: 16px 24px;
        color:#94a3b8;
        font-size:14px;
        font-weight:500;
        white-space:nowrap;
        border-radius: 8px;
        transition: all 0.2s;
        cursor: pointer;
    }

    .nav-item:hover{
        color:#f1f5f9;
        background:#334155;
        anchor-name:--item-target;
    }

    .nav::after{
    content:'';
    position: absolute;
    inset: 0;
    position-anchor: --item-target;
    inset: anchor(inside, 0);
    outline: 2px solid #38BDF8;
    outline-offset:-2px;
    background-color: rgb(from #38BDF8 r g b / 0.15);
    transition: 0.2s;
    pointer-events: none;
    border-radius: 8px;
    opacity: 0;
    }


    .nav:has(.nav-item:hover)::after {
    opacity: 1;
    }

</style>
</head>
<body>
    <nav class="nav">
        <div class="nav-item">JavaScript</div>
        <div class="nav-item">React</div>
        <div class="nav-item">Vue3</div>
        <div class="nav-item">TypeScript</div><div class="nav-item">Node.js</div>
    </nav>
</body>
</html>

1. 创新的锚点定位技术

复制代码
.nav-item:hover {
    anchor-name: --item-target;
}
.nav::after {
    position-anchor: --item-target;
    inset: anchor(inside, 0);
}
  • 使用了CSS Anchor Positioning API

  • 将hover的菜单项设置为锚点(--item-target)

  • 伪元素(高亮框)通过锚点定位到当前hover的菜单项位置

2. 精妙的状态管理

复制代码
.nav:has(.nav-item:hover)::after {
    opacity: 1;
}
  • 使用:has()伪类检测是否有菜单项被hover

  • 只有hover时才显示高亮框,默认隐藏

  • 避免了JavaScript的事件监听

3. 现代化的视觉效果

复制代码
background-color: rgb(from #38BDF8 r g b / 0.15);
outline: 2px solid #38BDF8;
outline-offset: -2px;

4. 流畅的交互体验

复制代码
transition: all 0.2s;
  • 高亮框的移动和显隐都有0.2秒的过渡动画

  • 菜单项文字颜色和背景也有平滑过渡

5. 纯CSS解决方案

整个效果完全使用CSS实现,无需任何JavaScript代码,体现了CSS现代特性的强大能力。

相关推荐
FlyWIHTSKY6 分钟前
在 **Element Plus 中,`el-aside` 关闭后**仍然占位置**,通常是因为 **它没有被销毁或宽度没有变为 0**。
前端·javascript·vue.js
AC赳赳老秦7 分钟前
网安工程师提效:用 OpenClaw 实现漏洞扫描报告生成、安全巡检自动化、日志合规审计
java·开发语言·前端·javascript·python·deepseek·openclaw
网络点点滴11 分钟前
NPM 和 package.json 文件简介
前端·npm·json
青木96011 分钟前
前后端开发调试运行技巧
linux·服务器·前端·后端·npm·uv
幻影七幻14 分钟前
js中send的作用和使用 $.ajax的作用
开发语言·前端·javascript
Rabbit_QL14 分钟前
npm 不是“前端的包管理器“—它是 Node.js 的
前端·npm·node.js
jinanwuhuaguo24 分钟前
OpenClaw执行奇点——因果链折叠与责任悬置的时间哲学(第十九篇)
前端·人工智能·安全·重构·openclaw
为美好的生活献上中指29 分钟前
本地虚拟机部署redis集群
前端·redis·ubuntu·bootstrap·html·redis集群
ConardLi1 小时前
开源我的 GPT-Image2 生图 Skill,附大量玩法指南
前端·人工智能·后端
我是Superman丶1 小时前
Antigravity Retry 自动重试脚本
前端·javascript·vue.js