LESS CSS在媒体查询中设置variables?

我正在研究一个特定于iPad的网站。 为了使我的网站在iPad和旧版本的iPad上都可以工作,我想在LESS CSS中设置一个variables,如下所示:

@media all and (max-width: 768px) { @ratio: 1; } @media all and (min-width: 769px) { @ratio: 2; } 

所以当你设置像素的东西,你可以做

 width: 100px * @ratio; 

但是我收到了一个编译错误,说没有定义@ratio。 有没有可能有一个解决方法,使其工作? 谢谢。

这将是很好,但这是不可能的。

LESS将您的媒体查询编译为实际媒体查询,因此在编译时没有指示哪个媒体查询与浏览器相关。

编译之后,你只需要CSS就可以了,所以你不能再有variables了。

你可以这样做,但它不是那么优雅:

 @base_width: 100px; @media all and (max-width: 768px) { .something { width: @base_width; } } @media all and (min-width: 769px) { .something { width: @base_width * 2; } } 

我知道我迟到了,但有人可能会觉得这很有用。

您可以将样式移动到单独的文件中

 // styles.less .foo { width: 100px * @ratio; } 

然后在更改variables值之后多次导入文件

 // main.less @ratio: 1; // initial value @media all and (max-width: 768px) { @ratio: 1; @import (multiple) "styles"; } @media all and (min-width: 769px) { @ratio: 2; @import (multiple) "styles"; } 

请注意(多)在这里很重要

编译的代码将如下所示

 // main.css @media all and (max-width: 768px) { .foo { width: 100px; } } @media all and (min-width: 769px) { .foo { width: 200px; } } 

这是一个有点hackish,但一个可能的解决scheme是设置一个包装元素的字体大小,并将所有单位设置为em

HTML:

 <div id="wrap"> <div class="child1"></div> <div class="child2"></div> </div> 

减:

 #wrap { font-size: 100px; width: 10em; // = 1000px; @media all and (max-width: 768px) { font-size: 60px; } .child1 { width: 5em; // 500px normally, 300px on small screens } .child1 { width: 2.5em; // 250px normally, 150px on small screens } } 

如果你有包含文本和子元素的元素,这当然是行不通的。

LESS目前无法做到这一点,尽pipe在技术上可行。 这个function已经在GitHub的一个题为“ 媒体查询中variables较less”的问题中被请求。

另请参阅以下问题: 可以在@media查询中定义variables的CSS预处理器

我发现接受的解决scheme不工作,因为编译器会抱怨mixin没有定义。 另一种解决scheme:

 @base_width: 100px; .mixin { width: @base_width; @media all and (min-width: 769px) { width: @base_width * 2; } } 

less用我们可以为媒体查询定义variables。
首先检测iPad的分辨率:

 @iPad: ~"only screen and (min-width: 40.063em) and (max-width: 64em); 

这些是641px和1024px的em等价物。

现在检测高分辨率:

 @highResolution: ~"only screen and (-webkit-min-device-pixel-ratio: 1.5)", ~"only screen and (min--moz-device-pixel-ratio: 1.5)", ~"only screen and (-o-min-device-pixel-ratio: 3/2)", ~"only screen and (min-device-pixel-ratio: 1.5)"; 

现在我们可以在这样的媒体查询中结合这两个variables:

 @media @iPad, @highResolution{ .yourCssClass{} } 

这只会在具有视网膜显示(或类似的像素密度)的iPad(或类似的分辨率)上有效。