css - PostCSS 乱序编译 SASS 媒体查询?
问题描述
我正在使用带有 PostCSS 的简单 webpack 构建。如果我没有在页面 SCSS 的第一部分中声明特定的媒体查询 mixin,但在下一部分中使用该特定的媒体查询 mixin,则该媒体查询在其他断点之后输出(即使我在特定的在我的 mixins 文件中订购)。这是我的代码:
_variables.scss
$sm-screen: 576px;
$md-screen: 768px;
$lg-screen: 992px;
$xl-screen: 1200px;
_mixins.scss
@mixin sm-screen {
@media screen and (min-width: #{$sm-screen}) {
@content;
}
}
@mixin md-screen {
@media screen and (min-width: #{$md-screen}) {
@content;
}
}
@mixin lg-screen {
@media screen and (min-width: #{$lg-screen}) {
@content;
}
}
@mixin xl-screen {
@media screen and (min-width: #{$xl-screen}) {
@content;
}
}
@mixin screen-size($screen) {
@media screen and (min-width: $screen) {
@content;
}
}
_page.scss
// ————————————————————————————————————————————————————————————
// HERO SECTION
// ————————————————————————————————————————————————————————————
#hero-section {
.hero-heading {
font-size: 2rem;
}
@include sm-screen {
.hero-heading {
font-size: 5rem;
}
}
@include lg-screen {
.hero-heading {
font-size: 6.5rem;
}
}
@include xl-screen {
.hero-heading {
font-size: 6.5rem;
}
}
}
// ————————————————————————————————————————————————————————————
// INTRO SECTION
// ————————————————————————————————————————————————————————————
#intro-section {
.icon-group {
background: red;
}
@include md-screen {
.icon-group {
background: yellow;
}
}
@include xl-screen {
.icon-group {
background: blue;
}
}
}
main.scss(导入文件)
@import "/base/variables";
@import "/base/mixins";
@import "page";
正如您在 中看到的_page.scss
,我喜欢在向下浏览页面时在每个部分(或行)内声明断点。问题是因为我没有@include md-screen
在第一部分声明断点HERO SECTION
,它出现在@include xl-screen
输出 CSS 中的断点之后并覆盖了最大断点的样式:
输出 CSS:
body.home #intro-section .icon-group {
background: red;
}
@media screen and (min-width:1200px) {
body.home #intro-section .icon-group {
background: blue;
}
}
@media screen and (min-width:768px) {
body.home #intro-section .icon-group {
background: yellow;
}
}
这是否意味着我在每个部分声明断点的做法不是最好的方法?我是否应该在每个文件的末尾声明所有断点,这样如果在特定断点的一个部分中没有任何变化,我根本不需要声明该断点以使其以正确的顺序编译?有没有办法让媒体查询按照它们在 mixins 文件中声明的顺序输出,无论何时在 CSS 中调用 mixin?
我的目的是让断点从最小到最大输出,因为我使用的是移动优先、最小宽度方法。我很想像我正在做的那样应用媒体查询,但如果有更好的方法(例如在文件末尾),那就这样吧。
解决方案
推荐阅读
- encryption - 在 GNU 无线电中需要 AES 加密
- mysql - 如何在 mysql/mariadb 中查询具有相同 id 的多行
- java - 同一类的两个对象实例在不同的 JVM 进程中运行
- spring-batch - 在spring-batch中动态读取文件
- maven - 如何仅部署多模块 Maven 项目的一部分?
- python - 为什么我的网站的下半部分没有显示?
- vba - VBA用用户表单文本框和组合框替换Outlook html模板中的所有占位符
- firebase - 如何使用 Cloud Firestore 存储只有他们可以读取、写入和删除的私有用户数据?
- python-3.x - 无法使用 python 3.8 构建 opencv-python
- php - 在 CodeIgniter 中使用多个条件更新多行的问题