我正在尝试在媒体查询中使用 CSS 变量,但它不起作用。
:root {
--mobile-breakpoint: 642px;
}
@media (max-width: var(--mobile-breakpoint)) {
}
原文由 user7122183 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在尝试在媒体查询中使用 CSS 变量,但它不起作用。
:root {
--mobile-breakpoint: 642px;
}
@media (max-width: var(--mobile-breakpoint)) {
}
原文由 user7122183 发布,翻译遵循 CC BY-SA 4.0 许可协议
正如 Oriol 所回答 的那样, CSS 变量级别 1 的 var()
目前不能用于媒体查询。然而,最近的发展将解决这个问题。 一旦 CSS 环境变量模块级别 1 被标准化和实施,我们将能够在所有现代浏览器的媒体查询中使用 env()
变量。
CSS 工作组 (CSSWG) 编纂了 env()
新标准(目前处于草案阶段): CSS 环境变量模块级别 1 (请参阅 此 GitHub 评论 和 此评论 以获取更多信息)。草案将媒体查询中的变量作为一个明确的用例:
因为环境变量不依赖于从特定元素提取的任何值,所以它们可以用在没有明显元素可提取的地方,例如
@media
规则,其中var()
函数无效。
如果您阅读规范并有疑虑,或者如果您想表达您对媒体查询用例的支持,您可以在 问题#2627 、 问题#3578 或 任何标有“css”的 CSS GitHub 问题 中这样做 -env-1” 。
GitHub 问题 #2627 和 GitHub 问题 #3578 专门讨论媒体查询中的自定义环境变量。
来自 2017-11-09 的原始答案:最近, CSS 工作组决定 CSS Variables Level 2 将支持使用 env()
的用户定义环境变量,他们将尝试使它们在媒体查询中有效。 在 Apple 首次提出标准用户代理属性 后,该小组在 2017 年 9 月正式发布 iPhone X 之前不久解决了这个问题(另请参阅 WebKit:Timothy Horton 的“为 iPhone X 设计网站” )。其他浏览器代表随后同意它们通常可用于许多设备,例如电视显示器和带有出血边缘的墨水打印。 ( env()
过去称为 constant()
,但现在已弃用。您可能仍会看到引用旧名称的文章,例如 Peter-Paul Koch 的这篇文章。)几周后, Mozilla 的 Cameron McCormack 意识到 这些环境变量可用于媒体查询,而 Google 的 Tab Atkins, Jr. 随后意识到 用户定义的环境变量将特别有用,因为全局的、不可覆盖的根变量可用在媒体查询中。现在, Apple 的 Dean “Dino” Jackson 将与 Atkins 一起编辑 Level 2。
您可以在 w3c/csswg-drafts
GitHub 问题 #1693 中订阅有关此事的更新(有关特别相关的历史详细信息,请展开 CSSWG 会议机器人决议 中嵌入的会议日志并搜索“MQ”,它代表“媒体”查询”)。
原文由 jschoi 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答913 阅读✓ 已解决
3 回答816 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答2.6k 阅读
1 回答1.1k 阅读✓ 已解决
从 规格,
所以不,你不能在媒体查询中使用它。
这是有道理的。因为您可以设置
--mobile-breakpoint
例如为:root
,即<html>
元素,并从那里继承到其他元素。但是媒体查询不是一个元素,它不继承自<html>
,所以它不能工作。这不是 CSS 变量试图完成的任务。您可以改用 CSS 预处理器。