- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
最近,我重写了我正在制作的网站的 CSS 文件,并尝试使用 em 而不是 px 使大多数元素和字体的大小动态变化。尺寸可行……有点,但至少有一个问题。
当使用 em 单位作为框的边距(边距:0.25em)时,在 Firefox 中,我在顶部/左侧得到 4px,在右侧/底部得到 3px - 基于 14px 字体大小(实际上是框的字体大小为浏览器的 16px 的 0.875em)。
现在,我是 em 的新手,很可能我误解了几件事,但根据我的理解,我认为 14px 的 0.25em 是 3.5px。如果是这种情况,并且四舍五入是边距中 4 或 3 个像素的原因,那么它真的应该如何工作吗?具有四舍五入结果的特定计算应该每次都以完全相同的方式进行四舍五入,不是吗?此外,在 Internet Explorer 中,它恰恰相反:顶部/左侧为 3px,右侧/底部为 4px。我尝试将值更改为 0.286em(x 14px -> 4.004px)以避免恰好半个像素结束,这在 Firefox 中结果为 4/4/4/4,但在 IE 中结果为 4/3/4/3。
除了这些像素错误,更改浏览器字体大小实际上可以很好地缩放所有内容。
我是不是疯了,我是不是误解了什么,两个浏览器都坏了还是……什么? (使用 IE8 和 FF3 和 19。)
最佳答案
浏览器有时可能会向上舍入某个值,而有时会向下舍入相同的值,因此在整个舍入操作中是均匀的。
最好的例子是缩放页面。页面通常在移动设备上缩放,但如果用户手动缩放页面,也可以在桌面浏览器上缩放。缩放页面时,以前是整数的 px
值现在是浮点值。同样,过去用于转换为 px
整数值的 em
或 %
值现在转换为浮点值。
为了使浏览器能够根据屏幕像素绘制元素的大小或位置,它必须将每个值四舍五入为整数。舍入只有在整体上均匀时才有效。
示例
假设您有 3 个 float div,每个 100px
,组合宽度为 300px
。该页面在移动设备上缩放为通常大小的 2/3。缩放后的 div 的组合宽度应为 200px
。
如果(大致)66.7px
对每个缩放的 div 进行四舍五入,则每个都将为 67px
,加起来为 201px
(1 太多)。如果每个 div 都向下舍入,则每个都是 66px
,加起来就是 198px
(2 太少了)。使大小加起来达到 200px
的唯一方法是四舍五入不一致(将其中两个向上舍入,将另一个向下舍入)。
当缩放应用到具有位置和大小值的绝对定位元素,或者应用到具有从 sprite 文件中获取的背景图像的元素时,缩放元素的四舍五入的任何不均匀性都会非常明显。
浏览器支持
我上次检查时,Firefox 是唯一能够有效缩放页面的浏览器,能够以正确的方式平衡四舍五入的值。其他浏览器可能会做一些这样的事情(并希望在这方面做得更好),但过去做得并不好。
这种方法 - 对于页面缩放非常有效 - 可能与您遇到的行为类型相同,尽管乍一看可能并不明显为什么会发生。
关于CSS: Em 舍入误差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15846033/
我在 ASP.NET MVC 中有一个发票页面。 我正在计算 GST。 在 javascript 中这是结果。 165.45 * 0.1 = 16.544999999999998 在 C# 中我得到
在 JavaScript 中,我想将其减少到小数点后 5 位。不过,我不能简单地四舍五入并得到 0.03085,我需要进一步查看数字并将所有数字向上舍入,以便得到 0.03086。 输入:0.0308
有人可以解释为什么 R 这样做吗?在整数值上舍入最大值和最小值似乎非常有缺陷。 summary(1:1283932) Min. 1st Qu. Median Mean 3rd Qu.
所以基本上我正在做一个物理实验,在我的表格中,我希望我的数据四舍五入到与误差相同的精度,四舍五入为 1 sig fig。 例如,如果我有以下内容: angle signif(c(1.111,2.22
考虑以下 C# 代码... double x = Math.Round(72.6d, 2, MidpointRounding.ToZero); double y = Math.Round(82.6d,
我正在学习 BigDecimal,我希望它检索我输入的确切数字,以下代码正在处理该数字,我不知道为什么 public static BigDecimal parseFromNumberString(S
double y1 = 0; double y2 = 0; double i = 0.025; double n = 2; double h1 = 2000; double h2 = 4000
所以在下面的一组代码中,出于某种原因我得到了完全错误的答案...... import java.util.*; import java.io.*; import java.lang.*; import
在 Python 中,我想将两个数字相除,如果答案不是整数,我希望将数字四舍五入为上面的数字。 例如 100/30 不是给 33.3 而是给 4。谁能建议如何做到这一点?谢谢。 最佳答案 您可以使用
我需要对一个 float 进行四舍五入。例如 4.00011 。内置函数 round() 总是在数字 > .5 时向上舍入,在 = 0 val *= 10 ** precision r
我的代码: // Convert SATOSHIS to BITCOIN static double SATOSHI2BTC(const uint64_t& value) {
我想让我的 tableView 看起来像这样: 我有问题。只有在我点击单元格后,我的右角才会变圆。当 View 出现时,它看起来像这样: 点击后像这样: 这是我的代码: extension UITab
这个问题在这里已经有了答案: Precision String Format Specifier In Swift (31 个答案) 关闭 8 年前。 除了覆盖当前转换为字符串的方法之外,是否有一种
>>> a = 0.3135 >>> print("%.3f" % a) 0.314 >>> a = 0.3125 >>> print("%.3f" % a) 0.312 >>> 我期待 0.313
我有自动将输入字段加在一起的 javascript 函数,但是添加像 1.35 + 1.35 + 1.35 这样的数字会得到 4.050000000000001 的输出,这只是一个例子。如何将总数四舍
这可能是 x86 FPU 专家的问题: 我正在尝试编写一个生成范围 [min,max] 内的随机浮点值的函数。问题是我的生成器算法(浮点 Mersenne Twister,如果你好奇的话)只返回 [1
我一定错过了一些明显的东西。 select CEILING(85/30) = 2 85/30 = 2.83333 我希望该值为 3。 CEILING 函数不应该为我取整吗? 最佳答案 尝试 SELEC
我有一个关于 eclipse rcp 中的 ctabfolders 的问题。我创建了一个 e4 RCP 应用程序,其中包含一个包含堆栈部分容器的窗口,其中包含一个堆栈。该堆栈包含 1 个部分。在这一部
Closed. This question needs details or clarity。它当前不接受答案。
我读过其他一些帖子,它们似乎对其他人有用,但当我尝试它们时,它们不起作用。我刚刚开始学习Java编程,我似乎不明白如何四舍五入。 我试过了 answer = input * input; answer
我是一名优秀的程序员,十分优秀!