CSS本机变量在媒体查询中不起作用

新手上路,请多包涵

我正在尝试在媒体查询中使用 CSS 变量,但它不起作用。

 :root {
  --mobile-breakpoint: 642px;
}

@media (max-width: var(--mobile-breakpoint)) {

}

原文由 user7122183 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

规格

var() 函数可用于代替元素上任何属性中值的任何部分。 var() 函数不能用作属性名称、选择器或除属性值之外的任何其他内容。 (这样做通常会产生无效的语法,或者其含义与变量无关的值。)

所以不,你不能在媒体查询中使用它。

这是有道理的。因为您可以设置 --mobile-breakpoint 例如为 :root ,即 <html> 元素,并从那里继承到其他元素。但是媒体查询不是一个元素,它不继承自 <html> ,所以它不能工作。

这不是 CSS 变量试图完成的任务。您可以改用 CSS 预处理器。

原文由 Oriol 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如 Oriol 所回答 的那样, CSS 变量级别 1 的 var() 目前不能用于媒体查询。然而,最近的发展将解决这个问题。 一旦 CSS 环境变量模块级别 1 被标准化和实施,我们将能够在所有现代浏览器的媒体查询中使用 env() 变量。

CSS 工作组 (CSSWG) 编纂了 env() 新标准(目前处于草案阶段): CSS 环境变量模块级别 1 (请参阅 此 GitHub 评论此评论 以获取更多信息)。草案将媒体查询中的变量作为一个明确的用例:

因为环境变量不依赖于从特定元素提取的任何值,所以它们可以用在没有明显元素可提取的地方,例如 @media 规则,其中 var() 函数无效。

如果您阅读规范并有疑虑,或者如果您想表达您对媒体查询用例的支持,您可以在 问题#2627问题#3578任何标有“css”的 CSS GitHub 问题 中这样做 -env-1”

GitHub 问题 #2627GitHub 问题 #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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题