Sass 项目结构之7-1模式

7-1模式的结构:7个文件夹,1个文件。

基本上,你需要将所有的部件放进7个不同的文件夹和一个位于根目录的文件(通常用main.scss或者app.scss)

编译时会根据main.scss引用所有文件夹而形成一个CSS样式表

7个文件夹

  • abstracts/
  • base/
  • components/
  • layout/
  • pages/
  • themes/
  • vendors/

1个文件

  • main.scss

Base文件夹

base/文件夹存放项目中的模板文件。定义一些HTML元素公认的标准样式。

比如:Reset.css 和 normalize.css 等

  • _base.scss
  • _reset.scss
  • _typography.scss
  • _animations.scss

Layout文件夹

layout/文件夹存放构建网站或者应用很小使用到的布局部分。常见的如:

  • _grid.scss
  • _header.scss
  • _footer.scss
  • _sidebar.scss
  • _forms.scss
  • _navigation.scss

Components文件夹

该文件夹包含各类具体模块,基本上是所有的独立模块,划分可以参考一些UI库的来划分,如:

  • _media.scss
  • _carousel.scss
  • _thumbnails.scss
  • _alert.scss
  • _badge.scss
  • _button.scss
  • _modal.scss

等等,这个文件夹理应做到每个文件对应一个独立的组件,或者在该目录下再开个目录button/

用components/目录下的_button.scss做链接,链接button/中所有文件

_button.scss 文件只负责@import,而实际功能在文件夹button/所有文件中

一般做链接的文件不该用_前缀,而是用button.scss来区分,实际功能才用_前缀

//button.scss

@import "./button/_blue-button";
@import "./button/_red-button";

Pages文件夹

存放页面文件,就是那个页面内具有独特的样式,如:

  • _home.scss
  • _index.scss

Themes文件夹

主题文件夹,类似Bootstrap中的_variables.scss文件,存放着整个app的变量,组件的样式值基本引用于该文件。

只要改变_variables.scss中的值,就可以切换一种主题。

  • _theme.scss
  • _admin.scss
  • _variables.scss

Abstracts文件夹

辅助工具文件夹,可以存放每一个全局变量、函数、混合宏以及占位符。如:

  • _variables.scss
  • _mixins.scss
  • _functions.scss
  • _placeholders.scss

文件夹名字和这些文件只是参考,不喜欢也可以utils,如果_mixins.scss很大,

可以在该文件夹下再创一个mixins/,mixins.scss充当链接@import


Vendors文件夹

外来项目文件夹,存放一些外部库和框架(Normalize,Bootstrap,jQueryUI等)

  • _normalize.scss
  • _bootstrap.scss
  • _jquery-ui.scss

入口文件

主文件,main.scss,除@import和注释外,该文件不应该包含任何其他代码

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

  • 每个@import引用一个文件;
  • 每个@import单独一行;
  • 从相同文件夹中引入的文件之间不用空行;
  • 从不同文件夹中引入的文件之间空行分隔;
  • 忽略文件扩展名和下划线前缀

下面以一个单页面app.scss文件为例

这个案例的模式我是参考bootstrap的框架的,非7-1模式,任何模式都只供参考

具体怎么用,请按具体业务应用使用

  • _global.scss
  • _animations.scss
  • app.scss
  • mixins/
  • functions/
  • components/
  • containers/
//参考bootstrap架构
//xxx : 表示同理
//app.scss //导入变量
@import 'variables'; //导入mixins
@import './mixins/clearfix';
@import './mixins/xxx'; //导入functions
@import './functions/px2rem'
@import './functions/xxx'; //导入动画
@import 'animations' //导入基本设置,排版、html标签等全局样式
@import 'global.scss'; //导入components
@import './component/button';
@import './component/xxx'; //导入containers
@import './containers/index';
@import './containers/xxx';

总结

7-1模式,只供参考,具体怎么搭,最好按项目来。

如果项目比较小,用7-1模式就不必要了,参考bootstrap的架构就可以了

如果项目很大,采用7-1模式是个不错的选择。

最主要的是学习其中项目管理的思想。


参考资料链接

