使用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现代特性的强大能力。

相关推荐
代码搬运媛1 小时前
Jest 测试框架详解与实现指南
前端
counterxing2 小时前
我把 Codex 里的 Skills 做成了一个 MCP,还支持分享
前端·agent·ai编程
wangqiaowq2 小时前
windows下nginx的安装
linux·服务器·前端
之歆2 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
发现一只大呆瓜3 小时前
Vite凭什么这么快?3分钟带你彻底搞懂 Vite 热更新的幕后黑手
前端·面试·vite
Maimai108083 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
kyriewen4 小时前
产品经理把PRD写成“天书”,我用AI半小时重写了一遍,他当场愣住
前端·ai编程·cursor
humcomm5 小时前
元框架的工作原理详解
前端·前端框架
canonical_entropy5 小时前
Attractor Before Harness: AI 大规模开发的方法论
前端·aigc·ai编程
zhangxingchao6 小时前
多 Agent 架构到底怎么选?从 Claude Agent Teams、Cognition/Devin 到工程落地原则
前端·人工智能·后端