断言
浏览器旨在处理浮点数和小于一像素的值。
去看一个简单的例子 http://jsfiddle.net/2hhdm/显示浏览器在计算中使用浮点数,创建一个 3% 宽度的项目,并在调整大小时在 Chrome 开发人员工具中查看其计算属性。
你应该看到这样的东西:
“35.296875”无法通过将一个像素映射到物理显示器(CRT、传统 LCD)中的一个像素的显示器来精确渲染。然而,较新的高密度显示器使用与 1-1 不同的比率,并且该分数值在概念上可用于提供更高的精度。
即使在低密度显示器上,小数值也可以提供提示亚像素渲染 http://en.wikipedia.org/wiki/Subpixel_rendering,它使用像素的红色、绿色和蓝色分量使对象的边缘看起来比整个像素值更平滑。
但确切地说what浏览器将如何处理这些数字是不太可预测的。您(目前)无法要求浏览器制作一个 31.5px 宽的框并期望获得一致甚至有意义的结果。有些浏览器会截断小数值;其他人向上/向下舍入。
子像素渲染通常用于文本,并且在大多数/所有浏览器中都能很好地工作,但每个浏览器的实现方式都不同,开发人员几乎无法影响其工作方式。
When
非整数值在继承中的哪个阶段进行四舍五入
链?
大多数/所有计算均以浮点数执行,任何舍入可能会在过程后期发生,甚至超出浏览器的控制范围。例如,浏览器可以将其抗锯齿功能委托给操作系统组件(例如IE9 对 Windows Direct2D 和 DirectWrite 的影响 http://blogs.msdn.com/b/ie/archive/2010/11/03/sub-pixel-fonts-in-ie9.aspx).
CSS 转换可以与操作系统和/或硬件加速紧密集成。这是另一种情况,我认为浮点值很可能被浏览器保留并传递到底层。
舍入行为/错误
当容器的子级具有非整数维度时,是否会出现
曾经有过这样的情况:孩子的长度或高度的总和不
等于父元素的内部宽度/高度?
我在旧版浏览器(IE7)中看到了这一点,这是百分比计算的结果,其中50% + 50% > 100%
。通常,除非您尝试做更复杂的事情,否则这不是问题。有趣的是,当我尝试将 HTML 元素作为动画的一部分进行精确对齐时,我发现了“相差一个像素”的错误。
百分比与其他单位
提供的非整数维度的处理方式是否与
基于百分比的维度的非整数结果?
它们是四舍五入到最接近的整数,还是截断它们?
它有所不同。这个较旧的答案 https://stackoverflow.com/questions/4308989/are-the-decimal-places-in-a-css-width-respected声明它们被截断,但是(在 Chrome 24 中)我看到舍入(注意示例小提琴)。请注意我之前关于同一台计算机上 Chrome 和 Safari 之间差异的评论。
填充和边距的非整数值怎么样?
相同的规则(或缺乏规则)似乎也适用。
标准
我还没有找到在所有情况下如何处理浮点值的标准定义。这最接近的相关规格 http://www.whatwg.org/specs/web-apps/current-work/#pixel-manipulation我可以找到有关的讨论canvas
pixels:
当指定的坐标不正确时像素舍入的处理
精确映射到设备坐标空间不是由此定义的
规范,但以下必须导致不可见
渲染更改:[...条件列表...]
再说一遍,这是专门讨论的部分canvas
,但它确实暗示了:
- 浏览器绝对与分数像素交互。
- 实际实施情况会有所不同。
- 确实存在一些标准化。
- 映射到设备的显示屏可能会影响计算。