【问题标题】:CSS nth-child for greater than and less thanCSS nth-child 表示大于和小于
【发布时间】:2014-03-28 22:49:43
【问题描述】:

在我的 HTML 中,

<div class="container">
</div>
<div class="container">
</div>
<div class="container">
</div>
<div class="container">
</div>
..................
..................

在上面的 HTML 中,我有 container 类。在我的 CSS 中,我需要为 .container:nth-child(3,4,5,6,..and so on) 添加一些样式。意味着我需要应用除 1 和 2 之外的所有 nth-child

【问题讨论】:

  • 我认为使用 jQuery 更容易做到这一点...您可以使用 :nth-child() 作为 jquery 的选择器。您也可以使用 $(".container:nth-child("+Index+")") 其中 index 是您更改的动态数字为了选择正确的容器。
  • 我认为使用 jQuery 这也应该可以。您可以根据需要更改计数变量的值。 jsfiddle.net/qEH5Q/1
  • 我不同意:没有理由使用 jQuery(或 Javascript,就此而言)来应用在支持良好的 CSS 中可能实现的样式。这是样式,而不是行为,因此 CSS 几乎应该始终是此类事情的首选解决方案。

标签: html css css-selectors


【解决方案1】:

:nth-child() 不适用于类,它会查找元素本身。您需要用包装器包装 .container div 并使用以下内容:

.wrapper div:nth-child(n+3) {
   /* put your styles here... */
}
<div class="wrapper">
    <div class="container"></div>
    <div class="container"></div>
    <div class="container"></div>
    <div class="container"></div>
</div>

Working Demo.

澄清:nth-child()

使用.container:nth-child(n+3) 可能有效,也可能无效。因为,:nth-child() 伪类代表nth 匹配选择器的子元素(本例中为.container)。

如果.container 元素不是其父元素nth-child,则不会被选中。

来自Spec

:nth-child(an+b) 伪类表示法表示一个元素 在文档树中前面有 an+b-1 siblings,对于任何 n 的正整数或零值,并且有一个父元素。

考虑这个例子:

<div class="parent">
    <div>1st</div>
    <div>2nd</div>
    <div>3rd</div>
    <div class="container">4th</div>
    <div class="container">5th</div>
    <div class="container">6th</div>
    <div>7th</div>
    <div class="container">8th</div>
    <div>9th</div>
</div>

在这种情况下,.container:nth-child(2) 不会选择第二个 div.container 元素(它具有 5th 内容)。因为该元素不是其父级的第二个子级,在父级的子级树中。

另外,.container:nth-child(n+3) 将选择所有div.container 元素,因为n0 开始,是父子树中的第一个元素,而第一个div.container第四个子元素 的父级。

n starts from 0

n = 0: (0 + 3) = 3 => 3rd element
n = 1: (1 + 3) = 4 => 4th element
n = 2: (2 + 3) = 5 => 5th element
...

因此div.container:nth-child(n+3) 代表所有与div.container 选择器匹配的3rd4th5th、...子元素。

Online Demo.

【讨论】:

  • 这看起来是正确的答案。谢谢,我也不知道 nth-child() 不能使用类。
  • @FilipHuysmans 这是因为在您的情况下,所有类都是其父子树中唯一的子类。
  • 我无法更改 html,因为我的应用是动态的。顺便说一句, .container:nth-child(even) 正在工作,但您的解决方案没有?为什么?
  • 另外请注意我有,&lt;table class='main-container'&gt;&lt;tr&gt;&lt;td&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
  • @LinkinTED 我准备了一个JSFiddle Demo 来演示nth-child 的逻辑。看看 CSS 面板中的 cmets。
【解决方案2】:

如果只是 1 和 2,您不希望将样式应用于您可以执行以下操作:

.container {
    background: yellow;
}

.container:first-child,
.container:first-child + .container {
    background: transparent;
}

黄色背景将应用于除第一个子容器和其后的容器之外的每个容器。

【讨论】:

    【解决方案3】:

    试试下面的代码。它将样式应用于除 1 和 2 之外的所有 .container 类:

    .container+.container~.container{
       /*styles*/
    }
    

    Demo Fiddle

    【讨论】:

    • 不工作?我有&lt;table class='main-container'&gt;&lt;tr&gt;&lt;td&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;div class="container"&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    • @user960567 为我工作。在小提琴中提供正确的输出:jsfiddle.net/7CEVv/2
    【解决方案4】:

    css:

    .wrapper div:nth-child(n+3) {    /* you style*/   }
    

    原因及说明

     (0+3) = 3 = 3rd Element
     (1+3) = 4 = 4th Element
     (2+3) = 5 = 5th Element  and so on ... where n=0,1,2,3.....
    

    Live example >>

    【讨论】:

      【解决方案5】:

      对于那些在动态解决方案之后的人(如果您不想硬编码列宽等),我已经发布了一个 javascript solution,基于 this excellent answer

      Working example

      用法:

      // After including tableColumnFreeze.js
      var freezer = document.getElementById('freezer');
      new TableColumnFreeze(freezer);
      

      标记:

      <div id="freezer">
        <table>
          <thead>
            <tr><th>Column 1</th><th>Column 2</th><th>Column 3</th></tr>
          </thead>
          <tbody>
            <tr><th>Frozen</th><td>Not frozen</td><td>Not frozen</td></tr>
            <tr><th>Frozen</th><td>Not frozen</td><td>Not frozen</td></tr>
            <tr><th>Frozen</th><td>Not frozen</td><td>Not frozen</td></tr>
            <tr><th>Frozen</th><td>Not frozen</td><td>Not frozen</td></tr>
           </tbody>
        </table>
      </div>
      

      【讨论】:

        【解决方案6】:
        .container ~.container{
             padding: 0
             margin: 0
         }
        

        我曾经申请过除头等舱以外的所有课程。

        【讨论】:

          猜你喜欢
          • 2018-07-30
          • 2012-12-30
          • 1970-01-01
          • 1970-01-01
          • 2012-03-14
          • 2012-04-23
          • 2023-03-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多