我认为您不了解 SASS / Compass 和媒体查询的工作原理。变量在发送到客户端之前由编译器转换,而不是由浏览器的 CSS 引擎以及传统选择器(id、类、标签)解释的媒体查询
编译器不会将媒体查询解释为条件,只是因为在编译时没有定义屏幕大小,尤其是因为这不是他的工作。
这是发生的事情的简化版本:
- 1
$arrow-size: 30px;
“好的,我设置了一个新arrow-size
变量30px
”
- 3
@media only screen and (max-width: 449px) {
“好的,一个新的选择器...语法是正确的,如果大括号闭合,我稍后再看。”
- 4
$arrow-size: 15px;
“好的,我将arrow-size
变量设置为15px
”
- 5
}
“好的,支架已关闭”
- ...
- 13
border-bottom: $arrow-size solid white;
“一个新的 css 规则,语法没问题......哦,我要替换一个变量!多少钱$arrow-size
?哦,是的15px
,我改变它。”
结果,编译后的 CSS 文件将是:
屏幕.css
@media only screen and (max-width: 449px) {
}
div.selector {
height: 0px;
width: 0px;
position: absolute;
bottom: 0px;
left: 50%;
border-bottom: 15px solid white;
border-left: 15px solid transparent;
border-right: 15px solid transparent;
}
您还可以将媒体查询放入选择器:
$arrow-normal-size: 30px;
$arrow-small-size: 15px;
div.selector {
height: 0px;
width: 0px;
position: absolute;
bottom: 0px;
left: 50%;
border-bottom: solid white;
border-left: solid transparent;
border-right: solid transparent;
border-width: $arrow-normal-size;
@media only screen and (max-width: 449px) {
border-width: $arrow-small-size;
}
}
或使用 mixin :
在这种特定情况下有点没用
@mixin responsive-border($max-screen-width, $border-width){
@media only screen and (max-width: #{$max-screen-width}) {
border-width: $border-width;
}
}
div.selector {
height: 0px;
width: 0px;
position: absolute;
bottom: 0px;
left: 50%;
border-bottom: solid white;
border-left: solid transparent;
border-right: solid transparent;
border-width: 30px;
@include responsive-border(449px,15px);
}