【发布时间】:2019-11-27 01:01:46
【问题描述】:
我想在列表的顶级li 元素中实现放大字体大小和添加颜色边框和背景的简单效果,而不影响较低的嵌套级别(子列表)。这四个问题和答案是相关的,但下面不要回答我的问题。
Target first level <li>s and not the nested <li>s
Style first level of menu only
Style only first level of unordered list
styling a nested list in CSS
这是最简单的例子:
ol.toplevel > li {
font-size: 160%;
margin-bottom: 0.5em;
margin-top: 1.5em;
padding-bottom: 0.2em;
padding-top: 0.1em;
}
ol.toplevel div.topleveltitle {
background-color: yellow;
border-bottom: 1px solid red;
border-top: 1px solid red;
color: red;
}
ol.toplevel li li {
/*For lower nested levels, we don't want to inherit any top-level settings*/
all: revert; /*does not seem to work at all, "unset" neither*/
font-size: 70%; /*undo 160%, but we don't want to propagate 70% to lower levels!*/
}
<ol class="toplevel">
<li><div class="topleveltitle">First title</div></li>
<li><div class="topleveltitle">Second title</div>
<ol>
<li>Subitem</li>
<li>Subitem</li>
<li>Subitem</li>
<li>Subitem</li>
</ol>
</li>
<li>Third title
<ul>
<li>Subitem
<ol>
<li>Subsub</li>
<li>Subsub</li>
</ol>
</li>
</ul>
</li>
</ol>
经过这么多年的 css 开发,我希望这个简单的目标能够以一种简单、简洁和优雅的方式实现——没有技巧、黑客和冗余。所以这里是关于这个例子的具体问题:
- 是否可以避免与
topleveltitle一起引入helper<div>或<span>,并使用css只为顶级<ol>定义样式以影响每个顶级<li>文本而不影响嵌套子列表的内容?如果</li>结束标签紧跟在标题之后,它会起作用,但它会是无效的 html,因为根据 html 规范,结束标签必须放在嵌套子列表 after 中,如示例。 - 是否可以以一种可能简单的方式将颜色背景和边框扩展到列表项编号?
- 是否有可能避免阻止样式从顶层继承到底层嵌套的所有这些复杂性? “revert”不能正常工作,我不想显式枚举和设置所有在顶层修改的属性,特别是考虑到它们的值可能是未知的,因为它们本身可能被继承或依赖于用户/浏览器设置。我宁愿只影响顶层,而不是影响所有级别,然后枚举异常或重新定义较低级别的值。
【问题讨论】:
-
请注意,
revert目前仅适用于 Fiferox -
@TemaniAfif 我只在 Firefox 上测试过。
-
您是否考虑过让他们成为另一个包含孩子的
li的兄弟姐妹?或者,很难说,因为我不知道内容,但根据语义<dd>可能很合适 -
@soulshined
<dd>和<dl>不适合这个用例......当前使用嵌套列表的方法非常适合(而且我有一个巨大的复杂列表,这只是一个最小的例子),我只是对描述的非常简单的样式有问题。关于“使他们成为另一个包含孩子的li的兄弟姐妹”,我不明白应该将什么设为兄弟姐妹,但这对我来说听起来像是创建人工/冗余结构/项目以帮助处理 css。跨度> -
“不正确破坏正确的结构”...语义正确是正确的结构;我不认为我们在同一页上。我推荐的解决方案通常用于类似于“纯”CSS 下拉菜单的内容。如果您认为它不符合您的需求,那也没关系,每个人都有自己的需求。我只是在详细说明,以便未来的读者理解,有一些替代方案可以以一种语义友好的方式解决这个问题,而不需要付出任何努力,而不是 javascript。干杯