我如何定位,除了第一个和最后一个?

时间:2013-02-04 04:57:29

标签: css css3 css-selectors

我如何定位一些子元素,除了,其中父母是父母的第一个或最后一个孩子?

请参阅我的CSS中的评论,以便更好地了解我的意思。

CSS:

/* Always apply */
tr th, tr td
{
    text-align: left;
    vertical-align: top;
}

/* Apply to all except first <tr> */
tr th, tr td
{
    padding-top: 5px;
}

/* Apply to all except last <tr> */
tr th, tr td
{
    border-bottom: 1px solid #c4c4c4;
    padding-bottom: 5px;
}

HTML:

<table>
    <tr>
        <th>Born</th>
        <td><time datetime="1986-11-05">5<sup>th</sup> November 1986</time></td>
    </tr>
    <tr>
        <th>Gender</th>
        <td>Male</td>
    </tr>
    <tr>
        <th>Sports</th>
        <td>Football<br />Tennis</td>
    </tr>
    <tr>
        <th>Teams</th>
        <td>Liverpool FC<br />Spain FC</td>
    </tr>
</table>

4 个答案:

答案 0 :(得分:7)

您在链接的问题中找到了解决方案。使用:not()伪类:

/* Apply to all except first <tr> */
tr:not(:first-child) th, tr:not(:first-child) td{
    padding-top: 5px;
}

/* Apply to all except last <tr> */
tr:not(:last-child) th, tr:not(:last-child) td{
    border-bottom: 1px solid #c4c4c4;
    padding-bottom: 5px;
}

fiddle

(虽然这在IE 8中不起作用)

<小时/> IE 7+的替代方案,如果边框样式可以更改:

/* Apply to all */
tr th, tr td{
    border-top: 1px solid #c4c4c4;
    padding-top: 5px;
}

/* Remove styles from first */
tr:first-child th, tr:first-child td{
    border-top: 0;
    padding-top: 0;
}

/* Apply to all but first */
tr + tr th, tr + tr td{
    border-top: 1px solid #c4c4c4;
    padding-top: 5px;
}

(但不确定IE 7是否支持+

答案 1 :(得分:1)

tr th,
tr td
    {} /* always apply */

tr:first-child th,
tr:first-child td
    {} /* apply only to td and th of the first tr */

tr:last-child th,
tr:last-child td
    {} /* apply only to td and th of the last tr */

答案 2 :(得分:1)

你可以通过

实现这一目标
tr:not(:first-child) th, tr:not(:first-child) td{
 padding-top:5px;
}
tr:not(:last-child) th, tr:not(:last-child) td{
 border-bottom: 1px solid #c4c4c4;
 padding-bottom: 5px;
}

您还可以为每个类的第一个和最后一个添加一个类,可能类似于firstthlastth。这肯定是最简单的解决方案。它也受到所有浏览器的支持

另外,正如韦斯所说,你可以定义法线,然后对第一个和最后一个应用不同的样式,虽然这不是一个完整的方法

tr th, tr td{
 padding: 5px 0; /*I would combine the padding for top and bottom for a more condensed and semantically correct markup*/

 border-bottom: 1px solid #c4c4c4;
}
tr:first-child th, tr:first-child td{
 padding:top: 0;
}
tr:last-child th, tr:last-child td{
 border-bottom:0;
 padding-bottom:0

答案 3 :(得分:1)

tr:first-child ~ tr:not(:last-child) td,
tr:first-child ~ tr:not(:last-child) th
    {background:red;}

这是你可以用兄弟姐妹组合器存档的最好的,但是它不适用于旧的浏览器,因为:不是也可能也是〜