我正在一个iPad专用网站上。 为了使双方的Retina显示屏的iPad和旧版本的iPad的在我的网站的工作,我想设置一个变量在像媒体查询LESS CSS:
@media all and (max-width: 768px) {
@ratio: 1;
}
@media all and (min-width: 769px) {
@ratio: 2;
}
所以,当你正在设置在像素任何东西,你可以做
width: 100px * @ratio;
但我得到一个编译错误说@ratio没有定义。 是否有可能有一种变通方法,使工作? 谢谢。
这将是很好,但是这是不可能做到这样。
LESS编译你的媒体查询到实际的媒体查询,所以在编译时没有迹象表明这些媒体查询将有关浏览器。
编译的时候,你只需要CSS不小后,所以你不能有变数了。
你可以做到这一点,而不是,但它并不像优雅:
@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;
}
然后导入文件多次改变变量的值之后
// 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,但一个可能的解决方案是设置字体大小的包装元素,并将各单位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目前还无法做到这一点,尽管这在技术上是可行为它做它。 此功能已被要求在题为GitHub的问题在媒体查询不到变量 。
又见这个问题: CSS预处理器的可能性,以在@media查询定义变量
对于那些谁可能允许配套比较现代的浏览器只器(Chrome 49+,FF 31+,没有IE浏览器),你可以使用CSS变量来代替。
这里是从“我可以使用”浏览器支持表。
html {
--width-var: 300px;
@media only screen and (max-width: 750px) {
--width-var: 200px;
}
}
.your-class {
max-width: calc( var(--width-var) * 2 );
.... // tons of other props
}
与上面的代码,每当屏越来越小于750px, max-width
从属性.your-class
被重新计算(因为--width-var
被改变),以及当然,当屏幕的尺寸调整为更大的- CSS可变回来其原始值。
我发现接受的解决方案无法工作,因为没有定义,编译器会抱怨的混入。 另一种解决方案:
@base_width: 100px;
.mixin {
width: @base_width;
@media all and (min-width: 769px) {
width: @base_width * 2;
}
}
用量少,我们可以定义为媒体查询变量。
首先是检测的iPad分辨率:
@iPad: ~"only screen and (min-width: 40.063em) and (max-width: 64em);
这些都是EM相当于641px和1,024像素。
现在,检测分辨率高:
@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)";
现在,我们可以在这样的媒体查询结合这2个变量:
@media @iPad, @highResolution{ .yourCssClass{} }
这将是有效的只是在iPad(或类似的分辨率)与视网膜显示器(或相似的像素密度)。