css - 我是否需要指定每个选择器来设置嵌套元素的样式?

标签 css css-selectors styles

为深层嵌套的特定元素设置样式的正确方法是什么。

例如:

<div class="wrapper">
  <div class="content">
     <div class="main">
         <div class="profile">
            <div class="description">
                  <div class="name">John Doe</div>
            </div>
         </div>
     </div>
   </div>
</div>

如果我想将“John Doe”这个名字设为粗体,我是否为每个选择器命名:

.wrapper .content .main .profile .description .name { font-weight:bold; }

还是像这样直接指定选择器:

.name { font-weight:bold; }

我对什么是正确的编码方法感到困惑。感谢您的宝贵时间!

最佳答案

,您不需要需要引用每个父元素来定位嵌套元素;您可以简单地定位元素本身(例如使用 .name):

.name {
  font-weight: bold;
}
<div class="wrapper">
  <div class="content">
    <div class="main">
      <div class="profile">
        <div class="description">
          <div class="name">John Doe</div>
        </div>
      </div>
    </div>
  </div>
</div>

此外,请注意,您也可以直接将任何 ancestor 元素作为目标,规则将在此处向下级联(目标 .profile 将目标 。 profile 以及嵌套在 .profile 中的所有内容,但不是 .profile< 的任何祖先或 sibling ):

.profile {
  font-weight: bold;
}
<div class="wrapper">
  <div class="content">
    <div class="main">Main (not bold)
      <div class="profile">Profile
        <div class="description">
          <div class="name">John Doe</div>
        </div>
      </div>
    </div>
  </div>
</div>

当您指定额外的父元素时,例如使用 .wrapper .content .main .profile .description .name,您将增加所谓的 specificity。 .

当您有两个针对同一元素的规则时,这会发挥重要作用,其中将应用最具体规则(在下文中,.name是一个有效的选择器,但是 .description .name相同的元素为目标并且更具体,所以 .description .name 覆盖 .name):

/* This gets applied */
.name {
  color: red;
}

/* This gets applied and takes priority, as it is more specific */
.description .name {
  color: blue;
}
<div class="wrapper">
  <div class="content">
    <div class="main">
      <div class="profile">
        <div class="description">
          <div class="name">John Doe</div>
        </div>
      </div>
    </div>
  </div>
</div>

enter image description here

这种增加的特异性也可用于表示当您有两个具有相同类或选择器的元素时,您只想将规则应用于特定元素(第二个 .这里的 name 没有父 .description,所以尽管 .name 是它的有效选择器,.description .name 不是):

.description .name {
  font-weight: bold;
}
<div class="wrapper">
  <div class="content">
    <div class="main">
      <div class="profile">
        <div class="description">
          <div class="name">Name One -- targetted</div>
        </div>
        <div class="name">Name Two - not targetted</div>
      </div>
    </div>
  </div>
</div>

关于css - 我是否需要指定每个选择器来设置嵌套元素的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976188/

相关文章:

html - 带有超赞字体图标的 Z-index 不起作用

javascript - 如何通过 parent 高度获得纵横比?

javascript - 如何在 html 中选择没有任何 "div"在 css 中的元素?

css - Clarity Design Datagrid如何改变列宽

ios - 是否可以检测(而不是更改)iOS 屏幕上的当前亮度级别?

css - Flexbox flex-flow column wrap bugs in chrome?

css - 调整浏览器窗口大小时,Div 会重新定位

css - 为什么这个 CSS 属性选择器不起作用?

html - 详细信息时隐藏另一个元素[打开]

styles - PHPExcel - 除了 BORDER_THICK 和 BORDER_THIN 之外还有更多的边框样式吗