【发布时间】:2021-11-15 01:32:19
【问题描述】:
我有一个供个人使用的 CSS 框架,我希望它尽可能“自动”。我遇到了一个我无法解决的问题,但也许你可以帮助我。
假设我有 3 张卡片,其中一张是最上面的父母,其余的是彼此的孩子。我会表明我的意思。
<div class="card"> // Top parent
Lorem!
<div class="card"> // First child
Lorem!
<div class="card"> // Second child
Lorem!
</div>
</div>
</div>
我的目标是让父卡的样式与正文相反的背景颜色和第一个孩子再次与正文相同,因此它与父卡相反。第二个孩子再次反对第一个孩子,也就是与顶级父母相同的背景。并让这种情况无限地持续下去。
可以为每个卡片设置背景颜色,但我希望在您将卡片添加到其他卡片中时,而不是手动执行此操作。
我目前正在解决这个问题 .card > .card 但这只能工作一次,我不希望用 .card > .card > .card > .card > .card 等向 css 发送垃圾邮件...
我尝试使用 div:nth-child(even) 但如果你一直在彼此之间做孩子,这将不起作用。
我怎样才能做到这一点?
当前代码:
SCSS:
@if #{$class} == card {
/* If parent card has a child card */
.#{$class} > .#{$class} {
background-color: var(--clr-light-primary-background);
}
}
CSS:
.card > .card {
background-color: var(--clr-light-primary-background);
}
HTML:
<div class="card column33 sm-rounded">
<div class="card-header">
<h2 class="card-title text-regular text-uppercase">TOP PARENT</h2>
</div>
<div class="card">
<div class="card-header">
<h2 class="card-title text-medium">1st CHILD</h2>
</div>
<div class="card">
<div class="card-header">
<h2 class="card-title text-medium">2nd CHILD</h2>
</div>
</div>
</div>
</div>
【问题讨论】:
-
.card > .card > .card > .card > .card是方式,还有:not(.card) > .card等。 -
那么除了JS绝对没有别的办法了吗?我也可以做JS,但我不知道怎么做。你知道吗?
-
您可以使用
var parents = document.getElementsByClassName('parentClassName')和var children = parents[0].childNodes // this would also need to be iterated遍历您的元素 - 如果您愿意,我可以尝试制作一个更完整的示例,尽管我觉得我会因为丑陋的代码而被处以私刑. -
继续!我不会评判你 :) 我不擅长编写漂亮的代码