【发布时间】:2016-05-09 22:19:23
【问题描述】:
我为自己编写了一些使用这种标准语法的 mixin,它真的很有帮助。但是如果出现某个值,我想隐藏一些代码。
这是可行的(断点是假的,~"" 代码是默认告诉 LESS 编译为空):
// LESS MIXIN (CURRENT)
.margin(@lg: ~""; @md: ~""; @sm: ~""; @xs: ~""; @xxs: ~"") {
margin: @lg;
@media screen and (max-width: 1200px) {
margin: @md;
}
@media screen and (max-width: 800px) {
margin: @sm;
}
@media screen and (max-width: 600px) {
margin: @xs;
}
@media screen and (max-width: 400px) {
margin: @xxs;
}
}
可以这样实现
// LESS IMPLEMENTATION (CURRENT & EXPECTED)
div {
.margin(20px; ~""; 15px; ~""; 10px);
}
会像这样输出:
/* CSS OUTPUT (CURRENT) */
div {
margin: 20px;
}
@media screen and (max-width: 1200px) {
div {
margin: ;
}
}
@media screen and (max-width: 800px) {
div {
margin: 15px;
}
}
@media screen and (max-width: 600px) {
div {
margin: ;
}
}
@media screen and (max-width: 400px) {
div {
margin: 10px;
}
}
这很简单,让我不用为基本样式做大量的@media 断点。但我什至不想打印一个空的@media 行;我希望代码像这样编译:
/* CSS OUTPUT (DESIRED) */
div {
margin: 20px;
}
@media screen and (max-width: 800px) {
div {
margin: 15px;
}
}
@media screen and (max-width: 400px) {
div {
margin: 10px;
}
}
所以...我尝试了一些事情并找到了这个& when 代码here,但是当我在这里实现它时它似乎不起作用。这是我尝试过的:
// LESS MIXIN (FAILED ATTEMPT TO SMARTEN)
.margin(@lg: ~""; @md: ~""; @sm: ~""; @xs: ~""; @xxs: ~"") {
& when not (@lg = ~"") {
margin: @lg;
}
& when not (@md = ~"") {
@media screen and (max-width: 1200px) {
margin: @md;
}
}
& when not (@sm = ~"") {
@media screen and (max-width: 800px) {
margin: @sm;
}
}
& when not (@xs = ~"") {
@media screen and (max-width: 600px) {
margin: @xs;
}
}
& when not (@xxs = ~"") {
@media screen and (max-width: 400px) {
margin: @xxs;
}
}
}
任何人有任何想法来隐藏可以在 LESS 中工作的@media 代码吗?
【问题讨论】:
-
您尝试过的应该可以在最新的编译器中使用(尽管我会尝试使用循环来执行此操作)。
-
不确定在 SO 上下文中是否有一个好的答案,因为一旦我们意识到你不会重复你的
@media screen and (max-width: ***)every单一财产(不是吗?)。所以建议还是一如既往的:学习 mixins、模式匹配和列表。 -
@Harry 我不确定我们使用的是什么版本的编译器,但很高兴知道。
-
@seven-phases-max 不,不。不是所有的财产。只是边距和填充以及基本字体大小(字体大小是一个稍微不同的mixin结构,但想法是一样的)。这样我的基础结构很容易扫描。我正在努力学习,因此提出了这个问题。
-
那么讨论there 可能也是一个好的开始。