【发布时间】:2019-09-19 17:32:39
【问题描述】:
我有以下 CodePen:Test LCD with CSS Variables,在其中单击带有特定数字的标签时,会根据我已确定将 BCD 模拟为 7 段显示器的代数方程来“点亮”相应的 LCD 段解码器,为了模拟LCD显示...
我目前在 CSS 中提到了第一段的方程式。单击 CSS 中的一个数字理论上应该会导致相应的四个 --input 变量填充一个脉冲(0 或 1),然后该等式根据该段的等式确定不透明度...
分段 A(顶部分段)应更改如下:
- 0:开启
- 1:关闭
- 2:开
- 3:开
- 4:关闭
- 5:开
- 6:开
- 7:开
- 8:开
- 9:开启
其中“on”表示不透明度为 1,“off”表示不透明度为 0.05。
但是,即使我们将初始默认值设为 0(即开启),点击 1 或 4 也不会更改段不透明度...
代码如下,谁能指出我做错了什么?非常感谢提前...
HTML:
<div id="led-screen">
<div class="digit">
<div class="segment segment-a"></div>
<div class="segment segment-b"></div>
<div class="segment segment-c"></div>
<div class="segment segment-d"></div>
<div class="segment segment-e"></div>
<div class="segment segment-f"></div>
<div class="segment segment-g"></div>
</div>
</div>
<div id="buttons">
<label class="digit-button" for="digit-7">7</label>
<label class="digit-button" for="digit-8">8</label>
<label class="digit-button" for="digit-9">9</label>
<label class="digit-button" for="digit-4">4</label>
<label class="digit-button" for="digit-5">5</label>
<label class="digit-button" for="digit-6">6</label>
<label class="digit-button" for="digit-1">1</label>
<label class="digit-button" for="digit-2">2</label>
<label class="digit-button" for="digit-3">3</label>
<label class="digit-button" for="digit-0">0</label>
<input type="radio" name="digit-radio" id="digit-0" checked="checked"/>
<input type="radio" name="digit-radio" id="digit-1" />
<input type="radio" name="digit-radio" id="digit-2" />
<input type="radio" name="digit-radio" id="digit-3" />
<input type="radio" name="digit-radio" id="digit-4" />
<input type="radio" name="digit-radio" id="digit-5" />
<input type="radio" name="digit-radio" id="digit-6" />
<input type="radio" name="digit-radio" id="digit-7" />
<input type="radio" name="digit-radio" id="digit-8" />
<input type="radio" name="digit-radio" id="digit-9" />
</div>
CSS:
:root {
--input_0: 0; /* z */
--input_1: 0; /* y */
--input_2: 0; /* x */
--input_3: 0; /* w */
--led_r: 42;
--led_g: 45;
--led_b: 34;
--led_o: 0;
--led_o_base: 0.95;
--led_o_offset: 0.05;
}
#led-screen {
background-color: #b7ac90;
width: 800px;
height: 200px;
display: block;
}
#digit-0:checked {
--input_0: 0;
--input_1: 0;
--input_2: 0;
--input_3: 0;
}
#digit-1:checked {
--input_0: 1;
--input_1: 0;
--input_2: 0;
--input_3: 0;
}
#digit-2:checked {
--input_0: 0;
--input_1: 1;
--input_2: 0;
--input_3: 0;
}
#digit-3:checked {
--input_0: 1;
--input_1: 1;
--input_2: 0;
--input_3: 0;
}
#digit-4:checked {
--input_0: 0;
--input_1: 0;
--input_2: 1;
--input_3: 0;
}
#digit-5:checked {
--input_0: 1;
--input_1: 0;
--input_2: 1;
--input_3: 0;
}
#digit-6:checked {
--input_0: 0;
--input_1: 1;
--input_2: 1;
--input_3: 0;
}
#digit-7:checked {
--input_0: 1;
--input_1: 1;
--input_2: 1;
--input_3: 0;
}
#digit-8:checked {
--input_0: 0;
--input_1: 0;
--input_2: 0;
--input_3: 1;
}
#digit-9:checked {
--input_0: 1;
--input_1: 0;
--input_2: 0;
--input_3: 1;
}
.digit {
width: 75px;
height: 150px;
float: right;
margin-right: 50px;
margin-top: 10px;
transform: skew(-5deg);
}
.segment-a {
position: relative;
left: 0;
top: 0;
--led_o: calc(((2 * var(--input_3) * var(--input_2) * var(--input_1) * var(--input_0)) - (2 * var(--input_3) * var(--input_2) * var(--input_0)) - (var(--input_3) * var(--input_1) * var(--input_0)) - (var(--input_3) * var(--input_1)) + (var(--input_3) * var(--input_0)) - (2 * var(--input_2) * var(--input_1) * var(--input_0)) + (var(--input_2) * var(--input_1)) + (2 * var(--input_2) * var(--input_0)) - var(--input_2) + (var(--input_1) * var(--input_0)) - var(--input_0) + 1) * var(--led_o_base) + var(--led_o_offset));
background-color: rgba(var(--led_r), var(--led_g), var(--led_b), var(--led_o));
/* 2wxyz-2wxz-wyz-wy+wz-2xyz+xy+2xz-x+yz-z+1 */
}
.segment-b {
position: relative;
transform: rotate(90deg);
left: 41px;
top: 21px;
}
.segment-c {
position: relative;
transform: rotate(90deg);
left: 41px;
top: 83px;
}
.segment-d {
position: relative;
left: 0;
top: 104px;
}
.segment-e {
position: relative;
transform: rotate(90deg);
left: -41px;
top: 43px;
}
.segment-f {
position: relative;
transform: rotate(90deg);
left: -41px;
top: -59px;
}
.segment-g {
position: relative;
left: 0;
top: -38px;
}
.segment {
width: 60px;
height: 20px;
}
【问题讨论】:
-
CSS 变量是相对于它们声明的元素而言的。因此在单选按钮内设置值是相对于这些单选按钮的。不过,我确实知道这是如何实现的,我会看看它是否可行。
标签: css opacity checked lcd css-variables