Html 为什么父类重写子类

Html 为什么父类重写子类,html,css,Html,Css,假设以下代码: <style> .child {border:0px solid #000; border-spacing:0px;} .child td {border:0px solid #000; } .child th {border:0px solid #000; } .parent {border:1px solid #000; border-spacing:0px;} .parent td {bord

假设以下代码:

<style>
    .child      {border:0px solid #000; border-spacing:0px;}
    .child td   {border:0px solid #000; }
    .child th   {border:0px solid #000; }

    .parent     {border:1px solid #000; border-spacing:0px;}
    .parent td  {border:1px solid #000; }
    .parent th  {border:1px solid #000; }
</style>


<table class="parent">
    <tr>
        <th>title</th>
    </tr>
    <tr>
        <td>stuff</td>
    </tr>
    <tr>
        <td>
            <table class="child">
                <tr>
                    <th>Name: </th>
                    <td><input name="Name" value="stuff"></td>
                </tr>
            </table>
        </td>
    </tr>
</table>

.child{border:0px solid#000;边框间距:0px;}
.child td{border:0px solid#000;}
.child th{border:0px solid#000;}
.parent{border:1px solid#000;边框间距:0px;}
.parent td{border:1px solid#000;}
.parent th{border:1px solid#000;}
标题
东西
姓名:
我对CSS继承的理解是,子表中的元素将没有边框,因为它们将查找最接近的样式化父级以及该类的固有细节。但是,在本例中,子表在th和td元素上显示边框(尽管不是在表本身上)。这表明子类对于表工作正常,但它没有传播到子元素


这是有意的吗?解决这个问题的正确方法是什么?

如果是
父类
类,您的CSS将针对所有
td
th
。这完全是预期的行为

当您不以特定的
类为目标时,则对任何类应用最相关的css-这发生在样式定义中找到的最后一个最适用的规则中,并应用相同的规则

您提到要做的事情,可以通过针对类的直接后代来实现,如下所示:

    .parent {
        border:1px solid #000;
        border-spacing:0px;
    }
    .parent > td { /* > will ensure only td of parent class is targeted */
        border:1px solid #000;
    }
    .parent > th {
        border:1px solid #000;
    }

更新

要在注释中回答您的查询,请更改CSS声明的顺序

CSS更改颜色以更好地理解


您的CSS将针对所有
td
th
(如果是
parent
类)。这完全是预期的行为

当您不以特定的
类为目标时,则对任何类应用最相关的css-这发生在样式定义中找到的最后一个最适用的规则中,并应用相同的规则

您提到要做的事情,可以通过针对类的直接后代来实现,如下所示:

    .parent {
        border:1px solid #000;
        border-spacing:0px;
    }
    .parent > td { /* > will ensure only td of parent class is targeted */
        border:1px solid #000;
    }
    .parent > th {
        border:1px solid #000;
    }

更新

要在注释中回答您的查询,请更改CSS声明的顺序

CSS更改颜色以更好地理解


您的CSS将针对所有
td
th
(如果是
parent
类)。这完全是预期的行为

当您不以特定的
类为目标时,则对任何类应用最相关的css-这发生在样式定义中找到的最后一个最适用的规则中,并应用相同的规则

您提到要做的事情,可以通过针对类的直接后代来实现,如下所示:

    .parent {
        border:1px solid #000;
        border-spacing:0px;
    }
    .parent > td { /* > will ensure only td of parent class is targeted */
        border:1px solid #000;
    }
    .parent > th {
        border:1px solid #000;
    }

更新

要在注释中回答您的查询,请更改CSS声明的顺序

CSS更改颜色以更好地理解


您的CSS将针对所有
td
th
(如果是
parent
类)。这完全是预期的行为

当您不以特定的
类为目标时,则对任何类应用最相关的css-这发生在样式定义中找到的最后一个最适用的规则中,并应用相同的规则

您提到要做的事情,可以通过针对类的直接后代来实现,如下所示:

    .parent {
        border:1px solid #000;
        border-spacing:0px;
    }
    .parent > td { /* > will ensure only td of parent class is targeted */
        border:1px solid #000;
    }
    .parent > th {
        border:1px solid #000;
    }

更新

要在注释中回答您的查询,请更改CSS声明的顺序

CSS更改颜色以更好地理解


两个选择器的权重相同,因此将应用样式表中读取的最后一个选择器:

对你来说,有:

.class td { ...}
.class td { ...} /* wich overwrite previous rule */
您需要增加选择器的权重或特定性:)

可以是:

.parent .child      {border:0px solid #000; border-spacing:0px;}
table .child td   {border:0px solid #000; }
table table.child th   {border:0px solid #000; }
table.child      {border:0px solid #000; border-spacing:0px;}
table td > .child td   {border:0px solid #000; }
.child > th   {border:0px solid #000; }
table.parent .child      {border:0px solid #000; border-spacing:0px;}
table.parent .child td   {border:0px solid #000; }
td > .child th   {border:0px solid #000; }

两个选择器的权重相同,因此将应用样式表中读取的最后一个选择器:

对你来说,有:

.class td { ...}
.class td { ...} /* wich overwrite previous rule */
您需要增加选择器的权重或特定性:)

可以是:

.parent .child      {border:0px solid #000; border-spacing:0px;}
table .child td   {border:0px solid #000; }
table table.child th   {border:0px solid #000; }
table.child      {border:0px solid #000; border-spacing:0px;}
table td > .child td   {border:0px solid #000; }
.child > th   {border:0px solid #000; }
table.parent .child      {border:0px solid #000; border-spacing:0px;}
table.parent .child td   {border:0px solid #000; }
td > .child th   {border:0px solid #000; }

两个选择器的权重相同,因此将应用样式表中读取的最后一个选择器:

对你来说,有:

.class td { ...}
.class td { ...} /* wich overwrite previous rule */
您需要增加选择器的权重或特定性:)

可以是:

.parent .child      {border:0px solid #000; border-spacing:0px;}
table .child td   {border:0px solid #000; }
table table.child th   {border:0px solid #000; }
table.child      {border:0px solid #000; border-spacing:0px;}
table td > .child td   {border:0px solid #000; }
.child > th   {border:0px solid #000; }
table.parent .child      {border:0px solid #000; border-spacing:0px;}
table.parent .child td   {border:0px solid #000; }
td > .child th   {border:0px solid #000; }

两个选择器的权重相同,因此将应用样式表中读取的最后一个选择器:

对你来说,有:

.class td { ...}
.class td { ...} /* wich overwrite previous rule */
您需要增加选择器的权重或特定性:)

可以是:

.parent .child      {border:0px solid #000; border-spacing:0px;}
table .child td   {border:0px solid #000; }
table table.child th   {border:0px solid #000; }
table.child      {border:0px solid #000; border-spacing:0px;}
table td > .child td   {border:0px solid #000; }
.child > th   {border:0px solid #000; }
table.parent .child      {border:0px solid #000; border-spacing:0px;}
table.parent .child td   {border:0px solid #000; }
td > .child th   {border:0px solid #000; }

这是因为
.parent
中的样式覆盖了
.child
中以前的样式,这是由于CSS的级联性质和共享特性。重新定做样式在子表上有一个边框,很难看到。如果删除
.child{border:0px solid#000;border space:0px;}
您会看到一个变化。这是因为
.parent
的样式覆盖了
.child
以前的样式,这是由于CSS的级联性质和共享特性。重新定做样式在子表上有一个边框,很难看到。如果删除
.child{border:0px solid#000;border space:0px;}
您会看到一个变化。这是因为
.parent
的样式覆盖了
.child
以前的样式,这是由于CSS的级联性质和共享特性。重新定做样式在子表上有一个边框,很难看到。如果删除
.child{border:0px solid#000;border space:0px;}
您将看到一个更改。这是因为
.parent
中的样式正在覆盖
.child
中以前的样式