如何根据孩子的班级更改父母的CSS属性?

时间:2018-08-30 13:40:02

标签: html css

我有两种类型的行的列表。每行包含许多字段。因此,基本上每一行都具有以下结构:

<div class="views-row">
  <div class="field1"></div>
  .....
  <div class="fieldN">
    <span>
      <div class="blue"> </div>
    </span>
  </div>      
</div>

对我来说,问题是我需要根据div class="views-row"内的div的类,使用class="fieldN"为父div应用CSS属性。它可以是“蓝色”或“黄色”。

因此,基于存储在范围内的div标签的类,我需要为外部div border-left“应用class="views-row属性

能否请您帮我实现这个目标?

2 个答案:

答案 0 :(得分:0)

据我所知,如果我很好地理解了您的问题,那么基于child元素设计父元素的样式不是CSS的可用功能。您可能需要为此编写脚本。

如果您能够像您说的那样做div [div.a]或div:contains [div.a],那将是很棒的事情,但这是不可能的。

您可能需要考虑查看JQuery。它的选择器与“包含”类型一起使用非常好。您可以根据其子级内容选择div,然后将CSS类全部应用于父级。

如果您使用jQuery,则类似的方法可能会起作用(未经测试但理论存在):

$('div:has(div.a)').css('border', '1px solid red');

$('div:has(div.a)').addClass('redBorder');

结合CSS类:

.redBorder
{
    border: 1px solid red;
}

这是JQuery "has" selector的文档。

答案 1 :(得分:0)

对于单个边框,不需要父选择器,您可以通过位置和伪造来伪造

.views-row {
border-left:solid red;
position:relative;
}
.views-row .blue:before {
content:'';
position:absolute;
top:0;
left:-3px; /* border width of parent if any */
bottom:0;
border-left:solid blue;
}
.views-row .yellow:before {
content:'';
position:absolute;
top:0;
left:-3px; /* border width of parent if any */
bottom:0;
border-left:solid yellow;
}
<div class="views-row">
  <div class="field1"></div>
  .....
  <div class="fieldN">
    <span>
      <span class="blue">i have a blue class, my parent should show a blue left border </span>
    </span>
  </div>      
</div>
<hr>
<div class="views-row">
  <div class="field1"></div>
  .....
  <div class="fieldN">
    <span>
      <span class="yellow"> i have a yellow class, my parent should show a yellow left border</span>
    </span>
  </div>      
</div>
<hr>
<div class="views-row">
  <div class="field1"></div>
  .....
  <div class="fieldN">
    <span>
      <span class=""> My class does not matter here, original red left border of parent remains seen</span>
    </span>
  </div>      
</div>

注意::HTML结构现在有效,跨度只能包装措辞内容,而不能包含块内容。内部的div变成了一个范围以进行验证。