@media screen and (max-width: calc(2000px-1px)) {
.col { width: 200px; }
}
减法后的值应该是1999px
,但它似乎不起作用。如果我手动更改为1999px
,它就可以正常工作,所以我知道这不是我的CSS的问题。 calc
在媒体查询中不受支持,还是我做错了什么?
@media screen and (max-width: calc(2000px-1px)) {
.col { width: 200px; }
}
减法后的值应该是1999px
,但它似乎不起作用。如果我手动更改为1999px
,它就可以正常工作,所以我知道这不是我的CSS的问题。 calc
在媒体查询中不受支持,还是我做错了什么?
2022年3月21日再次编辑答案:
在当前版本的规范中,使用calc(或var)在媒体查询中不受规范支持(正如下面TylerH指出的那样)。
属性有时可以接受复杂的值,例如涉及多个其他值的计算。媒体特性*仅接受单个值:一个关键词、一个数字等。
* 媒体特性包括 (max-width: ...)
(或 (... < width < ...)
)。
旧的规范从2012年开始就明确提到了没有calc。
问题发布者的问题肯定会出错,因为计算需要运算符之间的空格calc(2000px - 1px)
,但即使有空格,也不应该期望或相信它能可靠地工作。
支持calc的浏览器实际上并没有遵循规范。
2018年2月13日编辑答案:
在规范中支持在媒体查询中使用 calc
,但是只有最近(2018年2月)浏览器才实现了支持。目前,calc
在媒体查询中得到Safari Technology Preview 49+、Chrome 66+和Firefox 59+的支持。有关最新信息,请参见MDN的 calc()
页面。
@media screen and (max-width: calc(2000px - 1px)){...}
对我来说完全正常。关键是 -
之间的空格,这样它就知道 -1px
和 - 1px
(负值与要减去的值)之间的区别。 - mix3d支持在媒体查询中使用calc()
的浏览器因版本而异,然而混合单位(例如同时使用em和px)的使用当前受到限制或没有支持。请查看此JSFiddle(测试了4个当前浏览器 - Chrome 80.0.3987.163、Opera 67.0.3575.115、Firefox 74.0.1和Microsoft Edge 44.18362.449.0)进行验证。
例如,这些媒体查询对于某些浏览器是有效的(Chrome 80.0.3987.163、Opera 67.0.3575.115和Firefox 74.0.1,但不适用于Microsoft Edge 44.18362.449.0)
@media (min-width:calc(2em - 1em)) { div { color: green } } // valid
@media (min-width:calc(2px - 1px)) { div { color: green } } // valid
而这个媒体查询只在Firefox 74.0.1中有效。
@media (min-width:calc(1em - 1px)) { div { color: green } } // different units are "mixed" in same calc() -----> invalid except Firefox
2020年12月更新:calc-sums操作的其他函数(即执行一个或多个操作的函数)也可以在媒体查询中使用。这个JSFiddle演示了比较函数max()
,min()
和clamp()
的实用性。目前,以下浏览器支持在媒体查询中使用这些函数:
然而,在每个比较函数中使用混合单位只有以下浏览器支持(来自上述列表):
2000px-1px
将被视为单个值,显然不是有效的单位。应该是2000px - 1px
。这个功能涉及到两个相关的规范:
媒体查询规范指定了一些条件(例如width
)可以具有数字值。
从值规范中可以看出:
数学函数代表一个数字值,可以在任何需要此类值的地方使用。
这两者结合起来肯定要求浏览器实现媒体特性值中的calc()
和其他内容。
MDN也跟踪了这一点:https://developer.mozilla.org/en-US/docs/Web/CSS/@media#browser_compatibility
今天所有浏览器都支持calc
。
然而,一些子功能可能支持不佳。例如,aspect-ratio
对calc()
的支持存在混合情况,因为其基础类型不支持浮点值。这样的怪异现象可能会使人们认为calc()
不稳定,即使其他问题是导致此现象的原因。
IE11(截至2020年10月)不支持使用calc()的媒体查询。
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Media query</title>
<style>
body {
background-color: powderblue;
}
@media screen and (min-width: calc(700px + 1px)) {
body {
background-color: yellow;
}
}
</style>
</head>
<body>
</body>
</html>
calc
,所以我猜它是不被允许的。 - Marc Bcalc
在媒体查询中似乎无法正常工作。很遗憾.. =[ - corysimmons