是否有任何方法可以用Sass的@import命令导入一个常规的CSS文件?虽然我没有使用sass的所有SCSS语法,但我仍然喜欢它的组合/压缩功能,并且希望能够使用它,而不必将我的所有文件重命名为*.scss


当前回答

好消息,Chris Eppstein创建了一个带有内联css导入功能的compass插件:

https://github.com/chriseppstein/sass-css-importer

现在,导入CSS文件就像这样简单:

@import "CSS:library/some_css_file"

其他回答

如果你有一个你不想修改的。css文件,也不要把它的扩展名改成。scss(例如,这个文件来自一个你不维护的fork项目),你可以创建一个符号链接,然后把它导入到你的。scss中。

创建一个符号链接:

ln -s path/to/css/file.css path/to/sass/files/_file.scss

将符号链接文件导入目标.scss:

@import "path/to/sass/files/file";

您的目标输出. CSS文件将保存导入的符号链接.scss文件的内容,而不是CSS导入规则(由评论投票最高的@yaz提到)。并且您没有具有不同扩展名的重复文件,这意味着在初始.css文件中所做的任何更新都会立即导入到目标输出中。

符号链接(也称为符号链接或软链接)是一种特殊类型的文件 它包含以绝对格式对另一个文件的引用 或者相对路径,这会影响路径名解析。 ——http://en.wikipedia.org/wiki/Symbolic_link

简单。

@import “路径/到/文件.css”;

我想出了一种优雅的、类似rails的方法。首先,将.scss文件重命名为.scss。然后使用这样的语法(例如highlight_js-rails4 gem CSS资产):

@import "<%= asset_path("highlight_js/github") %>";

为什么你不能通过SCSS直接托管文件:

只要以某种方式显式地使用完整路径,在SCSS中执行@import对于CSS文件就可以正常工作。在开发模式下,rails为资产服务而不编译它们,所以像这样的路径可以工作…

@import "highlight_js/github.css";

...因为托管路径就是/assets/highlight_js/github.css。如果你在页面上右键单击“查看源代码”,然后用上面的@import点击样式表的链接,你会看到一行看起来像这样:

@import url(highlight_js/github.css);

SCSS引擎将“highlight_js/github.css”转换为url(highlight_js/github.css)。这将很顺利,直到您决定尝试在预编译资产的生产环境中运行它,并在文件名中注入散列。SCSS文件仍然会解析为一个静态/assets/highlight_js/github.css,这个文件没有预编译,在生产环境中也不存在。

这个解决方案是如何工作的:

首先,通过移动.scss文件到.scss。当然,我们已经有效地把SCSS变成了Rails的模板。现在,每当我们使用<%=…%>模板标记时,Rails模板处理器将用代码的输出替换这些代码段(就像任何其他模板一样)。

在.scss中声明asset_path("highlight_js/github")。Erb文件做两件事:

触发rake assets:precompile任务来预编译适当的CSS文件。 生成一个适当反映资产的URL,而不考虑Rails环境。

这也意味着SCSS引擎甚至不会解析CSS文件;它只是托管了一个链接!所以没有矫揉造作的补丁或粗制滥造的变通办法。我们通过SCSS来提供CSS资产,并使用URL来表示CSS资产。甜蜜的!

如果我是正确的,css与scss兼容,所以你可以将css的扩展名更改为scss,它应该继续工作。一旦你改变了扩展名,你可以导入它,它将包含在文件中。

如果你不这样做,sass将使用css @import,这是你不想要的。

好消息,Chris Eppstein创建了一个带有内联css导入功能的compass插件:

https://github.com/chriseppstein/sass-css-importer

现在,导入CSS文件就像这样简单:

@import "CSS:library/some_css_file"