css - 为任意深度的嵌套列表设置样式

标签 css css-selectors

我想知道是否可以在不使用任何脚本的情况下仅使用 CSS 设置嵌套无序列表的样式。问题在于 CSS 需要适用于列表树的任何深度。

例如,我有一个列表:

<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li class="holder">
        <ul>
            <li>Item 4</li>
            <li>Item 5</li>
             <li class="holder"> 
                <ul>
                    <li>Item 6</li>
                    <li>Item 7</li>
                    <li>Item 8</li>   
                    <li class="holder"> 
                        <ul>
                            <li>Item 9</li>
                            <li>Item 10</li>
                            <li>Item 11</li>        
                        </ul>
                    </li> 
                </ul>
            </li>        
        </ul>
    </li>
</ul>

这是我的 CSS:

li{
    background: gray;
    border: 1px solid;
    display: block;
    margin: 2px;
}
.holder{
    background: none;
    border: none;
}

/*replace these styles*/
li > ul > li{
    background: white;
}

li > ul > li > ul > li{
    background: gray;
}

li > ul > li > ul > li > ul > li{
    background: white;
}

如果节点的父节点有背景A,节点应该有背景B。如果节点的父节点有背景B,节点应该有背景A。

请检查:http://jsfiddle.net/bCU34/6/

最佳答案

CSS 选择器允许您通过使用空格将命名元素与父元素分隔开来选择父节点的所有 命名元素。例如,要选择所有无序列表元素,您可以像下面那样做。注意 任何深度 的所有 ul 元素都继承无元素符号/边距/填充的样式。为了为元素类型设置 nth 层的样式,您需要使用父选择器 >。见下文。我使用了字体颜色,但你可以用同样的方式设置背景图片。请注意,据我所知,此时没有后代级别选择器。这在另一篇文章中得到了解决 CSS select nested elements up to N levels deep .

.container ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
}

.container > ul > li {
  color: green;
}
.container > ul > li > ul > li {
  color: red;
}
.container > ul > li > ul > li > ul > li {
  color: blue;
}
<section class="container">
  <h1>CSS Nested List Styling</h1>
  <ul>
      <li>
          <h3>Section 1</h3>
          <ul>
              <li>
                  <h4>Foo</h4>
                  <ul>
                      <li>
                          <h5>Bar</h5>
                      </li>
                      <li>
                          <h5>Bar</h5>
                      </li>
                  </ul>
              </li>
              <li>
                  <h4>Foo Bar</h4>
                  <ul>
                      <li>
                          <h5>Bar</h5>
                      </li>
                      <li>
                          <h5>Bar</h5>
                      </li>
                  </ul>
              </li>
          </ul>
      </li>
      <li>
          <h3>Section 2</h3>
          <ul>
              <li>
                  <h4>Hello</h4>
                  <ul>
                      <li>
                          <h5>World</h5>
                      </li>
                  </ul>
              </li>
          </ul>
      </li>
  </ul>
  
</section>

关于css - 为任意深度的嵌套列表设置样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270407/

相关文章:

css - 用于 CSS 继承的 Sass Mixin

javascript - 在调整大小时重新计算高度

javascript - Chrome、边距和 jQuery 动画

html - 慢速下拉菜单 CSS

jquery 和选择器

css - 有没有办法为同一父级分组第 n 个子级 CSS 规则

css - Joomla 按钮不显示

CSS选择不跟随元素的元素

javascript - 如何使用 Selenium 和 Java 提取不在自己标签内的文本节点的文本?

python-3.x - ElementNotVisibleException : Message: element not interactable error while trying to click a button through Selenium and Python