提问人:Madara's Ghost 提问时间:3/12/2019 最后编辑:Ori LevitanMadara's Ghost 更新时间:3/12/2019 访问量:3709
如何在 Stylus 中使用多个变量断点进行媒体查询?
How can you use multiple variable breakpoints for media queries in Stylus?
问:
现状
我有以下手写笔代码
$mobile = '(max-width 767px)';
$tablet = '(min-width 768px) and (max-width: 1365px)';
$desktop = '(min-width: 1366px)';
.sidebar
width 300px;
@media $tablet
display none;
此代码运行良好 - 列出的屏幕尺寸的侧边栏会消失。
问题
现在,我还想让它在断点处消失。$mobile
理想情况下,我想要的是这样的:
$mobile = '(max-width 767px)';
$tablet = '(min-width 768px) and (max-width: 1365px)';
$desktop = '(min-width: 1366px)';
.sidebar
width 300px;
@media $tablet, $mobile
display none;
它会输出(或效果更好的东西)
.sidebar { width: 300px; }
@media (min-width: 768px) and (max-width: 1365px), (max-width: 767px) {
.sidebar { display: none; }
我试过什么
@media $tablet, $mobile
手写笔输出的结果@media $tablet, $mobile
@media '{$tablet}, {$mobile}
导致语法错误。@media join(',', $tablet, $mobile)
导致语法错误。
我能做什么但不想做什么
- 我可以设置一个违背目的的新断点(我不想进行所有组合)。
$mobileAndTablet
- 我可以始终在断点上使用它,同样,这不是我在这里寻找的(在这个例子中,我有 3 个断点,在其他情况下我可能有更多)。
display: none
display: block
$desktop
TL;博士
如何在触控笔中为多个断点使用多个变量?
Sass 具有此功能。我正在寻找类似的东西 Stylus 。@media #{$mobile}, #{$tablet}
答:
0赞
haim770
3/12/2019
#1
您可以使用 join()
函数预先生成所需的文字:
$media = join(',', $tablet $mobile);
然后使用它:
@media $media
display: none;
评论
0赞
Madara's Ghost
3/12/2019
谢谢你的回答!这类似于我说要避免的解决方案,如果我有 5 个断点,设置所有可能的组合会很痛苦。$mobileAndTable
1赞
Temani Afif
3/12/2019
#2
可能不是最好的解决方案,但您可以考虑通过编写如下代码来实现此目的:for
$mobile = '(max-width 767px)';
$tablet = '(min-width 768px) and (max-width: 1365px)';
$desktop ='(min-width: 1366px)';
.sidebar
width 300px;
for m in $mobile $tablet
@media m
display none;
您将得到以下输出:
.sidebar {
width: 300px;
}
@media (max-width: 767px) {
.sidebar {
display: none;
}
}
@media (min-width: 768px) and (max-width: 1365px) {
.sidebar {
display: none;
}
}
触笔代码在某种程度上是你想要的,但输出不会是单个媒体查询。
更新
这是避免媒体查询重复的另一种技巧,但您必须复制选择器:
$mobile = '(max-width: 767px)';
$tablet = '(min-width: 768px) and (max-width: 1365px)';
$desktop ='(min-width: 1366px)';
.sidebar
width 300px;
unquote("@media " + join(',',$mobile $tablet) + "{")
.sidebar
display none;
unquote("}")
以上将产生这个:
.sidebar {
width: 300px;
}
@media (max-width: 767px),(min-width: 768px) and (max-width: 1365px) {
.sidebar {
display: none;
}
}
1赞
Liron Navon
3/12/2019
#3
您将不得不丢失括号,因为手写笔会强制媒体查询进入括号以进行内联连接(手写笔不再处于积极开发中,因此可能无法解决)才能将其内联工作,或者您可以定期连接到一个新变量中,然后使用它。这里是游乐场
$mobile = 'max-width: 767px'
$laptop = 'min-width: 1366px'
@media ({$mobile}) , ({$laptop})
body
color: green;
评论
0赞
Temani Afif
3/12/2019
知道如何处理查询由两个或多个条件形成的情况,如他的示例所示?
评论