【问题标题】:Is it possible to include a CSS file into another CSS file with a media query?是否可以使用媒体查询将 CSS 文件包含到另一个 CSS 文件中?
【发布时间】:2015-06-23 10:55:46
【问题描述】:

我有一个很大的 CSS 文件,我想在使用媒体查询的特殊情况下包含其他 CSS 文件。

像这样在 CSS 中使用@import 是否安全:

@media only screen and (max-width: 480px) {    
    @import url('/css/styles-480.css');    
}

【问题讨论】:

  • 通常使用@import 会减慢浏览器的显示速度。见this related question。 Web 优化的一个基本规则就是尽量减少请求的数量,尤其是顺序请求。

标签: css media-queries


【解决方案1】:

@import@media 规则中是无效的,所以你所拥有的将不起作用。

正确的做法更简单——@import 本身在 URL 之后接受媒体查询:

@import url('/css/styles-480.css') only screen and (max-width: 480px);

这个语法是introduced in CSS2.1 for use with media types,但是media queries will also work,因为它们是媒体类型的直接扩展。

请记住,@import 规则只能存在于样式表的开头。

如果您担心加载性能,您可能希望在页面标题中使用单独的<link> 元素来引用此样式表,而不是@importas shown by Asad。但是,无论哪种方式都可以正常工作。

【讨论】:

    【解决方案2】:

    如果需要,我建议您并行下载 CSS 文件,而不是在 CSS 文件中导入:

    <link media="only screen and (max-width: 480px)"
    href="/css/styles-480.css" type="text/css" rel="stylesheet" />
    

    使用@import的问题是,第二个文件只有在包含@import的CSS文件被完全下载并解析后才会下载。无论您是覆盖所有规则还是部分规则,这种方法都更快,因为它不会按顺序加载文件。

    【讨论】:

    • 这取决于 - 如果 @import 所在的样式表包含 OP 无论如何都需要加载的其他样式,那么将 @import 从该样式表中移出不会有任何影响。跨度>
    • @BoltClock 是的,我假设 OP 用@import 覆盖了所有当前规则
    • @BoltClock 实际上,这不是真的。无论如何,我的方法更快,因为@import 仅在 CSS 文件完全下载和解析后才会启动。这意味着文件按顺序加载。
    • 我指的是关于加载不必要的样式表的部分 - 只要声明了样式表,无论您在何处声明,样式表都会始终加载。使用链接标签无疑比使用@import 更快,但它并不总是保存 HTTP 请求。
    • 好的。只是想在 cmets 中稍微清理一下 :)
    猜你喜欢
    • 2010-09-13
    • 2014-12-09
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    • 2019-08-21
    • 2012-09-28
    相关资源
    最近更新 更多