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

相关推荐
weixin_431600441 分钟前
前端数据埋点(7):Web Vitals——页面慢不慢,不是再包一层 fetch
前端·性能优化·sentry·数据埋点
এ慕ོ冬℘゜1 小时前
前端实战:jQuery实现动态表格渲染与状态切换功能
前端·javascript·jquery
jay神2 小时前
【计算机毕业设计】基于Flask+Vue的电影数据可视化与智能推荐系统
前端·vue.js·python·信息可视化·flask·毕业设计·课程设计
FreeTinker8 小时前
HTML本地存储技术解析:localStorage与sessionStorage的原理、差异与应用场景
前端·html
qq_452396238 小时前
第十二篇:《全链路监控与可观测性:前端错误追踪与性能分析》
前端
wangruofeng9 小时前
Phosphor Icons 官网源码拆解:URL 即存储、水波动画与 7362 Star 图标库的架构实践
前端·架构·github
BigTopOne9 小时前
WebRTC Native / Android 开发学习资源整理
前端
excel10 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..11 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
软件聚导航11 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag