css - 条件文档:如何根据几个类显示可选部分
问题描述
我有一个文档,其中最多有 6 个类来选择可选部分。一些可选部分在 inside 中,因此在不同的 shadow-root 中,因此必须将决定作为 CSS 自定义属性传入。
目标是让所有可选部分的类与要显示的主体上的类匹配,其余部分被隐藏。可选部分有 cc 类,然后还有可能在主体上的其他类。
我想到的许多想法导致了 6 的组合爆炸!(720) 规则,这是不切实际的。然后我测试了不透明度不反对(0,1)范围之外的值,所以认为下面的方法可能有效......但即使是看起来它们应该总和为0的项目,而不是总和为1,两者在 Firefox 和 Chrome 中,所有文本都可见,而不仅仅是与所选类对应的那些!
我错过了什么?
<!DOCTYPE HTML>
<html>
<head>
<meta charset=utf-8>
<title>conditional text test</title>
<style>
body:not(.ab)
{
--vis-ab:0;
}
body.ab
{
--vis-ab:1;
}
body:not(.cde)
{
--vis-cde:0;
}
body.cde
{
--vis-cde:1;
}
body:not(.fghi)
{
--vis-fghi:0;
}
body.fghi
{
--vis-fghi:1;
}
body:not(.jklmn)
{
--vis-jklmn:0;
}
body.jklmn
{
--vis-jklmn:1;
}
body:not(.opqrst)
{
--vis-opqrst:0;
}
body.opqrst
{
--vis-opqrst:1;
}
body:not(.uvwxyz)
{
--vis-uvwxyz:0;
}
body.uvwxyz
{
--vis-uvwxyz:1;
}
.cc:not(.ab)
{
--has-ab:0;
}
.cc.ab
{
--has-ab:var( --vis-ab );
}
.cc:not(.cde)
{
--has-cde:0;
}
.cc.cde
{
--has-cde:var( --vis-cde );
}
.cc:not(.fghi)
{
--has-fghi:0;
}
.cc.fghi
{
--has-fghi:var( --vis-fghi );
}
.cc:not(.jklmn)
{
--has-jklmn:0;
}
.cc.jklmn
{
--has-jklmn:var( --vis-jklmn );
}
.cc:not(.opqrst)
{
--has-opqrst:0;
}
.cc.opqrst
{
--has-opqrst:var( --vis-opqrst );
}
.cc:not(.uvwxyz)
{
--has-uvwxyz:0;
}
.cc.uvwxyz
{
--has-uvwxyz:var( --vis-uvwxyz );
}
.cc
{
opacity:calc( var( --has-ab ) + var( --has-cde ) + var( --has-fghi ) + var( --has-jklmn ) + var ( --has-opqrst ) + var( --has-uvwxyz ));
}
</style>
</head>
<body class=ab>
<h1>conditional text test</h1>
<div>
<span class="cc ab">ab</span>
<span class="cc cde">cde</span>
<span class="cc fghi">fghi</span>
<span class="cc jklmn">jklmn</span>
<span class="cc opqrst">opqrst</span>
<span class="cc uvwxyz">uvwxyz</span>
</div>
<div class="cc ab fghi">ab or fghi</div>
<div class="cc ab uvwxyz">ab or uvwxyz</div>
<div class="cc opqrst fghi">opqrst or fghi</div>
</body>
</html>
解决方案
我的朋友想通了这一点。它在 var 和 ( 之间有一个空格。他在 Firefox DevTools 上提交了一个错误报告https://bugzilla.mozilla.org/show_bug.cgi?id=1586556
现在描述的技术工作正常,我的朋友对其进行了一些优化(在 bug 中的文件中)以减少所需的规则数量。
推荐阅读
- spring - 如何将作业从 Spring 项目持久化到 H2 数据库
- slurm - 是否可以使用 Slurm 在 chroot 环境中运行用户的作业
- r - 如何在大数据集中找到大于 x、x+10000 的值的相对频率?
- entity-framework - 实体框架:基于最后一级子实体的过滤器
- google-bigquery - bigquery 表的上次访问日期
- javascript - 在 UI 中使用 Angular 反应形式显示选中的复选框
- azure-devops - 有没有办法只使用 az pipelines cli 创建和发布 azure 发布管道?
- angular - ngSwitch 未更改为表达式条件
- azure - Azure Active Directory 用户搜索优化
- java - java - 如何在java eclipse中的同一行中显示计时器的文本