为什么Google Chrome浏览器会更改背景不透明度?

谢尔盖

我使用以下CSS规则来设置的背景色div

div {
    background-color: rgba(96, 96, 96, .1);
}

在开发人员工具的“计算”标签中的Google Chrome v.42中,我看到了此结果rgba(96, 96, 96, 0.0980392);我认为,这看起来像一些网络工具包优化...

在FireFox v.36中,计算出的背景色等于 rgba(96, 96, 96, 0.1)

我已经制作了一个简单的http://jsfiddle.net/sergfry/c7Lzf5v2/,以实际方式展示了它。

因此,我可以防止不透明性在Google Chrome中更改吗?

谢谢!

斯图尔特赛德

正如昆汀所说,这是一个IEEE浮点问题。

0.1 实际上,由于二进制的工作方式,实际上在十进制浮点数中实际上并不存在。

0.1是十分之一,即1/10。要以二进制形式显示,请使用二进制长除法将二进制1除以二进制1010:

在此处输入图片说明

如您所见,0.1在binary is中0.0001100110011....0011,它将一直重复0011到无穷大。

浏览器将选择最接近的可用点,0.1并将其用作不透明度。有些会过去,有些会失败。

FireFox我想它只是显示人类可读的版本,但实际上,它实际上是使用计算机可用的浮点数。

举个例子:

body {
    color: rgba(0,0,0,0.1); // actually 0.0980392
    opacity: 0.1; // actually 0.100000001490116
}

完全相同的浮点数的两个完全不同的值。

实际上,可以使用其他语言(例如Javascript)在浏览器中的其他位置复制此浮点问题。Javascript数字始终是64位浮点数(我相信CSS也是如此)。这通常称为双精度浮点。PHP还使用双精度浮点数。

您可能会猜到64位浮点数存储在64位中,其中数字(小数)存储在位0到51中,指数存储在位52到62中,符号存储在位63中。

这会带来很多问题,因为这意味着整数仅可精确计算到15个小数点,并且实际上只能计算17个小数点。

这意味着数字很容易取整,或者可能存储不正确。

var x = 999999999999999;  // x = 999999999999999
var y = 9999999999999999; // y = 10000000000000000

浮点运算也可能在很多地方不对齐。如上所示。0.1十进制是不实际的0.1,但是0.000110011...等。这意味着一些基本数学可能是完全错误的。

var x = 0.2 + 0.1; // x = 0.30000000000000004

您最终不得不混淆系统来获取您想要的号码。这可以通过*将数字10除以然后得到所需的实际结果来完成。

var x = (0.2 * 10 + 0.1 * 10) / 10; // x = 0.3

计算机浮点内的精度非常困难,当有多种不同的实现(或浏览器)试图尽最大努力提高速度并正确显示所提供的信息时,精度甚至更高。

关于浮点以及CSS处理器(或我期望的JS计算可能相同)的信息有很多不同的信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么相对定位会消除不透明度?

为什么位置根据不透明度而变化

为什么我的用于更改(onclick)div不透明度的JavaScript代码失败?

如何更改react-google-maps中GroundOverlay的不透明度?

更改Google Maps JavaScript API v3以外的地图不透明度

更改组合图(Google图表)中填充区域的不透明度

为什么表单的不透明度没有改变?

为什么我不能console.log div元素的不透明度

为什么 onPress 的可触摸不透明度不会触发?

为什么这个 jquery 不改变不透明度?

为什么我的 CSS 不透明度过渡不起作用?

设置不透明度和将背景设置为rgba(x,y,z,a)有什么区别?

为什么 div 背景不透明?

不透明度的 CSS 动画不适用于 safari,但适用于 google chrome

为什么Google Chrome浏览器会自动刷新页面

为什么即使关闭浏览器,Google Chrome也会留下正在运行的进程?

为什么将不透明度应用于选择而不应用于选项?

将不透明度应用于元素时,为什么我的文本不可见?

Three.js。为什么此RGBA纹理不会改变相关的材质不透明度?

为什么我的 css 不透明度没有通过 setTimeout() 转换回 0.5 的原始状态?

为什么在不使用 JS 的情况下悬停后我的不透明度没有改变?

重置子元素的不透明度-Maple浏览器(Samsung TV App)

所有浏览器的所有必需的不透明度设置?

跨浏览器不透明度Javascript属性

跨浏览器不透明度的javascript正则表达式

如何更改背景图像的不透明度?

更改框上的背景不透明度的问题

使用CSS更改背景不透明度

更改背景不透明度onclick