如何仅为导航栏中第二个顶级nav ul li添加Border-Top样式
如何给导航栏第二个列表项添加顶部边框分隔子菜单?
你可以通过精准的CSS选择器实现需求,之前尝试的:nth-child伪类是正确方向,只是选择器层级可能没写对,另外你的现有CSS里有一些语法错误需要先修正。
第一步:修正现有CSS的语法错误
你的nav ul ul里存在几个无效/错误的属性,先调整:
- 删掉不存在的
border-margin属性 - 把
margin: -2px -10Spx 8px auto;里的笔误-10Spx改成-10px - 把无效的
padding: 20px auto 20px auto;改成padding: 10px 0;(padding的auto仅对左右方向有效)
第二步:给第二个顶级列表项添加顶部边框
使用直接子元素选择器配合:nth-child(2),确保只选中最外层的第二个<li>(即包含Chapter2的项),不会误选中子菜单里的列表项:
nav > ul > li:nth-child(2) { border-top: 1px solid #ffffff; padding-top: 8px; /* 增加内边距避免边框和文字过于拥挤 */ }
修正后的完整CSS代码
nav { text-align: center; border: 2px solid #370d6b; border-radius: 2rem; margin: 0.5rem auto 1rem; max-width: 300px; font-size: 1.25rem; line-height: 2rem; border-color: #ffffff; color: #ffffff; } nav ul { list-style: none; margin: 5px auto 5px -20px; } nav ul ul { position: relative; font-size: 1rem; line-height: 1rem; border-top: 1px solid #ffffff; margin: -2px -10px 8px auto; padding: 10px 0; padding-left: 0px; list-style: url(img/dark_dudington.png) inside; } /* 新增的顶部边框样式 */ nav > ul > li:nth-child(2) { border-top: 1px solid #ffffff; padding-top: 8px; } nav li a { display: block; } nav li a, li a:visited { text-decoration: none; color: #ffffff; } nav li a:hover, li a:focus { color: #ffffff; text-decoration: underline; background-color: #46146e; }
顺便修正HTML里的小问题
你的HTML中子菜单链接文本有多余的星号,调整后:
<nav> <ul> <li><a href="#New_Horizons">Chapter 1: New Horizons</a> <ul> <li><a href="#A_Mind_Made-Up">A Mind Made-Up</a></li> <li><a href="#Difficulty_Launching">Difficulty Launching</a></li> </ul> </li> <li><a href="#Chapter2">Chapter 2</a> <ul> <li><a href="#Chapter2">PH_1</a></li> <li><a href="#Chapter2">PH_2</a></li> </ul> </li> </ul> </nav>
这样就能实现需求:第二个顶级列表项顶部出现边框,和上方Chapter1的子菜单清晰分隔开。
内容的提问来源于stack exchange,提问作者Beanie_Byte
相关产品推荐
相关产品推荐

