You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子组合器在无序列表中设置父级<li>大写样式失效问题

解决父级<li>仅大写、子<li>不受影响的问题

我猜你遇到的情况是:你用 ul > li { text-transform: uppercase; } 想让最外层的父级列表项变成大写,但实际运行后,嵌套在里面的子列表项也跟着变成大写了——这是因为text-transform是继承属性,父元素的样式会自动传递给它的子元素,这就是你的样式没达到预期的核心原因。

为什么你的选择器没完全生效?

你的选择器 ul > li 确实只选中了最外层<ul>的直接子<li>,但这些父<li>里的所有子元素(包括内层的<ul>和<li>)都会继承text-transform: uppercase这个样式,所以原本想要小写的子列表项也被强制改成大写了。

两种修复方案

方案1:重置子列表项的样式

直接给内层的子<li>设置text-transform: none,覆盖继承来的样式:

/* 给最外层父li设置大写 */
ul > li {
  text-transform: uppercase;
}

/* 重置内层子li的文本转换,恢复默认 */
ul > li ul > li {
  text-transform: none;
}

方案2:给父li的文本单独包裹元素(更精准)

把父<li>里的文本用<span>包裹,只给这个<span>设置大写样式,这样就不会影响内部的子列表:

修改后的HTML:
<ul>
  <li><span>UPPERCASE</span></li>
  <li><span>UPPERCASE</span>
    <ul>
      <li>Lowercase</li>
      <li>Lowercase</li>
      <li>Lowercase</li>
      <li>Lowercase</li>
    </ul>
  </li>
  <li><span>UPPERCASE</span></li>
  <li><span>UPPERCASE</span></li>
</ul>
对应的CSS:
ul > li > span {
  text-transform: uppercase;
}

这个方案更稳妥,尤其是当你的列表结构后期可能变得更复杂时,能避免不必要的样式继承问题。

效果验证

用上面任意一种方案,最终的显示效果都会是:

  • 最外层的4个父列表项文本保持大写
  • 嵌套的4个子列表项文本保持小写,完全不受父元素样式的影响

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:08:32