-
Notifications
You must be signed in to change notification settings - Fork 59
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
有趣的 CSS Alpha 值 #7
Comments
٩(๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅)و |
好高深,膜拜一下 |
NB |
👍 |
研究问题就是要这么深刻才行~ |
还可以研究得这么深入,学习一下! |
还是姐姐看到远啊 |
一丝姐姐人气好高 |
ysjj人气好高 |
真够深入的~~ |
牛逼带闪电,佩服! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
在 Chrome 中输入 「background-color: rgba(0, 0, 0, 0.5)」
最终渲染出来你会发现变成了 「background-color: rgba(0, 0, 0, 0.498039)」。
阿西!这是什么鬼?( ・᷄ὢ・᷅ ) ,别急下面慢慢揭开它的神秘面纱。
一、 故事背景
在与 @Justineo 聊到 CSS Alpha 百分比表示方式的时候,偶然发现 Chrome 里他的这个项目kolor 的背景色实际计算出来的 Alpha 值和指定的不一样。
这引起了我们的兴趣,一番探讨搜索后,做个简要总结,备忘。
二、概念
CSS Color 中阿尔法通道(α Channel 或 Alpha Channel)是指颜色的不透明度,而不是透明度。也就是说:
其中 32 位的颜色被分解成四个8位整数:
所以 Alpha 值在内部表示为介于0和255之间的一个整数(即8位无符号整数)。为了更加方便开发者使用,书写的时候我们采用 0-1 之间的浮点数来表示 Alpha 值。
三、 探索
那么我们看看 Chrome 中是如何计算出 0.5 的 Alpha 值的呢?
我们用
input
来表示输入 CSS 值中解析出来的字符串,A
代表最终的 Alpha 值,alphaString
来表示 CSS Color 中 Alpha 值的序列化结果:1 把 0.5 转换为8位无符号整数
2
alphaString
通过以下定义来计算这里alpha()的结果就是 A
然后 CSS Object Model (CSSOM) 规范中的
<number>
值规定最多取 6 位小数,最终反向序列化成字符串,得到你看到的 0.498039。这里 WebKit 偷懒了啊:
CSSOM 规范里的算法是这样说的:
所以有人提交了 Patch 来修复这个问题,使其反向序列号字符串的时候可以得到同样的值:
更多
特别鸣谢 @kyriosli 对 C++ 代码的帮助٩(๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅)و 。
更多讨论请移步知乎:http://www.zhihu.com/question/26248345/answer/45773454
The text was updated successfully, but these errors were encountered: