CSS中calc()的结果是啥

Posted

技术标签:

【中文标题】CSS中calc()的结果是啥【英文标题】:What Is Result Of calc() In CSSCSS中calc()的结果是什么 【发布时间】:2015-04-27 06:15:55 【问题描述】:

我们现在已经开始在 css 中使用 calc() 来设置计算结果的宽度。 例如:

<div id='parent'>
<div id='calcWidth'></div>
</div>


   #parent
           width:100px;
           
   #calcWidth
            width:calc(100% - 3px);
            height:100px;
            background:red;
           

我知道calc() 是如何工作的,但我只想知道css 中返回的内容,而不是上面给出的示例中的calc(100% - 3px);

我的困惑是什么?

在上面的例子中width:calc(100% - 3px);

100%的宽度实际上是100px,这将在运行时由css确定。

所以计算出来的宽度将是100px-3px=97px 97px 如果你把它转换成% 97% 对吧?

但是现在,有两种可能

返回97px,设置为宽度。

返回97%,设置为宽度。

我的问题是:

现在在这两种情况下,宽度都应设置为97px,但是什么是 作为width:calc(100% - 3px);97px97% 的结果返回?

你也可以看到这个小提琴: http://jsfiddle.net/8yspnuuw/1/

编辑:请阅读

见朋友:举个简单的例子:

 <div class='parent'>
    <div class='child'>
    </div>
    </div>

.parent
width:200px;

 .child
  width:20%
  

我知道渲染时 child 的宽度将变为 160 px。 好的!但这不是css中设置的内容吗? css 将其设置为 %,它是 只是以像素为单位渲染。

同样,使用 calc,它会返回 % 还是 pixel

或者为了解释我的问题,阅读BoltClocks answer,计算值是什么,(而不是使用值,我知道是以像素为单位的)

【问题讨论】:

您可以使用 FireBug 查看计算的样式,或者使用控制台自己运行 getComputedStyle:developer.mozilla.org/en-US/docs/Web/API/Window/… 并进行测试:) 有趣的问题+1 鉴于最终结果始终以像素为单位,为什么calc() 的返回值的具体格式很重要?我猜它总是以像素为单位,因为这是每个计算的长度值最终被分配/渲染的,但我不确定。 嘿,为什么是反对票 【参考方案1】:

spec 并没有非常严格地定义 calc() 表达式的计算值是什么,但它确实表明百分比永远不会作为计算值的一部分计算。这个值是如何表示的留作实现细节。

如果您看到的是像素长度而不是百分比,那么该长度是使用值,而不是计算值,因为像素值只能在计算任何百分比和布局元素之后确定.

请注意,getComputedStyle() 可能返回与“计算值”的 CSS 定义不一致的结果。这是 90 年代浏览器自行其是的众多不幸后果之一。

【讨论】:

那么这是否意味着像素是由 calc 设置的? @Naeem Shaikh:像素值用于渲染(因此是“使用值”)。【参考方案2】:

渲染的宽度以像素为单位。

【讨论】:

我知道它是以像素为单位呈现的:您阅读了我的问题现在在这两种情况下,宽度都应设置为 97px,但由于 cals 返回的是我的问题 它返回一个函数,将值渲染成像素。为什么这很重要?【参考方案3】:

无论 calcWidth div 的像素大小是多少,值 3 都会从它减小。例如,如果 parent 的宽度为 200,则 calcWidth div 的宽度将为 197px。所以它是 px 而不是 %

Demo

 document.getElementById('calcWidth').offsetWidth;

【讨论】:

我真的不同意这是错误的猜测.. 尝试设置属性,宽度只能以 px 为单位,例如 box-shadow 我明白你在说什么.. 但我想我的问题有点难以理解.. 请阅读我编辑的问题 @NaeemShaikh calc() 使用 % 但是 chrome 中的计算样式显示渲染值以像素为单位..所以我想这就是 BoltClock 在他的回答中提到的答案..cheers 幸运请看我的回答,我想你能理解,我现在在想什么【参考方案4】:

CSS 不支持动态值(除了简单的百分比值,如width: 100%;)。这意味着calc() 中的100% 最初会转换一次为px,而不是连续转换。

这已经回答了你的问题。 %-value 被转换为 px 最终得到 97px。您可以通过window.getComputedStyle() 或截屏并测量来确认。

【讨论】:

【参考方案5】:

calc() 没有计算值;它发生在渲染时——这就是你可以混合单位的原因。

【讨论】:

以上是关于CSS中calc()的结果是啥的主要内容,如果未能解决你的问题,请参考以下文章

css3 calc()

CSS calc()函数

有没有办法从 CSS 中的 calc 函数中删除单位

css calc - 以小数点后两位向下取整

LibreOffice Calc 在单元格中显示公式而不是结果

内存分配失败:如何将四个结果集合并到一张表中