css - CSS 选择器第一个孩子,而不是兄弟姐妹
问题描述
如何只选择元素的第一个实例而不触发任何子元素的选择器?孩子是后代,而不是兄弟姐妹。
例如ul:first-of-type
,将通过任何子菜单选择第一个无序列表 (ul ul
也将选择任何子菜单(ul li ul
和ul ul ul ul ul
)。我只想在.ul
#menu
我可以做以下事情,尽管它毫无意义地令人费解。
#menu ul:not(ul ul):not(ul ul ul):not(ul ul ul ul) {property: value;}
不,我也不能#menu > ul
做为元素之间的数量#menu
和ul
变化。
<nav id="menu">/* display: flex; justify-content: space-between; */
<div>
<ul>/* Primary, select THIS ul (no > in selector!) */
<li>Menu</li>
<li>Menu</li>
<li>Menu
<ul>/* Secondary menu. */
<li>Menu</li>
<li>Menu
<ul>/* Tertiary menu. */
<li>Menu</li>
<li>Menu</li>
<li>Menu</li>
</ul>
</li>
<li>Menu</li>
</ul>
</li>
<li>Menu</li>
</ul>
</div>
<div>
/* Auxiliary menu items on right side of menu bar, may contain ul (do not select these either). */
</div>
</nav>
解决方案
至少在这篇文章的时候,并且已经浏览了一些广泛的选择器列表,至少看起来所有类型选择器都是基于兄弟姐妹,而不是后代。因此,为了使ul
菜单中的第一个元素height: 100%
不影响二级和三级ul
元素,我添加了第二个选择器。
#menu ul, #menu ul > li, #menu ul > li > a {align-items: center; display: flex; height: 100%;}
#menu ul ul {height: initial;}
这在一定程度上允许我将下拉菜单始终水平居中位于主菜单下方,并结合 CSS 变量用于主标题的总高度(菜单是其后代)。
因为我在一个平台上工作,所以我不能随意添加 CSS 类,因此我必须利用可用的选择器。
希望在未来 CSS 选择器将继续扩展,除了兄弟选择器之外还包括后代选择器。
推荐阅读
- javascript - 使用 v-for 列出 JSON 数组的元素
- c - 在多个 c mex s-function 之间共享数据
- api - URL 中的 Postman 和 JSON-Data
- parsing - 带有 let 和加法的表达式的明确语法
- javascript - 将 JSON String/JS 对象映射到具有私有属性的 Typescript 类
- python - 从服务器下载图像
- php - laravel 中的自定义类
- python - ImportError:无法导入名称“QOpenGLWidget”
- jmh - OpenJDK JMH - 在测量中使用 @Params 意味着什么?
- python - Python主循环+子循环超时