项目作者: linlincat

项目描述 :
有关SCSS结构目录的总结
高级语言:
项目地址: git://github.com/linlincat/Scss-tree-structure-directory.git
创建时间: 2015-03-25T05:55:16Z
项目社区:https://github.com/linlincat/Scss-tree-structure-directory

开源协议:

下载


有关SCSS结构目录的总结【本文作者:法国Hugo Giraudel,来至网络资源】


理想情况下,目录层次如下所示:

  1. sass/
  2. |
  3. |– base/
  4. | |– _reset.scss # Reset/normalize
  5. | |– _typography.scss # Typography rules
  6. | ... # Etc…
  7. |
  8. |– components/
  9. | |– _buttons.scss # Buttons
  10. | |– _carousel.scss # Carousel
  11. | |– _cover.scss # Cover
  12. | |– _dropdown.scss # Dropdown
  13. | ... # Etc…
  14. |
  15. |– layout/
  16. | |– _navigation.scss # Navigation
  17. | |– _grid.scss # Grid system
  18. | |– _header.scss # Header
  19. | |– _footer.scss # Footer
  20. | |– _sidebar.scss # Sidebar
  21. | |– _forms.scss # Forms
  22. | ... # Etc…
  23. |
  24. |– pages/
  25. | |– _home.scss # Home specific styles
  26. | |– _contact.scss # Contact specific styles
  27. | ... # Etc…
  28. |
  29. |– themes/
  30. | |– _theme.scss # Default theme
  31. | |– _admin.scss # Admin theme
  32. | ... # Etc…
  33. |
  34. |– utils/
  35. | |– _variables.scss # Sass Variables
  36. | |– _functions.scss # Sass Functions
  37. | |– _mixins.scss # Sass Mixins
  38. | |– _helpers.scss # Class & placeholders helpers
  39. |
  40. |– vendors/
  41. | |– _bootstrap.scss # Bootstrap
  42. | |– _jquery-ui.scss # jQuery UI
  43. | ... # Etc…
  44. |
  45. |
  46. `– main.scss # primary Sass file

Base文件夹

base/文件夹存放项目中的模板文件。在这里,可以找到重置文件、排版规范文件或者一个样式表(我通常命名为_base.scss)——定义一些HTML元素公认的标准样式。

  1. * _base.scss
  2. * _reset.scss
  3. * _typography.scss

Layout文件夹

layout/文件夹存放构建网站或者应用程序使用到的布局部分。该文件夹存放网站主体(头部、尾部、导航栏、侧边栏…)的样式表、栅格系统甚至是所有表单的CSS样式。

  1. * _grid.scss
  2. * _header.scss
  3. * _footer.scss
  4. * _sidebar.scss
  5. * _forms.scss
  6. * _navigation.scss

NOTE —- layout/文件夹也会被称为partials/,>具体使用情况取决于个人喜好。

Components文件夹

对于小型组件来说,有一个components/文件夹来存放。相对于layout/的宏观(定义全局线框结构),components/更专注于局部组件。该文件夹包含各类具体模块,基本上是所有的独立模块,比如一个滑块、一个加载块、一个部件……由于整个网站或应用程序主要由微型模块构成,components/中往往有大量文件。

  1. * _media.scss
  2. * _carousel.scss
  3. * _thumbnails.scss

NOTE —- components/文件夹也会被称为modules/, 具体使用情况取决于个人喜好。

Pages文件夹

如果页面有特定的样式,最好将该样式文件放进pages/文件夹并用页面名字。例如,主页通常具有独特的样式,因此可以在pages/下包含一个_home.scss以实现需求。

  1. * _home.scss
  2. * _contact.scss

Themes文件夹

在大型网站和应用程序中,往往有多种主题。虽有多种方式管理这些主题,但是我个人更喜欢把它们存放在themes/文件夹中。

  1. * _theme.scss
  2. * _admin.scss

Utils文件夹

utils/文件夹包含了整个项目中使用到的Sass辅助工具,这里存放着每一个全局变量、函数、混合宏和占位符。 该文件夹的经验法则是,编译后这里不应该输出任何CSS,单纯的只是一些Sass辅助工具。

  1. * _variables.scss
  2. * _mixins.scss
  3. * _functions.scss
  4. * _placeholders.scss(frequently named_helpers.scss)

NOTE —- 该文件夹的经验法则是,编译后这里不应该输出任何CSS,单纯的只是一些Sass辅助工具。

Vendors文件夹

最后但并非最终的是,大多数的项目都有一个vendors/文件夹,用来存放所有外部库和框架(Normalize, Bootstrap, jQueryUI, FancyCarouselSliderjQueryPowered……)的CSS文件。将这些文件放在同一个文件中是一个很好的说明方式:”嘿,这些不是我的代码,无关我的责任。”

  1. * _normalize.scss
  2. * _bootstrap.scss
  3. * _jquery-ui.scss
  4. * _select2.scss

如果你重写了任何库或框架的部分,建议设置第8个文件夹vendors-extensions/来存放,并使用相同的名字命名。

例如,vendors-extensions/_boostrap.scss文件存放所有重写Bootstrap默认CSS之后的CSS规则。这是为了避免在原库或者框架文件中进行二次编辑——显然不是好方法。

Main文件

主文件(通常写作main.scss)应该是整个代码库中唯一开头不用下划线命名的Sass文件。除 @import和注释外,该文件不应该包含任何其他代码。

文件应该按照存在的位置顺序依次被引用进来:

  1. 1. vendors/
  2. 2. utils/
  3. 3. base/
  4. 4. layout/
  5. 5. components/
  6. 6. pages/
  7. 7. themes/

为了保持可读性,主文件应遵守如下准则:

  • 每个 @import引用一个文件;
  • 每个 @import单独一行;
  • 从相同文件夹中引入的文件之间不用空行;
  • 从不同文件夹中引入的文件之间用空行分隔;
  • 忽略文件扩展名和下划线前缀。
  1. @import 'vendors/bootstrap';
  2. @import 'vendors/jquery-ui';
  3. @import 'utils/variables';
  4. @import 'utils/functions';
  5. @import 'utils/mixins';
  6. @import 'utils/placeholders';
  7. @import 'base/reset';
  8. @import 'base/typography';
  9. @import 'layout/navigation';
  10. @import 'layout/grid';
  11. @import 'layout/header';
  12. @import 'layout/footer';
  13. @import 'layout/sidebar';
  14. @import 'layout/forms';
  15. @import 'components/buttons';
  16. @import 'components/carousel';
  17. @import 'components/cover';
  18. @import 'components/dropdown';
  19. @import 'pages/home';
  20. @import 'pages/contact';
  21. @import 'themes/theme';
  22. @import 'themes/admin';

这里还有另一种引入的有效方式。令人高兴的是,它使文件更具有可读性;令人沮丧的是,更新时会有些麻烦。不管怎么说,由你决定哪一个最好,这没有任何问题。 对于这种方式,主要文件应遵守如下准则:

  • 每个文件夹只使用一个@import
  • 每个@import之后都断行
  • 每个文件占一行
  • 新的文件跟在最后的文件夹后面
  • 文件扩展名都可以省略
  1. @import
  2. 'vendors/bootstrap',
  3. 'vendors/jquery-ui';
  4. @import
  5. 'utils/variables',
  6. 'utils/functions',
  7. 'utils/mixins',
  8. 'utils/placeholders';
  9. @import
  10. 'base/reset',
  11. 'base/typography';
  12. @import
  13. 'layout/navigation',
  14. 'layout/grid',
  15. 'layout/header',
  16. 'layout/footer',
  17. 'layout/sidebar',
  18. 'layout/forms';
  19. @import
  20. 'components/buttons',
  21. 'components/carousel',
  22. 'components/cover',
  23. 'components/dropdown';
  24. @import
  25. 'pages/home',
  26. 'pages/contact';
  27. @import
  28. 'themes/theme',
  29. 'themes/admin';

NOTE —- 为了不用亲自引入每一个文件,有一个叫做sass-globbing的Ruby Sass扩展程序,使在Sass的@import中,使其做为glob模式,就像这样:@import “components/*”

话虽如此,却不推荐它,因为它按照字母顺序引入文件,这往往并不是想要的,特别是处理一个对源文件顺序有所依赖的编程语言的时候。

Shame文件

另一个有意思的方面,由业内已流行的Harry Roberts, Dave Rupert 和 Chris Coyier引起的,那就是将所有的CSS声明、Hack行为和我们不支持的行为放入一个shame file。该文件命名为 _shame.scss,在所有文件之后被引用,放在所有样式表的最后。

  1. /**
  2. * Nav specificity fix.
  3. *
  4. * Someone used an ID in the header code (`#header a {}`) which trumps the
  5. * nav selectors (`.site-nav a {}`). Use !important to override it until I
  6. * have time to refactor the header stuff.
  7. */
  8. .site-nav a {
  9. color: #BADA55 !important;
  10. }