#1 课程介绍
##1.1 课程介绍
锤子和钉子有一位古人说过,如果你手里有一把锤子,那么你看什么都像钉子;也有一位今人说过,如果你手里有一颗钉子,你会满大街找钉子。
###1.1.1 sass、compass和css之间的关系
- sass:钉子
- compass:锤子(在sass的基础上进行二次开发)
css:锤子和钉子完成的作品
###1.1.2 课程目标使用Sass和Compass写出更优秀的css
- 解决CSS编写过程中的痛点,如精灵图合图等
- 有效组织样式,图片,字体等项目元素
###1.1.3 课程受众
- 重构同学,写很多CSS,不知如何自动化。
- 前端JS工程师,希望在项目周期内更好组织项目内容。
#2 环境安装
##2.1 Sass简介
用途:更快的写出高可维护性的css
1 | st=>start: sass工作流程 |
##2.2 Sass语法
###2.2.1 扩展名
- 类ruby形式:
.sass
适用场景:ruby、python团队
1 | h1 |
- 类css形式:.scss
适用场景:普通传统前端团队
1 | h1{ |
###2.2.2 安装
####2.2.2.1 RVM
rvm:http://rvm.io/
pgp: pretty good privacy
gpg:GunPG
- 安装
1 | $ brew install gnupg |
- 使用
1 | //列出所有ruby版本 |
##2.3 Compass简介和安装
1 | $ gem install compass |
#3 sass语法介绍(基础篇)
##3.1 sass和scss格式相互转换
1 | $ vim main.scss |
##3.2 创建compass项目
1 | $ compass create learn-sass-syntax |
##3.3 声明编码(不推荐使用)
1 | @charset "UTF-8"; |
##3.4 局部文件
命名方式:添加_
前缀
1 | $ vim _variables.scss |
##3.5 引入文件(重新定义@import
)
比较 | scss的import | css的import |
---|---|---|
运行时期 | 编译过程中 | 浏览器解析时 |
编写位置 | 任意 | 放在代码最前边 |
性能问题 | 不存在 | 无法并行解析 |
- sass的既定规则:
- 文件没有后缀的时候,sass会添加.scss或者.sass后缀
- 同一目录下,局部文件和非局部文件不能重名
- 可以同时引入多个文件,中间用
,
隔开
- 符合以下原生css@import规则的情况会被当作原生
@import
解析
- 后面的文件名以
.css
结尾; - 后面跟
http://
开头的字符串 - 后面跟一个
url()
函数 - 后面带有
media queries
- 重置所有默认样式:
@import "compass/reset"
导致所有默认样式都失效(存在造成效率低下的问题,不推荐,推荐Normalize
)
##3.6 注释
注意:无论是否添加了注释,sass都会默认在编译时添加一些用语调试的注释信息
/**/
:会被放到编译好的css
文件中(当config.rb
中的设置output_style = :compressed
时除外)//
:不会被放到编译好的css
文件中/*! */
:注释在任何情况下都会被保留(适合在开源项目中使用)
##3.7 选择器包含和属性包含
###3.7.1 选择器包含
- 直接子类加权:
&
1 | a{ |
- 递归子类加权
1 | a{ |
###3.7.2 属性包含
1 | //页面主题样式 |
#4 sass语法介绍(进阶篇)
##4.1 变量的操作
直接操作变量,即变量表达式
+ - x / > < >= <= == != ()
注意:数值计算可以带单位通过函数
functions
:跟代码块无关的函数,多是自己内置的函数mixin
:可重用的代码块
- 使用时以拷贝的方式存在:
@include
的方式调用 - 使用时以组合的方式使用:
@extend
的方式调用
##4.2 函数
@function
@mixin
###4.2.1 声明
1 | $ vim _mixin.scss |
###4.2.2 调用
1 | $ vim screen.scss |
##4.3 继承
关键字:@extend
特点:
- 子类会同时继承父类修饰过的其他选择器
- 可以同时继承多个选择器
- 不可以继承选择器序列(嵌套选择器)
- 使用
%
,用来构建只用来继承的选择器
1 | .error{ |
%
:用于只用来被继承的父类
1 | %error{ |
#5 sass语法介绍(高级篇)
##5.1 响应式布局
###5.1.1 sass和css区别之media query
说明:sass
中的media query
可以内嵌在css
规则中,在生成css
的时候,media query
才会被提到样式的最该层级。
优点:避免重复书写选择器,避免打乱样式
1 | //当屏幕尺寸大于768px时 |
##5.2 样式嵌套
副作用:
- 增加了样式修饰的权重
- 制造了这种样式位置的依赖
- 浏览器从右向左逐层解析选择器序列带来性能问题
解决:at-root
指令(指示编译后的嵌套选择器放在顶层)
1 | //页面主题样式 |
##5.3 内置函数的使用
1 | @mixin col-6{ |
##5.4 config.ruby
#综合案例:
##_mixin.scss
1 | @mixin col-6{ |
##screen.scss
1 | /** |