使用 css 变量(没有 SASS/LESS)设置媒体查询的最小/最大宽度?

Posted

技术标签:

【中文标题】使用 css 变量(没有 SASS/LESS)设置媒体查询的最小/最大宽度?【英文标题】:Setting the min/max width of a media query with css variables (without SASS/LESS)? 【发布时间】:2020-07-04 15:54:24 【问题描述】:

我正在为自己开发一个新的入门主题。在其中,我有许多我希望在整个主题中使用的断点。我不想为每个单独的媒体查询管理断点,而是想将 CSS 变量设置为断点像素值并调用媒体查询中的变量。以下是(理想情况下)如何工作的示例

:root 
  --medium: 1024px;


p 
  color: black;


@media screen and ( min-width: var(--medium) ) 
  p 
    color: red;
  
<p>Text I want to be red in screens larger than 1024px.</p>

遗憾的是,这种逻辑在常规 CSS/CSS3 中不起作用。有没有人熟悉创建一个点的方法,我可以在不使用预处理器的情况下调整整个主题的媒体查询断点?提前致谢!

【问题讨论】:

您不能在媒体查询中使用 var()。参考:***.com/questions/40722882/… 【参考方案1】:

您可以使用matchMedia 完成此操作。

我给出了一个用法示例in this answer。

【讨论】:

【参考方案2】:

正如@rangerz 上面提到的,这目前是不可能的。

我已经开始在所有标有注释的 CSS 文件中添加媒体查询中的实际值:

:root 
    --breakpoint-md-max: 767.98px /*var(--breakpoint-md-max)*/;
    --breakpoint-md-min: 768px /*var(--breakpoint-md-min)*/;


@media (min-width: 768px /*var(--breakpoint-md-min)*/ ) 
    #body 
        background: green;
    

如果我需要更改这个“常量”值,这允许我进行全局替换。

另外,有一天,当支持 env() 时,我可以一次性消除这个难看的瑕疵。 :)

【讨论】:

caniuse.com 现在对 env() 有很好的支持,很好奇你是如何使用它们来解决这个问题的?

以上是关于使用 css 变量(没有 SASS/LESS)设置媒体查询的最小/最大宽度?的主要内容,如果未能解决你的问题,请参考以下文章

517,sytlus/sass/less的区别

按元素、功能和媒体查询构建 CSS(SASS、LESS)文件:3D 代码结构? [关闭]

如何为WebStorm设置SASS的File Watchers?

Facebook 重构:抛弃 Sass / Less ,迎接原子化 CSS 时代

花了两天时间学习了 sass, less, stylus的基本语法和简单使用, 谈谈感受.

CSS 即将支持嵌套,SASS/LESS 等预处理器已无用武之地?