Sass 中的媒体查询
Media queries in Sass
我想知道是否有一种方法可以在 sass 中编写媒体查询,所以我可以在比方说:300px 到 900px
之间给出某种样式
在css中看起来像这样
@media only screen and (min-width: 300px) and (max-width: 900px){
}
我知道我可以写
@media (max-width: 900px)
在 sass 但如何达到这个范围?
$small: 300px;
$medium: 900px;
.smth {
//some CSS
@media screen and (max-width: $small) {
//do Smth
}
@media screen and (min-width: $medium) {
//do Smth
}
}
是这样的吗?
这是我使用 sass 的 Mixin,它允许我快速引用我想要的断点。显然你可以调整媒体查询列表以适应你的项目移动拳头等
但它会为您提供多个查询,正如我相信您所要求的那样。
$size__site_content_width: 1024px;
/* Media Queries */ Not necessarily correct, edit these at will
$media_queries : (
'mobile' : "only screen and (max-width: 667px)",
'tablet' : "only screen and (min-width: 668px) and (max-width: $size__site_content_width)",
'desktop' : "only screen and (min-width: ($size__site_content_width + 1))",
'retina2' : "only screen and (-webkit-min-device-pixel-ratio: 2) and (min-resolution: 192dpi)",
'retina3' : "only screen and (-webkit-min-device-pixel-ratio: 3) and (min-resolution: 288dpi)",
'landscape' : "screen and (orientation:landscape) ",
'portrait' : "screen and (orientation:portrait) "
);
@mixin for_breakpoint($breakpoints) {
$conditions : ();
@each $breakpoint in $breakpoints {
// If the key exists in the map
$conditions: append(
$conditions,
#{inspect(map-get($media_queries, $breakpoint))},
comma
);
}
@media #{$conditions} {
@content;
}
}
在你的 scss 中像这样使用它:
#masthead {
background: white;
border-bottom:1px solid #eee;
height: 90px;
padding: 0 20px;
@include for_breakpoint(mobile desktop) {
height:70px;
position:fixed;
width:100%;
top:0;
}
}
然后这将编译为:
#masthead {
background: white;
border-bottom: 1px solid #eee;
height: 90px;
padding: 0 20px;
}
@media only screen and (max-width: 667px), only screen and (min-width: 1025px) {
#masthead {
height: 70px;
position: fixed;
width: 100%;
top: 0;
}
}
查看 scss。
https://github.com/Necromancerx/media-queries-scss-mixins
用法
.container {
@include xs {
background: blue;
}
@include gt-md {
color: green
}
}
演示:Stackblitz
$small: 300px;
$medium: 900px;
@media screen and (min-width: $small) and (max-width: $medium) {
//css code
}
@media 规则可以完成上述所有工作,甚至更多。除了允许插值外,它还允许 Sass直接在特征查询中使用脚本表达式。
如果可能,Sass 还将合并相互嵌套的媒体查询,以便更轻松地支持尚未原生支持嵌套@media 规则的浏览器。
$layout-breakpoint-small: 960px;
.smth {
display: none;
@media (min-width: $layout-breakpoint-small) {
display: block;
}
}
<div class="smth"></div>
我想知道是否有一种方法可以在 sass 中编写媒体查询,所以我可以在比方说:300px 到 900px
之间给出某种样式在css中看起来像这样
@media only screen and (min-width: 300px) and (max-width: 900px){
}
我知道我可以写
@media (max-width: 900px)
在 sass 但如何达到这个范围?
$small: 300px;
$medium: 900px;
.smth {
//some CSS
@media screen and (max-width: $small) {
//do Smth
}
@media screen and (min-width: $medium) {
//do Smth
}
}
是这样的吗?
这是我使用 sass 的 Mixin,它允许我快速引用我想要的断点。显然你可以调整媒体查询列表以适应你的项目移动拳头等
但它会为您提供多个查询,正如我相信您所要求的那样。
$size__site_content_width: 1024px;
/* Media Queries */ Not necessarily correct, edit these at will
$media_queries : (
'mobile' : "only screen and (max-width: 667px)",
'tablet' : "only screen and (min-width: 668px) and (max-width: $size__site_content_width)",
'desktop' : "only screen and (min-width: ($size__site_content_width + 1))",
'retina2' : "only screen and (-webkit-min-device-pixel-ratio: 2) and (min-resolution: 192dpi)",
'retina3' : "only screen and (-webkit-min-device-pixel-ratio: 3) and (min-resolution: 288dpi)",
'landscape' : "screen and (orientation:landscape) ",
'portrait' : "screen and (orientation:portrait) "
);
@mixin for_breakpoint($breakpoints) {
$conditions : ();
@each $breakpoint in $breakpoints {
// If the key exists in the map
$conditions: append(
$conditions,
#{inspect(map-get($media_queries, $breakpoint))},
comma
);
}
@media #{$conditions} {
@content;
}
}
在你的 scss 中像这样使用它:
#masthead {
background: white;
border-bottom:1px solid #eee;
height: 90px;
padding: 0 20px;
@include for_breakpoint(mobile desktop) {
height:70px;
position:fixed;
width:100%;
top:0;
}
}
然后这将编译为:
#masthead {
background: white;
border-bottom: 1px solid #eee;
height: 90px;
padding: 0 20px;
}
@media only screen and (max-width: 667px), only screen and (min-width: 1025px) {
#masthead {
height: 70px;
position: fixed;
width: 100%;
top: 0;
}
}
查看 scss。 https://github.com/Necromancerx/media-queries-scss-mixins
用法
.container {
@include xs {
background: blue;
}
@include gt-md {
color: green
}
}
演示:Stackblitz
$small: 300px;
$medium: 900px;
@media screen and (min-width: $small) and (max-width: $medium) {
//css code
}
@media 规则可以完成上述所有工作,甚至更多。除了允许插值外,它还允许 Sass直接在特征查询中使用脚本表达式。
如果可能,Sass 还将合并相互嵌套的媒体查询,以便更轻松地支持尚未原生支持嵌套@media 规则的浏览器。
$layout-breakpoint-small: 960px;
.smth {
display: none;
@media (min-width: $layout-breakpoint-small) {
display: block;
}
}
<div class="smth"></div>