Sass 构建之 7-1模式的更多相关文章

  1. Apache Commons CLI官方文档翻译 —— 快速构建命令行启动模式

    昨天通过几个小程序以及Hangout源码学习了CLI的基本使用,今天就来尝试翻译一下CLI的官方使用手册. 下面将会通过几个部分简单的介绍CLI在应用中的使用场景. 昨天已经联系过几个基本的命令行参数 ...

  2. 利用sass构建组件化的ui库

    创建公用的Sass项目模板 在做项目时,不管什么项目,他们之间总是有一些可以共用的部分.比如说重置样式.公用样式.模块组件.UI库等.那么在Sass项目中也是如此.为了避免在每个项目中做一些相同的事情 ...

  3. Item 2---遇到构造器具有多个参数时,要考虑用构建器;Builder模式

    问题,面对这种一个构造器具备多个参数的问题,现有的做法是使用重叠构造器的方式,该方式存在的问题: public class NutritionFacts { private final int ser ...

  4. 设计模式---对象创建模式之构建器模式(Builder)

    一:概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象 ...

  5. vue、rollup、sass、requirejs组成的vueManager

    近段时间本人一直在思考如何基于vue搭建一个中后端管理系统的通用基础前端解决方案.思考的主要问题点如下: 如何使各个子业务模块的按需加载 css预处理方案的选择 如何引入现代的前端工程思想,也就是工程 ...

  6. Vue构建项目

    构建Vue项目 按照官网教程安装 //先安装脚手架 cnpm i -g vue-cli //查看项目目标列表: webpack browserify pwa 等项目模板 vue list //使用we ...

  7. iOS系列 基础篇 01 构建HelloWorld,剖析并真机测试

    iOS基础 01 构建HelloWorld,剖析并真机测试 前言: 从控制台输出HelloWorld是我们学习各种语言的第一步,也是我们人生中非常重要的一步. 多年之后,我希望我们仍能怀有学习上进的心 ...

  8. [Head First设计模式]山西面馆中的设计模式——建造者模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感 ...

  9. 深入浅出设计模式——建造者模式(Builder Pattern)

    模式动机无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单 ...

随机推荐

  1. [Xcode 实际操作]七、文件与数据-(23)UI Testing系统界面测试功能的使用

    目录:[Swift]Xcode实际操作 本文将演示UI Testing系统界面测试功能的使用. 如果项目中尚未引入界面测试功能,请点击项目属性面板->[General]面板左下角的[+]图标 - ...

  2. Alcatraz -- 一个神奇的管理插件的Xcode插件

    Install Paste this into your terminal: curl -fsSL https://raw.githubusercontent.com/supermarin/Alcat ...

  3. Mysql相关函数使用和总结(cast、convert)

    一.类型转换 1.获取一个类型的值,并产生另一个类型的值,CAST()和CONVERT()函数. 用法: CAST(value as type); CONVERT(value, type); 解释:C ...

  4. SpringBoot | Thymeleaf | 局部更新

    建立一个实体类: public class Fruit { int id; String name; public Fruit() { } public Fruit(int id, String na ...

  5. python快排

    代码: def partition(data,left,right): tmp = data[left] while left<right: while left < right and ...

  6. JMeter提取和重用作为变量 - 具有更多提取器

    这是我们最受欢迎的博文,我们添加了更多提取器.这篇文章解释了如何使用正则表达式提取器从第一个请求的响应中提取密钥,并将提取的密钥用于后续请求.我们称之为JMeter Extract并重复使用. 现在您 ...

  7. C# 面向对象之面向接口

    接口的定义 与类不同的是接口用interface关键字 (1)接口中所有成员不能添加任何修饰符,默认为public,如果显示指定修饰符将会出现编译错误; (2)接口中不能包含字段.运算符重载.实例构造 ...

  8. 为什么会出现lvs+nginx

    一.ngix(应用层 网络七层负载均衡) 1.异步转发,请求数据和相应数据都要经过ngix,ngix和客户端建立连接 2.轮询所有的tomcat服务器,保证请求成功或者最后一台tomcat服务器也请求 ...

  9. 计算机中如何实现除数是2的幂次的除法【转载自CSDN】

    前言: 本来是在看汇编里面的数据条件传送指令,做习题的时候看着这么一道有关于2的幂次方除法的题目.结果傻眼了,又尼玛不会了.........第二章看的时候就稀里糊涂的,看了几遍也没看太懂,这回又涉及到 ...

  10. 利用HtmlParser解析网页内容

    一,htmpparser介绍 htmlparser是一个功能比较强大的网页解析工具,主要用于 html 网页的转换(Transformation) 以及网页内容的抽取 (Extraction). 二, ...