【问题标题】:Using Gulp to split SASS/CSS file into multiple CSS files based on media queries?使用 Gulp 根据媒体查询将 SASS/CSS 文件拆分为多个 CSS 文件?
【发布时间】:2019-05-28 18:10:34
【问题描述】:

优化网站不实施基于渲染的优化解决方案需要使用 gulp,以便我们可以在测试和部署期间执行任务。

是否有用于 gulp 的开源库,允许我们根据媒体查询将单个 CSS 文件拆分为多个 CSS 文件?或者,是否有一个库可以在输出不同的 CSS 文件而不是单个文件时从 SASS 执行这种拆分?

以下是需要拆分的源 CSS 文件的示例版本。

body {
    background: #f6f6f6;
}
@media(min-width: 780px){
    .whatever{
        max-width:100%
    }
}
@media(min-width: 576px){
    .col-sm{
        flex-basis:0;
        flex-grow:1;
        max-width:100%
    }
}
@media(min-width: 768px){
    .col-md{
        flex-basis:0;
        flex-grow:1;
        max-width:100%
    }
    .col-md-auto{
        flex:0 0 auto;
        width:auto;
        max-width:100%
    }
}
.footer {
    background: blue;
}

期望的结果是生成 3 个文件,如下所示:

css-critical.css

body {
    background: #f6f6f6;
}
.footer {
    background: blue;
}

css-min-576.css

@media(min-width: 576px){
    .col-sm{
        flex-basis:0;
        flex-grow:1;
        max-width:100%
    }
}

css-min-780.css

@media(min-width: 780px){
    .whatever{
        max-width:100%
    }
    .col-md{
        flex-basis:0;
        flex-grow:1;
        max-width:100%
    }
    .col-md-auto{
        flex:0 0 auto;
        width:auto;
        max-width:100%
    }
}

这将允许像这样在 HTML 中加载 CSS 文件:

<link rel="stylesheet" href="/css-critical.css" />
<link rel="stylesheet" href="/css-min-576.css" media="(min-width: 576px)" />
<link rel="stylesheet" href="/css-min-780.css" media="(min-width: 780px)" />

重要提示:我们不太注意“css-critical.css”不一定是使用此技术的给定页面的最低临界 CSS。

【问题讨论】:

  • 不是您要寻找的答案,但要记住的是,您获得的捆绑大小的优化可能会因添加更多网络请求而完全丢失。它甚至可能最终成为一个净负值。
  • 首先你不需要 Gulp,还有很多其他的基本上做同样的事情,比如 rollup、webpack 和 parcel。与 Gulp 相比,这些可能更好、更先进、更能胜任任务。其次,正如其他人提到的那样,拆分 CSS 最终可能比将它们捆绑在一起更糟糕
  • 这个想法是有 4 个文件,一个关键文件,加上一个移动设备、一个平板电脑和一个台式机。 Service Worker 托管缓存和 CDN 缓存等可以帮助消除多个请求的负面影响。
  • 我们希望使用 gulp,因为我们不想为每个页面动态处理 CSS 样式。感谢您提及这些负面后果。主 CSS 文件是通过 gulp 从 SASS 生成的。
  • 使用 webpack 你可以拥有多个入口文件。这与 sass 中的 if 语句一起,您可以制作所需的 4 个文件

标签: css gulp gulp-sass


【解决方案1】:

所以有多个 gulp 插件可以帮助您完成任务:

  1. gulp-extract-media-queries 几乎没有设置,但会根据您的媒体查询创建多个 css 文件。几年没更新了,请谨慎使用。
  2. gulp-split-media-queries 具有 1 设置,这有助于提取所有媒体查询 above 您在插件设置中放置的断点。
  3. gulp-media-queries-splitter 有很多设置,您可以为提取的 css 文件应用自定义文件名,which can be helpfull if you maintain front-end and back-end parts of application

如果你想要最大的选项 = 那么数字 (3) 是你的选择,如果你只是想要更简单的设置 = 那么选择 (2)

【讨论】:

  • 感谢@ve1ikiy 的贡献,稍后我有空时会尝试这些并提供一些反馈。乍一看,它看起来很有前途!
猜你喜欢
  • 2020-02-14
  • 1970-01-01
  • 2015-02-27
  • 2014-11-30
  • 2018-02-12
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多