我对SASS和bootstrap比较新。我使用SASS与bootstrap并且在一个概念上遇到了一些困难。
以前,我通常这样使用CSS:一个基本的CSS文件(例如base.css)包含基本布局。每个模板还包括不同的CSS文件(例如sitemap.css、team.css、news.css)。这些CSS文件仅包含各自模板的部分内容。所以我可以覆盖之前文件中的定义。
在SASS中,所有内容都编译在一个文件中。结合bootstrap,我实际上遇到了我到目前为止使用的概念的困难。
每次我想要添加新的CSS文件到现有的定义中时,我会得到一个错误,因为我必须重新包含整个bootstrap结构。但是如果我重新包含它,整个bootstrap代码也会写入其他文件(例如sitemap.css、team.css、news.css)中。如果我在HTML树中包含两个文件,bootstrap定义(如整个规范化块)将被定义两次或更多次。
我的设置如下:
- css
|-- source
| |-- base.scss
| |-- team.scss
| |-- vendors
| | |-- bootstrap...
└-- output
|-- base.css
└-- team.css
在base.scss中,我包含了bootstrap的内容。我还需要team.scss中的bootstrap内容,但不需要所有主要的内容,如normalize等。
我该如何实现呢?这是否可能,还是我必须通过向body标签添加CSS类(如body.team)来切换我的CSS需求?但是这样我必须在一个文件中携带每个页面的整个CSS内容。这不是很麻烦吗? 编辑以澄清一些事情: 这是在base.scss中:
@import "settings/vars";
@import "vendors/bootstrap";
...
header {
@extend .container;
...
.contentbox {
margin-top: $mainGap;
}
...
}
...
这是在team.scss中的代码:
header .contentbox {
@extend .sr-only;
}
很明显,"@extend .sr-only;"在team.scss中无法生效是因为缺少bootstrap。但是如果我使用以下代码引入bootstrap:
@import "vendors/bootstrap";
在team.scss的第一行,我会自动将所有标准的16kb bootstrap内容添加到team.css中。然而,这些定义已经在base.css中了。因此,会产生不必要的开销。
我知道没有办法说:“嘿,bootstrap。我已经在base.scss中包含了你。所以你不需要再把整个主要定义写入team.scss中了。但是我需要你,因为我喜欢你作为一个可用的框架。所以请提供给我函数和变量。” 但或许有其他解决方式?