讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用 CSS :has() 实现导航栏子菜单悬停显示

千墨吖_8681

千墨吖_8681

发布时间:2026-05-02 08:57:15

|

879人浏览过

|

来源于php中文网

原创

本文介绍如何利用现代 CSS 的 :has() 伪类解决“父级 <li> 悬停时无法控制同级(非嵌套)子菜单显示”的常见布局难题,并提供完整可运行代码与兼容性注意事项。

本文介绍如何利用现代 css 的 `:has()` 伪类解决“父级 `

  • ` 悬停时无法控制同级(非嵌套)子菜单显示”的常见布局难题,并提供完整可运行代码与兼容性注意事项。

    在构建响应式导航菜单时,一个典型需求是:当用户将鼠标悬停在“Categories”主菜单项上时,下方独立的 .categories-ul 子菜单应平滑展开。但问题在于——该子菜单并非嵌套在 <li class="categories"> 内部,而是与主菜单 <ul> 并列存在于 <nav> 中。因此,传统后代选择器(如 .categories:hover .categories-ul)完全失效,因为二者没有 DOM 包含关系。

    此时,CSS 新增的 :has() 关系伪类成为理想解法。它允许我们基于某个元素是否匹配特定条件(例如其内部是否存在被悬停的 .categories),来为该元素的祖先或同级元素设置样式。

    关键实现步骤如下:

    1. 初始隐藏子菜单:将 .categories-ul 的 display 设为 none;
    2. 利用 :has() 定位触发容器:选择 <nav class="pc-nav"> 作为作用域,检查其内部是否存在 :hover 状态的 .categories 元素;
    3. 条件激活子菜单:当条件满足时,将 .categories-ul 切换为 display: flex,并可叠加其他悬停样式(如背景色、过渡动画等)。

    以下是精简优化后的核心代码:

    CSS婚礼策划服务机构宣传网站模板
    CSS婚礼策划服务机构宣传网站模板

    CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

    下载

    立即学习“前端免费学习笔记(深入)”;

    .pc-nav-ul {
      width: 50%;
      display: flex;
      justify-content: space-between;
      border-bottom-left-radius: 2rem;
      border-bottom-right-radius: 2rem;
      backdrop-filter: hue-rotate(100deg) blur(5px);
    }
    
    .pc-nav-li {
      font-size: 1.5rem;
      font-family: var(--text-font);
      padding: 1rem;
      transition: background-color 0.6s, letter-spacing 0.6s;
    }
    
    .categories-ul {
      backdrop-filter: hue-rotate(140deg) blur(20px);
      padding: 0.7rem;
      border-radius: 1rem;
      width: 45rem;
      display: none; /* 初始隐藏 */
      justify-content: space-evenly;
      position: fixed;
      top: 5rem;
      z-index: 99999;
      transition: all 0.6s ease;
    }
    
    .categories-li {
      font-family: var(--text-font);
      font-size: 1.2rem;
    }
    
    .pc-nav-li:hover:not(.categories-li) {
      letter-spacing: 2px;
    }
    
    /* ✅ 核心逻辑:当 .pc-nav 内存在悬停的 .categories 时,显示同级 .categories-ul */
    .pc-nav:has(.categories:hover) .categories-ul {
      display: flex;
      background-color: rgba(255, 0, 0, 0.1); /* 推荐使用半透明色提升可读性 */
    }
    <nav class="pc-nav">
      <ul class="pc-nav-ul">
        <li class="pc-nav-li"><a href="#">home</a></li>
        <li class="pc-nav-li categories"><a href="#">categories</a></li>
        <li class="pc-nav-li"><a href="#">setting</a></li>
        <li class="pc-nav-li"><a href="#">login/sign up</a></li>
      </ul>
      <!-- 子菜单与 pc-nav-ul 同级,位于 nav 内 -->
      <ul class="categories-ul">
        <li class="categories-li"><a href="#">entertainment</a></li>
        <li class="categories-li"><a href="#">literature</a></li>
        <li class="categories-li"><a href="#">science</a></li>
        <li class="categories-li"><a href="#">programming</a></li>
      </ul>
    </nav>

    ⚠️ 重要注意事项:

    • :has() 目前在 Chrome 105+、Edge 105+、Safari 15.4+ 中已稳定支持;Firefox 已实现但默认关闭(需手动启用 layout.css.has-selector.enabled),生产环境务必添加渐进增强策略(例如配合 JavaScript fallback 或降级为点击展开);
    • 避免在 :has() 中使用过于复杂的选择器,以免影响性能;
    • 若需支持旧浏览器,推荐将子菜单结构改为语义化嵌套(即 <li class="categories"> 内直接包含 <ul class="categories-ul">),再用 .categories:hover .categories-ul 控制显示。

    通过 :has(),我们摆脱了对 JavaScript 的强依赖,在纯 CSS 层面实现了跨层级交互逻辑——这是现代前端开发中声明式思维的有力体现。

  • 热门AI工具

    更多
    超级简历WonderCV

    一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    讯飞智作

    讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

    蛙蛙写作

    一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

    UP简历
    UP简历 Hot

    一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

    Lovart
    Lovart Hot

    一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

    相关专题

    更多
    css
    css

    css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    4756

    2023.06.15

    css居中
    css居中

    css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

    1037

    2023.07.27

    css如何插入图片
    css如何插入图片

    cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    1898

    2023.07.28

    css超出显示...
    css超出显示...

    在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

    3666

    2023.08.01

    css字体颜色
    css字体颜色

    CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

    7445

    2023.08.10

    什么是css
    什么是css

    CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

    6311

    2023.08.10

    css三角形怎么写
    css三角形怎么写

    CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

    2117

    2023.08.21

    css设置文字颜色
    css设置文字颜色

    CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

    3011

    2023.08.22

    OpenJDK JVM参数怎么调优
    OpenJDK JVM参数怎么调优

    Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

    20

    2026.10.16

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Sass 教程
    Sass 教程

    共14课时 | 1.5万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 5.9万人学习

    CSS教程
    CSS教程

    共754课时 | 97.5万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn