Firefox 4:CSS3 calc()

本文介绍了 CSS3 的 calc() 值。此功能尚未在任何 Firefox 版本中上线,但正在进行实施工作

Firefox 将支持 CSS calc() 值,它允许您使用算术表达式计算长度值。这意味着您可以使用它来定义 div 的大小、边距的值、边框的宽度等等。

以下是一个如果没有 calc() 函数将很难设置的布局示例

/*
* Two divs aligned, split up by a 1em margin
*/
#a {
  width:75%;
  margin-right: 1em;
}
#b {
  width: -moz-calc(25% - 1em);
}

此示例确保输入文本字段不会与其父级重叠

input {
  padding:2px;
  border:1px solid black;
  display:block;
  width: -moz-calc(100% - 2 * 3px);
}

calc() 函数的一个特别强大的功能是您可以在同一个计算中组合不同的单位

width: -moz-calc(3px + 50%/3 - 3em + 1rem);

当前实现支持 + -*/modminmax 运算符。

我们还将支持 min()max() 函数,它们可以像这样使用

div {
  height: -moz-min(36pt, 2em);
  width: -moz-max(50%, 18px);
}

更多详细信息,请参阅

关于 Paul Rouget

Paul 是一位 Firefox 开发人员。

Paul Rouget 的更多文章…


112 条评论

  1. Gary van der Merwe

    天啊 - 这太棒了!!!!

    2010 年 6 月 10 日 05:39

  2. iGEL

    关于 -moz 前缀的一些问题
    1. 在哪个时间点会解释没有 -moz 前缀的 CSS3?
    2. 如果您这样做,您是否仍会解释带前缀的版本?
    3. 如果您解释两者,哪个声明会获胜?-moz 还是标准版本?
    4. 为什么您会解释像不透明度这样的某些 CSS 内容而无需前缀?

    在我看来,您应该尽快删除 -moz 前缀。如果您必须为多次声明内容(IE 过滤器、Mozilla、Webkit 和 Opera 的标准),这只会导致文件更大且出现错误。

    2010 年 6 月 10 日 05:48

    1. Dan

      -moz 前缀用于仍在开发中的 CSS 规范。

      2010 年 6 月 10 日 13:07

    2. djmichaelb

      天啊,我完全同意你的观点。为什么他们坚持使用 -moz 或 -webkit……他们当然可以直接实现原生版本,因为目前还没有其他人使用它?

      IE 实际上是否允许您使用其在 CSS 中的自定义编程标签来执行此操作?这很糟糕且臃肿,但其背后的理念相同。无论如何,我只能说太棒了,大约晚了 15 年,我想知道为什么花了这么长时间才解决这个问题?

      2010 年 6 月 10 日 15:32

    3. David

      它们遵循 CSS 的常规级联规则。

      如果您查看使用 border-radius 的大多数示例,您会发现它们首先指定特定于供应商的规则,然后移至标准的 border-radius 规则。如果浏览器支持,最后一个规则将覆盖之前的规则。否则,它将使用特定于供应商的规则。

      您希望在这里对宽度执行相同的操作,并为不支持 calc 的浏览器提供一个常规宽度规则,然后是特定于供应商的规则,最后是标准规则。

      2010 年 6 月 10 日 20:22

  3. Chemikk

    这是一个好消息!

    2010 年 6 月 10 日 05:49

  4. Nicholas Wilson

    我仅想指出,对于第一个示例,我们目前可以使用 box-sizing 非常轻松地做到这一点。将 #a 的宽度设置为 75%,#b 的宽度设置为 25%,将偏移量添加为边框或填充,然后使用 box-sizing: padding-box。这在 IE8、Fx1 等上现在就可以使用。不过,混合单位是一种新的功能,这将非常有用。

    2010 年 6 月 10 日 05:50

  5. Florent V.

    虽然这在 Web 浏览器中上线后会非常有用,但我希望提醒读者,大多数情况下您不需要此功能。对于大多数情况,都有解决方法。有时,解决方法实际上比使用 calc() 更简单,例如,在第二个示例中,您可以删除 `width` 属性,它将“正常工作”™。
    还有 `box-model` CSS3 属性,它已经拥有相对广泛的支持,并且在某些情况下可能是更好的解决方案。
    当然,这些都是受欢迎的补充。 :)

    2010 年 6 月 10 日 06:14

  6. Florent V.

    嗯,我的意思是 `box-sizing`,而不是 `box-model`,显然。^^

    2010 年 6 月 10 日 06:17

  7. Wladimir Palant

    我认为 Web 开发人员已经垂涎三尺了 :)

    iGEL:我不是 CSS 专家,但是
    1. 就我所知,相关规范必须进入“候选推荐”阶段,在此阶段预计不会进行重大更改。此外,Mozilla 的实现必须符合当前规范 - 在这一点上,可以删除前缀而不会损害互操作性。在此之前,它仍然是一个可能发生变化的功能。
    2. 一段时间肯定可以。然而,偶尔也会将其删除(我认为过去通常需要一两年时间)。
    3. 这两种形式都被视为相同,因此您的问题基本上归结为 - 如果 CSS 属性被指定了两次,哪个会获胜?就我所知:当前块中的最后一个。
    4. 不透明度是 CSS 3 颜色模块的一部分,该模块显然比 CSS3 值和单位模块更先进。在此之前,它很长一段时间都是 -moz-opacity,然后支持这两种形式 - 现在 IMO 不再支持 -moz-opacity。

    2010 年 6 月 10 日 06:38

  8. Marcio B D A

    哇!CSS 中的计算是我梦想成真!=O

    2010 年 6 月 10 日 06:47

  9. John Griffiths

    太酷了!

    非常好

    2010 年 6 月 10 日 07:47

  10. Eli Grey

    最重要的用途在 Firefox 4 中仍然无法实现,即使用 calc() 获取与 vh 和 vw 单位相关的测量值。请在 Firefox 4 中支持 vh 和 vw。

    2010 年 6 月 10 日 08:38

  11. [...] 活力四射的 Paul Rouget 向我们展示了具有错误的 CSS calc() 的优点 [...]

    2010 年 6 月 10 日 08:51

  12. Lachu

    CSS calc 比 IE 的 JavaScript 容器不那么邪恶。

    感谢 Mozilla!

    2010 年 6 月 10 日 09:07

  13. Lachu

    我认为,-moz-max 和 -moz-min 并不是邪恶的,它已经满足了 99%。

    2010 年 6 月 10 日 09:08

  14. Pieterv

    想要!!!

    自从我开始学习 CSS 以来,我一直对 CSS 中缺少此功能感到困惑。

    2010 年 6 月 10 日 09:14

  15. Ivan Enderlin

    大家好 :-),

    两件事
    * 是否可以组合这些函数,例如:witdh: -moz-max(-moz-calc(5% – 2.5em), -moz-calc(21px * 2))?
    * 函数 -moz-calc() 是否支持弹性盒模型,例如:width: -moz-calc(42px + 1fx)?

    谢谢 :-)。

    2010 年 6 月 10 日 09:49

  16. Ilia

    我现在就想要这个 :)
    这太酷了。

    2010 年 6 月 10 日 10:42

  17. J. Weir

    也许?

    #foo {
    width: 200px;
    }

    .bar {
    width : 50px;
    }

    .zoo {
    width: -moz-calc(#foo.width – .bar.width)
    }

    2010 年 6 月 10 日 10:59

    1. Lachu

      CSS 中的点表示对象的类。最好使用 ->

      2010 年 6 月 11 日 09:23

    2. T Rasmussen

      我想在 calc() 中看到类似这样的东西。

      像这样
      #foo { width:-moz-calc(500px – padding); }
      .bar { padding:2em; }
      这有 500px-4em 的宽度

      2010 年 7 月 19 日 07:07

  18. BTreeHugger

    终于。MS 的 CSS 表达式真正有用的唯一一件事。但是如何处理除以零的情况?

    2010 年 6 月 10 日 11:30

  19. Brian

    其他框的引用呢?#itemId.width?

    2010 年 6 月 10 日 11:56

    1. Chris

      是的,这将使它真正有用。

      2010 年 6 月 10 日 13:45

    2. Rasmus

      我赞同这一点。这太棒了!

      2010 年 6 月 10 日 14:31

    3. voracity

      如果它有效(并且运行顺畅),这将是天堂,但我猜实现起来相当复杂。

      2010 年 6 月 10 日 21:51

  20. Ms2ger

    Ivan:如果我没记错的话,您可以使用 width: -moz-max(5% – 2.5em, 21px * 2)。

    2010 年 6 月 10 日 12:18

  21. Alishah Novin

    对于那些不知道的人,IE5-7 在 CSS 中有表达式,您可以在其中提供 JavaScript

    table {
    position:absolute;
    top:0px;
    left:expression(document.body.clientWidth/2-oDiv.offsetWidth/2);
    }

    很高兴看到 Mozilla 开始实现数学表达式时,IE8 团队已决定弃用动态属性……

    (http://msdn.microsoft.com/en-us/library/ms537634(v=VS.85).aspx)

    2010 年 6 月 10 日 12:42

    1. Lachu

      是的,但表达式是 JS 表达式。将 Java/Ecma Script 表达式放入 CSS 中是一个非常糟糕且邪恶的想法。

      大多数用户都禁用了 JS 表达式,但在在此之前,Web 开发人员决定将外观-行为-内容分开。CSS 中的 JS 表达式是一个非常糟糕的想法。

      2010 年 6 月 11 日 09:31

  22. Davidmoreen

    这太酷了!

    2010 年 6 月 10 日 12:59

  23. Zach Bailey

    请直接实现 SCSS。如果没有能够定义可重用变量/常量,这些类型的操作对于除最简单的样式表之外的所有样式表几乎毫无用处。

    2010 年 6 月 10 日 13:21

  24. Herberth Amaral

    对此我只有一个词:CARALHO!(葡萄牙语中的“见鬼”,或“太棒了”)。

    2010 年 6 月 10 日 13:27

  25. Y-Love

    感谢您提供此功能。真是时候了 :)

    2010 年 6 月 10 日 13:59

  26. badanalogist

    @Ivan Enderlin,我的想法与此类似,但“反乌托邦”(:-D)——CSS 是新的客户端 Perl 吗?——在尝试弄清楚其他人写得如此隐晦的内容时,有太多方法会让人感到困惑?

    2010 年 6 月 10 日 14:00

  27. mario

    Netscape 的 JSSS 不是用于此目的吗?

    2010 年 6 月 10 日 14:21

  28. 匿名

    这将是很好的,特别是考虑到我正在键入此评论的文本框超出了它应该所在的棕褐色框。当然,我已经关闭了 JavaScript。

    2010 年 6 月 10 日 14:24

  29. Alex Penny

    我一直期待着这个!

    2010 年 6 月 10 日 14:40

  30. Thierry Koblentz

    能够在同一个计算中组合不同的单位非常酷。

    不过,我对这个示例有一个疑问

    input {
    padding:2px;
    border:1px solid black;
    display:block;
    width: -moz-calc(100% – 2 * 3px);
    }

    我理解宽度只是为了这个示例而存在的,但是 -moz-calc(100% – 2 * 3px) 呢?

    根据我对其工作原理的理解,我希望看到它这样写
    -moz-calc(100% – 6px)

    6px 是由 4px 内边距 + 2px 边框组成。

    或者我遗漏了什么?

    2010年6月10日 14:58

  31. 奥斯卡·戈德森

    难道只有我觉得这件事在 Firefox 中才刚刚被谈论起来很有趣吗?而 IE 早就有了?(阴影、渐变、不透明度等也是一样)。当然 IE 没有使用“规范”,但 Firefox 和 WebKit 在这些方面也没有。

    这真是讽刺…

    但这是一个很棒的想法,而且会非常有用。

    2010年6月10日 15:07

    1. 马格努斯·安德森

      Mozilla 使用了 CSS3 规范中指定的 calc() 属性,所以他们肯定是在遵循规范吧?

      2010年6月11日 01:44

    2. 马蒂亚斯·拉尔森

      不幸的是,你用 IE 滤镜做出的阴影看起来很糟糕,如果我没记错的话,IE 滤镜的不透明度对文字的反锯齿效果造成了很大的影响?

      “新的”Firefox 和 Webkit css 功能看起来确实不错。

      2010年6月11日 04:46

  32. [...] 文章:Firefox 4: CSS3 calc() ✩ Mozilla Hacks – Web 开发者博客 2010年6月10日 | 未分类 | 回溯 | del.icio.us | Stumble it! | 浏览量:0 下一篇 [...]

    2010年6月10日 15:22

  33. 马修·W

    类似的东西,但允许使用任意 JavaScript(CSS 表达式)在 IE 中已经存在很久了。它可能会导致一些严重的渲染速度下降和崩溃。

    希望 FF 的实现速度很快,并且不会让人们自己(或浏览器!)陷入困境。只允许使用有限的一组算术表达式是一个好的开始,尽管我很好奇是否可以通过使用矛盾的表达式或需要某种高复杂度的约束满足方法来解决的表达式来使渲染引擎陷入死循环。

    2010年6月10日 15:46

    1. 独立

      IE 总是崩溃的原因正是你提到的,并且将其归因于 CSS。这是错误的。“任意 JavaScript”和 CSS 没有任何共同之处。IE 如此糟糕是有原因的。

      CSS 链接只控制一件事,那就是焦点。JavaScript 通过它的邪恶本质只控制一件事,那就是焦点。

      2010年6月11日 02:24

  34. 不可脚本化

    哇。这是一个糟糕的想法。我的意思是,对于极少数需要它的用例,我有点喜欢它,但是我的天哪,CSS 新手创建紧密耦合的维护噩梦的可能性一下子提高到了一个新的水平。

    在 99% 的用例中,新手想要使用这个功能,最好是选择正确的盒子流和盒子大小,而不是硬编码邻居的度量,例如。

    2010年6月10日 16:49

    1. 马格努斯·安德森

      你在第二次故意写了 boobs 而不是 noobs 吗?;p

      2010年6月11日 04:00

  35. 苏曼斯·奈卢鲁

    我们终于在 CSS 中看到了计算功能,很高兴听到这个消息。

    2010年6月10日 17:42

  36. 埃里克·卡勒维格

    osm!

    2010年6月10日 17:49

  37. 乔治·索斯

    min 和 max 运算符

    除了 -moz-min 和 -moz-max 之外?

    2010年6月10日 18:10

  38. 霍瓦

    http://msdn.microsoft.com/en-us/library/ms537634(VS.85).aspx

    感觉就像我身处时间扭曲之中。

    2010年6月10日 19:17

  39. 罗布

    需要更多 jQuery。

    2010年6月10日 20:01

  40. 丹尼尔

    有一件事:‘mod’ 是如何定义的?我查看了链接的规范,但找不到关于它作用的任何定义。

    当语言有 mod 运算符但没有定义它的实际含义时,这会让我感到很烦躁。这通常会导致一些非常非常模糊的错误。

    2010年6月10日 20:16

    1. 乔什

      ‘mod’ 或 % 是编程中一个标准的运算符。它的行为在以下维基百科文章中进行了描述。

      http://en.wikipedia.org/wiki/Modulo_operator

      我还没有找到任何以其他方式执行它的编程语言。

      2010年6月11日 09:00

      1. 丹尼尔

        不,它*不是*标准的。这就是问题所在。你读过你链接的页面吗?

        ‘mod’ 基于‘模’,这是一种数学关系,它指出

        (a 除以 b 模 c) 意味着 (n*b + c = a) 对于某个整数 n

        编程中使用的‘mod’ 给定 a 和 b,返回 c 的值。

        第一个问题是存在*无限多个*满足此条件的函数。值得庆幸的是,几乎每个人都选择了两个这样的函数。它们是“截断除法”和“向下取整除法”。请注意,它们对相同的输入给出*不同的结果*。

        问题是*这两个*函数都被不同的语言称为‘mod’。因此,仅仅说“mod”实际上并不能告诉你“a mod b”是如何计算的。

        地狱,C(在 C99 之前)和 C++ *根本没有*指定它。根据我的记忆,在满足上述关系的情况下,你可以在这两个语言中从‘%’获得几乎任何结果,这将是有效的。

        所以,不,它*不是*标准的,并且*应该*被指定。如果没有,你只是打开了通往“实现定义”行为的大门,而这始终是处理起来的一场噩梦。

        2010年6月14日 22:54

        1. 乔什

          ‘mod’ 的字面意思是‘模’,也称为 % 符号。我链接的页面实际上指出,虽然内部表示可能有所不同,但数学和结果是相同的。不同的语言可能从分子或分母中获取符号,但数值结果完全相同。

          2010年6月15日 05:40

  41. 山姆·沃特金斯

    我发现 CSS 太复杂、有 bug、实现不一致且不足以进行布局,因此我继续使用表格进行大多数布局。它更简单,并且效果更好。

    2010年6月10日 20:26

  42. Thierry Koblentz

    好的,我将回答我自己的问题。
    -moz-calc(100% – 2 * 3px) 中使用的 3 个像素必须是 2px 内边距 + 1px 边框。
    比它应该有的复杂,但我同意它作为一个例子是完美的。

    2010年6月10日 21:50

  43. 克拉姆西

    一方面这是一个非常好的功能,但在许多情况下,它只是为一个有问题的 CSS 规范提供了变通方法。

    – 没有办法指定 100% 的含义。
    – 没有内部宽度和外部宽度。
    – …

    下一个尝试似乎不是修复这些问题,而是提供一个计算器来为你的自身计算正确的行为。

    2010年6月11日 00:18

  44. 拉塞尔·毕肖普

    这似乎是 CSS 的一项极好的发展;我之前在很多情况下都希望有这个功能,并且可能已经求助于使用一些 .js 代替了。

    迫不及待地想测试一下!

    2010年6月11日 02:11

  45. 弗雷德里克·德洛姆

    多么棒的功能!我花了多少时间来解决这种 CSS 设计问题!感谢 CSS3 和 Firefox4(以及 Moz 基金 :)

    2010年6月11日 02:41

  46. 马可·贾迪姆

    实际上克拉姆西,如果你使用 box-sizing: border-box; 或 -moz-box-sizing: border-box; 你根本不需要使用 calc,因为即使你应用了填充、边框等等,100% 也是父容器的 100% 宽度。

    2010年6月11日 03:26

  47. 罗布

    微软是否在 1998 年左右实现了类似的功能?

    2010年6月11日 03:30

  48. 山姆

    为什么总是使用 -moz – 这是 CSS3 吗?Webkit 也一样…我假设他们会称之为 -webkit-calc?!

    为什么我必须为 2 个浏览器编写 2 倍的 CSS?为什么不直接命名为 calc 呢,这样的事情应该全局化。不要误会我的意思,我非常喜欢这个想法,如果 CSS2 中存在这个功能,我今天实际上就可以使用它了。为什么不开始使用全局名称,一起达成协议呢?这是 CSS 唯一让我感到困扰的事情!

    2010年6月11日 04:33

    1. 马格努斯·安德森

      只要实现的属性要么在尚未达到“候选推荐”状态的规范中定义,要么是供应商专有的,浏览器就必须有前缀。这是 CSS 工作组的“法律”。

      2010年6月15日 01:32

      1. 琳达

        这本身可能就是一个 RFE,但我们能否有一种方法来“覆盖”对“moz-”前缀的需求?即,我们能否拥有类似于以下内容的东西?
        -mozdefine(calc, moz-calc)…
        这样我们现在就可以在我们的代码中编写‘calc’了——如果 calc 成为标准,我们就不需要更改我们的代码。如果它没有成为标准,也没有损失,因为我们要么必须坚持使用 moz-calc,要么必须从 moz-calc 更改为‘calculate’(或任何被接受的关键字)——但通过这种方式,如果 calc 获胜并且与 moz-calc 兼容——我们获胜——并且我们的代码可以正常工作。

        2010年6月18日 01:07

  49. El_Hoy

    Mozilla 会启用父选择器吗?…(意味着选择子元素的父 div)
    div < em # 选择所有包含 'em' 的 'div'。

    我想要它,而且我在论坛上见过它,是否有计划实现它?

    2010年6月11日 05:12

  50. 艾伦

    这到底是什么鬼东西?!??!!

    2010年6月11日 06:33

  51. 弗拉基米尔·卡雷尔

    我的 CSS 框架 Malo http://code.google.com/p/malo/ 可以绝对地使用这个新的酷炫功能!

    2010年6月11日 08:06

  52. 塔尼

    为什么使用 -moz- 前缀?这只会迫使开发人员两次包含 de calc():带前缀和不带前缀。是否有任何技术原因需要前缀?

    (我知道这对于 border-radius、box-shadow 和其他内容也适用,但这篇文章是关于 calc 的)

    2010年6月11日 08:08

    1. David

      因为 CSS3 还没有最终确定。在此期间,您可以使用供应商特定的实现。
      http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(CSS)#General_notes
      因此,是的,虽然该功能是实验性的,但你需要为每个供应商编写 css,然后在最后编写通用规则。如果浏览器支持通用规则,它将使用它,否则它将回退到它支持的供应商特定的规则。

      2010年6月14日 22:55

      1. 塔尼

        所以没有技术原因导致没有前缀不起作用;)

        2010年7月19日 23:49

        1. okonomiyaki3000

          为了更清楚地说明对供应商前缀的需求,请考虑(在规范最终确定之前)每个供应商可能支持某个给定功能的稍微不同的(竞争的)版本。每个供应商的版本可能具有不同的语法/行为/等。因此,如果没有供应商前缀,你通常无法编写使用这些“早期采用者”功能的代码,这些代码可以在多个浏览器中工作。权衡是,你需要编写几行额外的代码。

          如果你不喜欢这样做,你应该等到规范最终确定。

          2011年2月15日 21:56

    2. 马格努斯·安德森

      只要实现的属性要么在尚未达到“候选推荐”状态的规范中定义,要么是供应商专有的,浏览器就必须有前缀。这是“法律”。

      2010年6月15日 01:31

  53. Lachu

    你是否可以写明上述新闻是你博客的广告?

    以上评论是 Pingback 博客的广告。他们没有提供链接,但建议查看它。Pingback 建议查看这篇文章的翻译版本,该版本发布在知识共享署名许可下。

    抱歉我的英语不好。

    2010年6月11日 09:27

  54. HB

    不错,“表达式”的灵活性,没有性能问题(据推测,根据规范中的内容)。

    2010年6月11日 09:44

  55. 尼莫

    克拉姆西,box-sizing: border-box

    好吧,对于 Firefox 来说是 -moz-box-sizing。

    但这在所有情况下都没有帮助。

    2010年6月11日 11:03

  56. 卡罗尔

    http://tools.css3.info/selectors-test/test.html 根据此测试,到目前为止你只错过了 2 个测试,一个是
    :link 失败了 2 个测试中的 1 个
    和 ;visited 失败了 2 个测试中的 1 个。可能最好调查一下这些问题,因为它们可能非常小!

    2010年6月13日 08:07

    1. 马格努斯·安德森

      实际上,Firefox 很久以前就通过了所有这些测试。最近,修复了一个与 :link 和 :visited 相关的隐私问题,该问题破坏了测试内容。规范允许这样做,并且目前在 Gecko 和 Webkit 中都实现了。还有一个关于更新测试以允许此修补程序的错误报告:https://bugzilla.mozilla.org/show_bug.cgi?id=558569。到目前为止,作者还没有更改它。

      2010年6月13日 10:03

  57. [...] 原文:https://hacks.mozilla.ac.cn/2010/06/css3-calc/ [...]

    2010年6月14日 20:47

  58. @acarback

    不。别这么做。如果我们需要计算,我们应该在其他地方进行。

    2010年6月16日 09:50

    1. 鼓声隆隆

      那么谁需要 FF 中的这个垃圾?谁会在他的 css 中使用 calc?

      2010年6月18日 01:15

      1. 马格努斯·安德森

        我,以及许多其他人,正如你从阅读评论中可能看到的那样。如果你需要 100% – 10px 的高度,你会怎么做?

        2010年6月18日 02:04

        1. 鼓声隆隆

          你之前是如何进行这个计算的?
          跨浏览器兼容性并没有被取消。在正常支持 CSS3 之前,至少有 80% 的用户——你不会因为 FF 中存在这种可能性而感觉更好吗?我认为在 CSS 在 WEB KIT 上运行得更快之前,因为它的负载正在飞速增长。

          2010年6月18日 08:45

          1. 马格努斯·安德森

            我只理解了你帖子的一半,但对我来说,听起来你是在批评 Mozilla 在其他浏览器之前实现了这个功能。总得有人先来,其他人会跟上。

            2010年6月18日 08:51

          2. 鼓声隆隆

            不是的,但我不喜欢 -moz 前缀,它显然意味着这是一个内部标准,而不是常规标准。如果你先做一些事情——为将来的兼容性这样做。

            2010年6月18日 09:37

          3. 马格努斯·安德森

            我们不能一劳永逸地解决这个问题吗?CSS 属性必须有一个前缀,直到描述它的规范达到“候选推荐”状态,或者它是供应商专有的。Mozilla对此无能为力,这是 CSS 工作组做出的决定,必须予以尊重。你明白吗?

            2010年6月18日 09:51

  59. 鼓声隆隆

    它快吗?谁测试了这个特性(bug)?
    我的意思是,它比 JavaScript 快吗?

    2010年6月16日 22:14

    1. 马格努斯·安德森

      既然它是专门为这些计算而设计的,它应该是,是的。

      2010年6月18日 02:04

  60. Arnold

    这是第一个此类特性还是之前其他浏览器已经实现了?

    顺便说一句,感谢你的信息。

    2010年6月17日 05:53

    1. 马格努斯·安德森

      不。Firefox 是第一个支持它的浏览器,即使只是部分支持。

      2010年6月18日 02:02

      1. Ryan

        我不确定你是否在 IE9 部分实现之前就完成了你的更改?在支持 calc 的 IE9 或 FF4 中查看此演示 http://www.thecssninja.com/demo/css_calc/

        2010年7月19日 19:29

  61. Dan

    有趣的是,这来自 Mozilla。这些人告诉我们,我们应该尽可能少地使用 CSS 后代选择器,因为它们在 Firefox 中非常慢。所以,这应该很快,对吧?如果不是,请先加快基本内容的速度,谢谢。

    2010年6月18日 08:01

    1. 马格努斯·安德森

      我从未注意到它们会很慢。他们在哪里以及何时这样说的?

      2010年6月18日 08:47

      1. Dan

        例如,这里:https://mdn.org.cn/en/Writing_Efficient_CSS

        2010年6月18日 09:49

    2. Boris

      Dan,你误解了“高效 CSS”页面。

      与其他选择器相比,后代选择器在所有浏览器中都很慢。如果你希望你的 CSS 速度很快,你会避免使用它们。如果你不关心它是否快速,你就会使用它们。匹配它们在绝对意义上是很快的;当你有数千条样式规则时,问题就开始了。“高效 CSS”页面的目标受众(最初是 Firefox 浏览器 UI 开发人员)有那么多的规则。大多数网页没有,所以对他们来说,这个问题无关紧要。

      2010年6月24日 09:56

  62. tbx

    不错!这个库也带来了一些漂亮的 CSS 想法

    http://fadeyev.net/2010/06/19/lessjs-will-obsolete-css/

    2010年6月20日 04:25

  63. Witek

    -moz 前缀是必需的,因为 -moz-calc 目前可用,在 CSS3 最终确定之前。许多 Web 开发人员将开始使用它(我希望没有额外的没有“-moz-”前缀的规则),但是当 CSS3 和 calc() 标准化并最终确定时,calc(无前缀)很可能会有非常不同的规范。这意味着 -moz-calc 和最终确定后的 calc 将表示不同的含义。这就是为什么它需要,这也是为什么 Web 开发人员不应该同时使用这两个规则(直到没有最终的 calc 语句)的原因。无论如何,你只需检测 Web 浏览器并发送一个包含适当数据的 CSS 文件即可。但即使你知道它是 Firefox,你可能也希望发送 -moz-calc 和 calc,因为在 Firefox 4 中,它与例如在 Firefox 4.5 中会有些不同。

    你还可以使用 LESS 或 SASS 之类的东西,它不仅简化了此类重复规则(如果你真的、真的、真的需要,但你真的不需要),使用 mixin。它还添加了其他不错的功能,如嵌套、变量、函数。

    PS。CSS 的一个非常棒的开发。大约 5 年前,我想知道我是否可以编写 width: 100% – 20px;经过测试,它不起作用,我只是忘记了这个想法:) 谢谢。

    2010年6月22日 06:50

  64. 尼莫

    Dan,那篇文章的标题是
    为在 Mozilla UI 中使用而编写的有效 CSS

    你正在编写插件吗?

    2010年6月23日 18:46

  65. rene

    好吧,如果你也可以对颜色进行运算(如 sass 或 less),这将非常有用,就像这样

    @xvar: #333;
    color: -moz-calc(@xvar + #111);

    2010年7月7日 16:08

  66. Darrell Estabrook

    我对样式表中的计算没有问题,因为目的是得到一个我们本来会在静态情况下输入的值(如果我们能知道它的话)。

    我在 CSS3 中的问题是将交互层(即“过渡”、“动画”等)与表示层混合在一起。我们非常努力地将表示层与标记分开,为什么要再次弄乱它(尤其是在 jQuery 如此优雅且跨浏览器的情况下)?

    2010年7月8日 07:35

    1. Dan

      有人可能会争辩说,动画通常不仅仅用于花哨效果。

      它如何弄乱你的标记?CSS 放在自己的文件中,对吧?

      如果有什么不同的话,动画代码会弄乱你的应用程序逻辑。

      2010年7月10日 02:25

  67. Ant Gray

    这可以工作吗?↓

    calc(10% * 5%)

    使用它创建视差效果会容易得多。

    2010年7月11日 00:08

  68. […] CSS 特性与选择器,如 resize、any、calc 和 […]

    2010年8月12日 06:22

  69. Stevo

    很棒的功能,迫不及待地想要它成为标准。

    尝试平衡像素宽度边框和百分比宽度框非常痛苦,这应该会使事情变得更容易:-)

    2010年9月1日 07:54

  70. ivanhoe

    据 David Baron 称,没有计划支持 calc() 用于 background-position?!

    但是我相信支持 bg 位置也会非常酷,因为它会大大简化精灵的使用。它允许我们将精灵定位在易于阅读的偏移量处,例如 0、16px、2 * 16px、3 * 16px 等,这比使用预先计算的值更简洁且更容易更新(只需搜索和替换)。

    2010年9月6日 09:38

  71. Andy

    伙计们,https://bugzilla.mozilla.org/show_bug.cgi?id=363249#c83 的情况如何?它只是内部重新设计/重构的一部分的临时措施吗?

    2010年9月10日 03:46

  72. Andy

    更新:这是关于在 calc() 中删除 min() 和 max() 的相关 www-style 线程。

    http://lists.w3.org/Archives/Public/www-style/2010Sep/thread.html#msg233

    2010年9月10日 21:37

  73. […] Firefox 4:Mozilla Hacks 上的 CSS3 calc() 公告 […]

    2011年6月13日 15:36

  74. […] Firefox 4:CSS3 calc() […]

    2011年7月12日 10:16

  75. josi

    有人试过吗
    min-width: -moz-min(50px, -moz-max-content);
    我这样做是为了解决 iceweasel 的错误行为,并且当前的 Firefox 需要此行。

    2012年4月4日 00:38

  76. […] 阅读教程:Firefox 4:CSS3 calc() […]

    2012年4月14日 04:02

本文的评论已关闭。