【发布时间】:2021-11-15 13:25:59
【问题描述】:
我正在开发一个纯 HTML/CSS(即没有 JS)项目,这是 CSS 变量计算的一个示例,但我似乎陷入了僵局,因为一旦我为新的 CSS 变量引入了新的计算,该部分的值在计数器中恢复为 0。
让我用我的 CodePen 解释一下:https://codepen.io/eliseodannunzio/pen/ZEyGvOy
我有 4 个下拉列表当前设置为特定值,在本例中为 1976 年 6 月。使用 8 位寄存器进行一系列计算,从而为下一组寄存器产生流动效应,依此类推。标记为--p5R0 到--p5R5 的寄存器用于我添加0 值的步骤(基于Century 下拉列表(在本例中为1900's = 0))。六个寄存器 --p5R0 (LSB) 到 --p5R5 (MSB) 的值导致 11001 (25) 的值,这是本例中的预期值...
现在我已经完成了下一步的计算,在本例中是添加 76 (01001100),这已在寄存器 --y7 (MSB) 到 --y0 (LSB) 中计算出来;因此,我希望寄存器 --p6R7 (MSB) 到 --p6R0 在我的调试窗口中以 01100101 的形式显示 101 (25 + 76)。
由于某种原因,似乎只有前 3 位是可计算的(位 0、1 和 2),当前显示 88888101(8 显示为 --p6R3 到 --p6R7 被注释掉,计数器为接受这一点,这表明这是有效的)。一旦遇到--p6R3(第 3 位)的值,所有计数器似乎由于某种原因恢复为 0。如果它们各自的 CSS 变量不可用,我已将计数器设置为默认值为 8,或多或少有助于调试。
有问题的代码接近尾声,搜索/** ISSUE **/ 找到它,但我在下面复制了它...
--p6R0: calc((1 - 2 * var(--y0, 0)) * var(--p5R0, 0) + var(--y0, 0));
--p6K1: calc(var(--p5R0, 0) * var(--y0, 0));
--p6R1: calc((1 - 2 * var(--y1, 0)) * (var(--p6K1, 0) * (1 - 2 * var(--p5R1, 0)) + var(--p5R1, 0)) + var(--y1, 0));
--p6K2: calc(var(--p6K1, 0) * (var(--p5R1, 0) * (1 - 2 * var(--y1, 0)) + var(--y1, 0)) + var(--p5R1, 0) * var(--y1, 0));
--p6R2: calc((1 - 2 * var(--y2, 0)) * (var(--p6K2, 0) * (1 - 2 * var(--p5R2, 0)) + var(--p5R2, 0)) + var(--y2, 0));
--p6K3: calc(var(--p6K2, 0) * (var(--p5R2, 0) * (1 - 2 * var(--y2, 0)) + var(--y2, 0)) + var(--p5R2, 0) * var(--y2, 0));
/* These values below seem to fail and revert the p6Rx series to zero... why???? */
/* --p6R3: calc((1 - 2 * var(--y3, 0)) * (var(--p6K3, 0) * (1 - 2 * var(--p5R3, 0)) + var(--p5R3, 0)) + var(--y3, 0)); */
/* --p6K4: calc(var(--p6K3, 0) * (var(--p5R3, 0) * (1 - 2 * var(--y3, 0)) + var(--y3, 0)) + var(--p5R3, 0) * var(--y3, 0)); */
/* --p6R4: calc((1 - 2 * var(--y4, 0)) * (var(--p6K4, 0) * (1 - 2 * var(--p5R4, 0)) + var(--p5R4, 0)) + var(--y4, 0)); */
/* --p6K5: calc(var(--p6K4, 0) * (var(--p5R4, 0) * (1 - 2 * var(--y4, 0)) + var(--y4, 0)) + var(--p5R4, 0) * var(--y4, 0)); */
/* --p6R5: calc((1 - 2 * var(--y5, 0)) * (var(--p6K5, 0) * (1 - 2 * var(--p5R5, 0)) + var(--p5R5, 0)) + var(--y5, 0)); */
/* --p6K6: calc(var(--p6K5, 0) * (var(--p5R5, 0) * (1 - 2 * var(--y5, 0)) + var(--y5, 0)) + var(--p5R5, 0) * var(--y5, 0)); */
/* --p6R6: calc((1 - 2 * var(--y6, 0)) * var(--p6K6, 0) + var(--y6, 0)); */
/* --p6R7: calc(var(--p6K6, 0) * var(--y6, 0)); */
这些值的显示在下面的代码中进一步完成:
#addyear-display:after {
counter-reset: R60 var(--p6R0, 8) R61 var(--p6R1, 8) R62 var(--p6R2, 8) R63 var(--p6R3, 8) R64 var(--p6R4, 8) R65 var(--p6R5, 8) R66 var(--p6R6, 8) R67 var(--p6R7, 8);
content: "p6R7:" counter(R67) " p6R6:" counter(R66) " p6R5:" counter(R65) " p6R4:" counter(R64) " p6R3:" counter(R63) " p6R2:" counter(R62) " p6R1:" counter(R61) " p6R0:" counter(R60);
position: absolute;
top: 4rem;
left: 0;
}
--p6R3 到 --p6R7 的代码块未注释的那一刻,那些 8 应该消失并显示代表 101 的 1 和 0,但这没有发生,它出现全为零,我知道这是错误的。 . 我一直在寻找解释为什么这些 CSS 变量会失败,但结果却是空的。
我的问题是:
a) 我的 CSS 计算是否无效?
b) 给定样式表上的 CSS var() 调用或 calc() 调用数量是否有限制?
c) 一旦注释代码块被取消注释,是否有原因导致我的 CSS 变量无法在调试窗口的计数器显示中正确呈现?
d) 有没有办法解决这个问题?
提前致谢
【问题讨论】:
-
这太令人印象深刻了。恭喜!我注意到仅注释以
--p6R3开头的行不会重置其他变量值。但我不知道为什么。
标签: css binary cpu-registers css-variables css-calc