CSS和javascript中的(Chromium)alpha颜色值(在rgba中)

ROT*_*OGG 6 javascript css chromium

如果我通过javascript中的rgba(r,g,b,a)将alpha值设置为1以外的任何值,则浏览器设置的实际值略有不同.但CSS中的值设置完全匹配.

请参阅code -pen-site中的代码示例

    <head>    
      <script type="text/javascript" language="javascript">
        window.onload=function() {
        document.getElementById("p1").style["background-color"]="rgba(255,0,0,0.3)";
        }
      </script>
    </head>

    <body>
      <p>RGB colors with opacity:</p>
      <p id="p1">Red</p>
      <p id="p2">Green</p>
    </body>
Run Code Online (Sandbox Code Playgroud)
  1. 使用Chromium浏览器
  2. 按F12激活Inspector
  3. 检查"红色".
  4. "Red"的背景颜色设置为rgba(255,0,0,0.3),但在Inspector中,其值为rgba(255,0,0,0.298039)
  5. "绿色"的背景颜色设置为rgba(0,255,0,0.3),Inspector中的值与之匹配.

为什么如果通过Javascript设置CSS颜色,那么数字会改变?

ROT*_*OGG 2

首先,我原来的观察是错误的。如果您单击“计算”选项卡来检查背景颜色,则“style”标记内的 CSS 规则和元素内的内联规则都会观察到这种差异。我

Chromium 源代码中 ,此实现解释了 alpha 值的 0.001961 差异

// Convert the floating pointer number of alpha to an integer in the range [0, 256),
// with an equal distribution across all 256 values.
int alphaComponent = 
    static_cast<int>(
        clampTo<double>(alpha, 0.0, 1.0) * nextafter(256.0, 0.0));
Run Code Online (Sandbox Code Playgroud)

此处,如果 alpha 为 0.3,则 alphaComponent 变为 0.298039。(如果我将 alpha 设置为 [0.0, 1.0] 中的任何浮点,则 webInspector 显示的数字与从上述公式获取的 alphaComponent 值相匹配。