【问题标题】:CSS :not() selector not working when targeting nested hierarchy [duplicate]定位嵌套层次结构时,CSS:not()选择器不起作用[重复]
【发布时间】:2018-11-27 14:20:01
【问题描述】:

我有一个场景,我想定位页面/容器中的所有表(或任何元素),除了特殊容器或类中的那些元素(对于 例如 .exempt-table) 。

我尝试使用:not() 选择器来定位“除.exempt-table 内的所有表之外的所有表”,如下所示:

.container :not(.exempt-table) table { 
  border: 5px solid red;
}

这是完整的例子:

div {
  border: 1px solid blue;
  padding: 5px;
}

div::before {
  content: 'DIV';
}

.container :not(.exempt-table) table {
  border: 5px solid red;
}
<div class="container">
    <div>
        <h1>General Table. Table1</h1>
        <table>
            <tr>
                <td>COl1</td>
                <td>COl1</td>
                <td></td>
            </tr>
            <tr>
                <td>COl1</td>
                <td>COl1</td>
                <td></td>
            </tr>

        </table>
    </div>
    <div class="exempt-table">
        <h1>Special Table. Table2</h1>
        <table>
            <tr>
                <td>COl1</td>
                <td>COl1</td>
                <td></td>
            </tr>
            <tr>
                <td>COl1</td>
                <td>COl1</td>
                <td></td>
            </tr>
        </table>
    </div>
    <div>
        <h1>NESTED: General Table. Table3</h1>
        <div>

            <table>
                <tr>
                    <td>COl1</td>
                    <td>COl1</td>
                    <td></td>
                </tr>
                <tr>
                    <td>COl1</td>
                    <td>COl1</td>
                    <td></td>
                </tr>

            </table>
        </div>
    </div>
    <div class="exempt-table">
        <h1>NESTED: Special Table. Table4</h1>
        <div >
            <table>
                <tr>
                    <td>COl1</td>
                    <td>COl1</td>
                    <td></td>
                </tr>
                <tr>
                    <td>COl1</td>
                    <td>COl1</td>
                    <td></td>
                </tr>
            </table>
        </div>
    </div>
</div>

预期是,border(红色)不应应用于 Table2Table4,因为这些表在 .exempt-table 内。但是,边框适用于除 Table2 之外的所有表格,因为如果 .container 其中 Table4 只是后代,则 Table2 是直接子代。

11 月 27 日: 更新了上述示例以解决 &gt; table 的问题。

【问题讨论】:

  • 你需要两个选择器
  • 表 4 也在一个没有类的 div 中,与 :not(.exempt-table) 匹配。所以你应该避免这样的情况。你可以在这里使用:not(.exempt-table) &gt; table
  • 嗨@TemaniAfif 与覆盖样式的重复问题不同,我根本不为“.exempt-table”内的表格应用边框,而不是应用到所有表格并再次覆盖。希望这是有道理的.
  • 副本解释说您不能使用一个选择器来执行此操作,这就是我将其添加为副本的原因。您也可以关注副本的副本了解更多详情

标签: css css-selectors


【解决方案1】:

请试试这种风格

<style>
      .container :not(.exempt-table) > table {
        border: 5px solid red;
      }
    </style>

【讨论】:

  • 嗨,我试过这个工作,但是,这需要表是 .exempt-table 的直接子级,在我的情况下可能无法保证
  • @PrasannaKumar:此 CSS 代码也适用于更多表格,请检查
  • 这在
    的情况下不起作用,因为表不是“.exempt-table”的直接子级
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多