html - CSS中是否有“相邻直到...”的选择器(或任何方式)?
问题描述
我正在尝试创建一个基于许多相邻部分的 html 布局。我想在它们之间的某个地方拥有一些divs
可以控制它们外观的东西。
我的 html 会是这样的:
<section class="section">White</section>
<section class="section">White</section>
<div class="color-scheme--violet-red"></div>
<section class="section">Colored</section>
<section class="section">Colored</section>
<div class="color-scheme--clear"></div>
<section class="section">White</section>
<section class="section">White</section>
<div class="color-scheme--violet-red"></div>
<section class="section">Colored</section>
<section class="section">Colored</section>
而且我希望在 asection
之后出现的每个color-scheme
div
都有一个由它定义的背景,因为我正在尝试使用这个 scss:
$white: #fefefe;
$red: #c54839;
$violet: #6c195e;
.section {
height: 15em;
background: $white;
font-family: sans-serif;
display: flex;
justify-content: center;
align-items: center;
color: $red;
}
.color-scheme--violet-red ~ .section {
background-image: linear-gradient(to right, darken($violet, 10%) 0%, darken($red, 10%) 100%);
color: $white;
}
.color-scheme--clear ~ .section {
background: $white;
color: $red;
}
这是一个带有工作示例的小提琴:https ://jsfiddle.net/raphaelaleixo/4featqrg/ (最后两个部分是白色的,但它们应该是彩色的)
问题是,因为最后的部分都与color-scheme--clear
div
AND相邻color-scheme--violet-red
,因此 css 文件中位于下方的部分获得优先权,并覆盖另一部分。
我的问题是:无论如何 - 仅使用 html/css - 选择与另一个最接近的每个元素?
对于这个 html,我不能将这些部分嵌套在“颜色控制器”div 中,我也不能确定在下一个“控制器”div 之前会有多少个 div(如果知道,我可以嵌套多个“下一个兄弟姐妹” " 选择器并收工)。
我是对任何可以实现这种布局的 css hack都很开放:-)
谢谢!
解决方案
一个 hacky 想法是增加每个选择器的特异性,考虑color-sheme
之前的选择器。因此,color-sheme
我们之前拥有的越多,选择器就越具体,因此它将赢得之前的选择器。
当然,您将需要编写许多 CSS 规则,具体取决于您将拥有多少个部分。您可以考虑使用 SASS/LESS 轻松生成代码:
.section {
height: 15em;
background: white;
font-family: sans-serif;
display: flex;
justify-content: center;
align-items: center;
color: red;
}
.color-scheme--violet-red ~ .section,
[class*="color-scheme" ] ~ .color-scheme--violet-red ~ .section,
[class*="color-scheme" ] ~ [class*="color-scheme" ] ~ .color-scheme--violet-red ~ .section,
[class*="color-scheme" ] ~ [class*="color-scheme" ] ~ [class*="color-scheme" ] ~ .color-scheme--violet-red ~ .section,
[class*="color-scheme" ] ~ [class*="color-scheme" ] ~ [class*="color-scheme" ] ~ [class*="color-scheme" ] ~ .color-scheme--violet-red ~ .section{
background-image: linear-gradient(to right, purple 0%, red 100%);
color: white;
}
.color-scheme--clear ~ .section,
[class*="color-scheme" ] ~ .color-scheme--clear ~ .section,
[class*="color-scheme" ] ~ [class*="color-scheme" ] ~.color-scheme--clear ~ .section,
[class*="color-scheme" ] ~ [class*="color-scheme" ] ~ [class*="color-scheme" ] ~.color-scheme--clear ~ .section,
[class*="color-scheme" ] ~ [class*="color-scheme" ] ~ [class*="color-scheme" ] ~ [class*="color-scheme" ] ~.color-scheme--clear ~ .section{
background: white;
color: red;
}
<section class="section">White</section>
<section class="section">White</section>
<div class="color-scheme--violet-red"></div>
<section class="section">Colored</section>
<section class="section">Colored</section>
<div class="color-scheme--clear"></div>
<section class="section">White</section>
<section class="section">White</section>
<div class="color-scheme--violet-red"></div>
<section class="section">Colored</section>
<section class="section">Colored</section>
<div class="color-scheme--clear"></div>
<section class="section">White</section>
<section class="section">White</section>
<section class="section">White</section>
<section class="section">White</section>
<div class="color-scheme--violet-red"></div>
<section class="section">White</section>
<section class="section">White</section>
推荐阅读
- pyspark - 属性错误:“datetime.timedelta”对象没有属性“_get_object_id”
- php - 如何使唯一数组的自定义验证规则依赖于其他字段 laravel
- java - 如何使用 JDBCIO (apache beam) 执行存储过程/例程
- javascript - 更新提交事件中的值后未提交隐藏输入
- php - 表中每一行的非法字符串偏移 'Data_length'/'Index_length'
- c# - C#计算器 - 不能在小数点前插入数字
- python - 如何对分支 python 版本有 100% 的覆盖率?
- botframework - 在 QnA maker bot 中,我想中断 qnamaker 对话
- javascript - 使用Javascript反转字符串而不反转特殊字符
- matlab - 在图形标题中显示所有预测及其百分比