【问题标题】:Immediate children css, and only those直系儿童 css,只有那些
【发布时间】:2015-02-01 18:52:48
【问题描述】:

我想要实现的目标听起来很简单,但事实并非如此。我什至不知道我是否能完成我想做的事情。

好的,所以我们得到了类名为 .parent 的元素,.parent 有两个 div 孩子,一个是直接的,另一个像这样放入第一个:

<div class="parent">
  <div>First child
    <div>Second child</div>
  </div>
</div>

定位第一个孩子应该很简单:

.parent > div {
  color: green;
}

但事实并非如此,因为“第二个孩子”也会受到影响。

这可以实现吗?

旁注: 一些 CSS 属性(如“颜色”)是从父级继承的,即使元素没有直接样式。我想这就是导致问题的原因。但是,我仍然不希望它级联。

【问题讨论】:

  • 这可能是您的代码中的错字,但在您的示例中,您的 second child div 位于您的 first child div 内。
  • 不是错字。第二个应该在里面。
  • 所以基本上你不想改变第二个孩子的颜色对吗?
  • 啊..根据您的编辑,我知道您现在在问什么。那么,你无法用一个简单的规则完成你想要的。您基本上需要覆盖 second child 从其父 first-child 获得的继承。
  • J Prakash:是的。而且我也不想指定第二个孩子的颜色,我希望它是“正常”。 DOM 有什么。

标签: html css targeting


【解决方案1】:

父元素颜色继承给子元素。先设置div颜色,然后直接使用children的颜色:

.parent div{
  color: #000;
  }
.parent > div {
  color: green;
}
<div class="parent">
  <div>First child
    <div>Second child</div>
  </div>
</div>

【讨论】:

  • 所以基本上我不能只将属性“color”应用于 .parent 的直接子级?我可以使用某些属性(如垂直对齐)来做到这一点,或者每个属性都是级联的?我不想“重置”字体颜色或任何相关属性。我只是不希望我设置的属性级联到没有目标的孩子..
【解决方案2】:

css 是级联的,因此您对元素所做的更改会影响子元素。但是,您可以为第二个孩子添加一个 css 类来覆盖 css。

【讨论】:

  • 但这需要我“重置”颜色,我不想这样做。我希望颜色只影响第一个直系孩子。
  • 我还注意到一些属性没有级联。像垂直对齐。
【解决方案3】:

当你使用div > p时,它意味着选择所有p元素,其中父元素是div元素

但是,如果您为一个元素设置了一个属性,那么如果您不覆盖它,所有子元素都将继承该属性。例如:

<div class="parent">
  <div>First child
    <div>Second child</div>
  </div>
</div>

在您的情况下,所有 div 都将通过继承具有 color:green 属性。如果要更改第二个 div 的属性,您必须执行以下操作:div.parent div div { color: red }。这意味着选择所有 div 哪个父级是一个 div 哪个父级是一个具有“父级”类的 div。

这就是样式表的工作原理。

【讨论】:

  • 是的,我知道。但是设置“div.parent div div”规则意味着我知道我想要在 ~3rd div 上使用什么颜色。但就我而言,我不知道,我只是希望它使用 DOM 使用的内容(或之前在 CSS 中设置的内容)。但我想这是无法实现的,因为 CSS 是如何级联的。
  • 不,不是。当您将属性设置为 div 时,所有属性都会被继承,除非您在子元素中再次更改。
【解决方案4】:

不,你不能。

CSS color property 默认为Inherited
按照你想要的方式是不可能的。

但更重要的是:这不是ISSUE,它应该是这样的。
记住:CSS => Cascade Style Sheet

现在,对于你的问题......“解决”这个问题的简单、容易和正确的方法......是已经在他的previous answer 中告诉你的那个@Bhojendra Nepal

编辑:

另一种选择是将飞行文本包装在 span tag.. 或类似名称中:

.parent > div > span {
  color: green;
}
<div class="parent">
  <div>
    <span>First child</span>
    <div>
      <span>Second child</span>
    </div>
  </div>
</div>

【讨论】:

  • 感谢您的明确答复。我试图实现的目标不可能以我想要的方式实现。这对我来说不是“啊哈 CSS 时刻”,我已经知道它是如何级联的,我只是想弄清楚级联是如何工作的,因为有些属性会级联,而有些则不会。 I've done CSS throughout my years
  • 是的,它是......但解决起来并不复杂......如果你有一个良好的结构html code,你的css 将完全符合你的要求。这就是应该的方式。
  • 我明白了。但我的例子只是一个更大的问题。我基本上希望 .parent 将several 属性应用于它的直接子级,但我不想重置它们在层次结构的更深处。
  • 有一个完整的例子会更容易帮助你......你真的可以做你想要的,但需要详细说明你的代码。抱歉,“啊哈时刻”只是个玩笑……现在从答案中删除了。
  • 我稍后会发布一个关于这个问题的更具体的问题。如果您想查看,我可能会将其链接在这里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2015-10-24
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多