我正在尝试使用LESS(不喜欢SASS语法),并且一直在尝试找出使用它进行媒体查询的最佳方法。
我通过阅读本关于如何“做”媒体查询用更少的博客文章,但它指出了一个事实,即这会导致所有的媒体查询整个所得CSS进行分离和分散。这真的并没有打扰我(我不太关心结果,而更多地关心它的工作)。令我困扰的是一条评论,其中提到了从iOS设备查看内容时遇到的问题,评论者发现,媒体查询一经整合,问题便得以解决。
有没有人找到在LESS中使用媒体查询的好解决方案?
我监督这项工作的方式就像…
//Have an overall structure... .overall(){ //Have ALL your CSS that would be modified by media queries and heavily use //variables that are set inside of each media queries. } @media only screen and (min-width: 1024px){ //Define variables for this media query (widths/etc) .overall }
我知道这可能会有一些问题,但是当前的设置似乎没有那么大的益处。
所以我想我的问题是,是否有任何好的解决方案/黑客手段可以进行分组媒体查询?
(以防万一,我使用无点作为引擎来解析我的.less文件)
.less
首先,您在问题中给出的解决方案肯定对此有所帮助。
但是我想到的一件事是,最好将所有媒体查询变量都定义为“彼此相邻”(您的解决方案是在每个媒体查询调用下都包含它们)。因此,我提出以下方案作为替代解决方案。它也有缺点,其中一个可能是需要提前编码。
LESS代码
//define our break points as variables @mediaBreak1: 800px; @mediaBreak2: 1024px; @mediaBreak3: 1280px; //this mixin builds the entire media query based on the break number .buildMediaQuery(@min) { @media only screen and (min-width: @min) { //define a variable output mixin for a class included in the query .myClass1(@color) { .myClass1 { color: @color; } } //define a builder guarded mixin for each break point of the query //in these is where we change the variable for the media break (here, color) .buildMyClass1() when (@min = @mediaBreak1) { .myClass1(red); } .buildMyClass1() when (@min = @mediaBreak2) { .myClass1(green); } .buildMyClass1() when (@min = @mediaBreak3) { .myClass1(blue); } //call the builder mixin .buildMyClass1(); //define a variable output mixin for a nested selector included in the query .mySelector1(@fontSize) { section { width: (@min - 40); margin: 0 auto; a { font-size: @fontSize; } } } //Again, define a builder guarded mixin for each break point of the query //in these is where we change the variable for the media break (here, font-size) .buildMySelector1() when (@min = @mediaBreak1) { .mySelector1(10px); } .buildMySelector1() when (@min = @mediaBreak2) { .mySelector1(12px); } .buildMySelector1() when (@min = @mediaBreak3) { .mySelector1(14px); } //call the builder mixin .buildMySelector1(); //ect., ect., etc. for as many parts needed in the media queries. } } //call our code to build the queries .buildMediaQuery(@mediaBreak1); .buildMediaQuery(@mediaBreak2); .buildMediaQuery(@mediaBreak3);
CSS输出
@media only screen and (min-width: 800px) { .myClass1 { color: #ff0000; } section { width: 760px; margin: 0 auto; } section a { font-size: 10px; } } @media only screen and (min-width: 1024px) { .myClass1 { color: #008000; } section { width: 984px; margin: 0 auto; } section a { font-size: 12px; } } @media only screen and (min-width: 1280px) { .myClass1 { color: #0000ff; } section { width: 1240px; margin: 0 auto; } section a { font-size: 14px; } }