在一个 CSS 文件中是否可以像这样使用 @import。
@import file1
some css here
@import file2
Chrome不会识别上述第二个导入,但这样可以解决问题。
@import file1
@import file2
some css here
这里的问题是我需要将“一些CSS”放在中间,因为file2将覆盖其中的一些。除了从html导入3个文件之外,还有其他解决方案吗?
在一个 CSS 文件中是否可以像这样使用 @import。
@import file1
some css here
@import file2
Chrome不会识别上述第二个导入,但这样可以解决问题。
@import file1
@import file2
some css here
这里的问题是我需要将“一些CSS”放在中间,因为file2将覆盖其中的一些。除了从html导入3个文件之外,还有其他解决方案吗?
这是不可能的:
根据http://www.w3.org/TR/CSS21/cascade.html#at-import:
'@import'规则允许用户从其他样式表中导入样式规则。在CSS 2.1中,任何@import规则都必须位于所有其他规则之前(如果存在,则除@charset规则之外)。
根据http://www.w3.org/TR/CSS21/syndata.html#at-rules:
例如,假设CSS 2.1解析器遇到此样式表:
第二个'@import'在CSS 2.1中是非法的。CSS 2.1解析器会忽略整个@规则,从而将样式表有效地缩减为:
@import "subs.css"; h1 { color: blue } @import "list.css";
@import "subs.css"; h1 { color: blue }
不需要在
@import
之间定义规则。如果您想要覆盖文件1中的属性,则它们也可以在@import
块之后添加。在文件2中被覆盖的属性可以省略。
body {padding-top: ...; padding-bottom: ..;}
或者padding:
,那么你可以安全地将其放在第二个@import
规则之后。 - Rob W正如其他人所说,这是无效的CSS,但我想再加上我的两分钱。如果你正在寻找一种方法来解决这个问题,同时编写更好的CSS(即更简洁,更易于阅读和维护的CSS),那么你可以使用SASS。它是一个增强CSS语法并生成有效CSS文件以供浏览器使用的程序。它被安装为Ruby gem,并且可以通过以下方式启动:
sass --watch style.scss:style.css
style.scss
文件时,都会编译出一个新的style.css
文件。在SASS中,.scss
是标准的SASS源文件扩展名。以下是有效的SASS代码。@import "import1.scss";
a {
color: red;
}
@import "import2.scss";
并编译成以下style.css
a {
/* This is the content of import1.scss */
color: white;
}
a {
color: red;
}
a {
/* This is the content of import2.scss */
color: white;
}
这很奇怪,但CSSWG故意禁止在属性规则后使用@import
。
他们说:
灵活性包括工作组能够在样式表的某个时刻之后分配一些含义给@import,而新行为不会与现有做法在某些方面发生冲突。您可以将当前要求解释为,在找到比现在使用它具有更大价值的用途时,工作组将保留在某些点使用@import规则的权利。现在指定一个特定的含义可能会消除该选项,因此从长远来看,这可能是一种损失。
此外,他们还说@import本身会降低下载速度(虽然这是一个薄弱的论点,因为无论@import放在属性规则前还是后都没有关系,但前者是允许的)。
因此,我们被迫使用解决方法,例如使用一个“TOC”样式表,其中仅包含按所需顺序的@imports(但这会增加浏览器需要下载的文件数量)。
使用!important
来防止被覆盖
类似这样的
<style>
.el{color:red !important;}
.el{color:blue;}
</style>
颜色将保持为红色