270

我只想将样式应用于具有特定类的 DIV 内的表:

注意:我宁愿为子元素使用 css-selector。

为什么#1 有效而#2 无效?

1:

div.test th, div.test td, div.test caption {padding:40px 100px 40px 50px;}

2:

div.test th, td, caption {padding:40px 100px 40px 50px;}

HTML:

<html>
    <head>
        <style>
            div.test > th, td, caption {padding:40px 100px 40px 50px;}
        </style>
    </head>
    <body>
        <div>
            <table border="2">
                <tr><td>some</td></tr>
                <tr><td>data</td></tr>
                <tr><td>here</td></tr>
            </table>
        </div>
        <div class="test">
            <table  border="2">
                <tr><td>some</td></tr>
                <tr><td>data</td></tr>
                <tr><td>here</td></tr>
            </table>
        </div>
    </body>
</html>

我究竟做错了什么?

4

8 回答 8

354

除了所有元素和所有元素之外,此代码“ div.test th, td, caption {padding:40px 100px 40px 50px;}”将规则应用于类名为th的元素所包含的所有元素。divtest td caption

它与“all td, thand captionelements 包含div在类为test”的元素中的元素不同。为此,您需要更改选择器:

' >' 不受某些旧浏览器的完全支持(我在看着你,Internet Explorer)。

div.test th,
div.test td,
div.test caption {
    padding: 40px 100px 40px 50px;
}
于 2009-03-10T20:21:27.850 回答
141
.test * {padding: 40px 100px 40px 50px;}
于 2012-05-24T19:23:46.057 回答
92

选择> 仅匹配直接子代,不匹配后代。

你要

div.test th, td, caption {}

或更可能

div.test th, div.test td, div.test caption {}

编辑:

第一个说

  div.test th, /* any <th> underneath a <div class="test"> */
  td,          /* or any <td> anywhere at all */
  caption      /* or any <caption> */

而第二个说

  div.test th,     /* any <th> underneath a <div class="test"> */
  div.test td,     /* or any <td> underneath a <div class="test"> */
  div.test caption /* or any <caption> underneath a <div class="test">  */

在你原来的div.test > thany <th> which is a **direct** child of <div class="test">,这意味着它会匹配<div class="test"><th>this</th></div>但不会匹配<div class="test"><table><th>this</th></table></div>

于 2009-03-10T20:22:54.337 回答
12

如果您想在所有子项中添加样式并且没有指定 html 标记,请使用它。

父标签div.parent

div.parent 中的子标签,例如,<a>等。<input><label>

代码 :div.parent * {color: #045123!important;}

您也可以删除重要的,它不是必需的

于 2013-05-02T06:55:15.287 回答
8

这是我最近写的一些代码。我认为它提供了将类/ID 名称与伪类结合的基本解释。

.content {
  width: 800px;
  border: 1px solid black;
  border-radius: 10px;
  box-shadow: 0 0 5px 2px grey;
  margin: 30px auto 20px auto;
  /*height:200px;*/

}
p.red {
  color: red;
}
p.blue {
  color: blue;
}
p#orange {
  color: orange;
}
p#green {
  color: green;
}
<!DOCTYPE html>
<html>

<head>
  <title>Class practice</title>
  <link href="wrench_favicon.ico" rel="icon" type="image/x-icon" />
</head>

<body>
  <div class="content">
    <p id="orange">orange</p>
    <p id="green">green</p>
    <p class="red">red</p>
    <p class="blue">blue</p>
  </div>
</body>

</html>

于 2012-11-26T15:32:59.927 回答
5
div.test td, div.test caption, div.test th 

为我工作。

子选择器 > 在 IE6 中不起作用。

于 2009-03-10T20:32:18.167 回答
5

这段代码也可以解决问题,使用 SCSS 语法

.parent {
  & > * {
    margin-right: 15px;
    &:last-child {
      margin-right: 0;
    }
  }
}
于 2020-05-06T04:54:53.800 回答
3

据我所知:

div[class=yourclass] table {  your style here; } 

或者在你的情况下,甚至这样:

div.yourclass table { your style here; }

(但这适用于yourclass可能不是divs 的元素)只会影响yourclass. 而且,正如 Ken 所说,并非所有地方都支持 > (div[class=yourclass]同样,因此对类使用点符号)。

于 2009-03-10T20:22:08.707 回答