源码链接:http://pan.baidu.com/s/1o8M51hC
Sass
学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了。预处理器通常可以实现浏览器兼容,变量,结构体等功能,代码更加简洁易于维护。 那么css预处理器与Sass有什么关系呢,Sass就是属于css预处理器中的一种,还有两款他们分别是Less和 Stylus,这里就不做过多的介绍了. 什么是Sass sass是一种css的开发工具,提供了很多便利的写法,不但使css开发变得简单和可维护,而且还大大节省了开发时间.
Sass与Css css算不上一门真正的编程语言,无法完成嵌套,继承,设置变量等工作.
Sass是对css进行预处理的“中间语言”,为了弥补css的不足
.scss和.sass .sass
最初它是为了配合haml而设计,所以和haml有着一样的缩进式风格 (Haml是一种用来描述任何XHTML web document的标记语言, 它是干净,简单的。而且也不用内嵌代码。Haml的职能就是替代那些内嵌代码的page page templating systems,比如PHP,ERB(Rails的模板系统),ASP。不过,haml避免了直接coding XHTML到模板,因为它实际上是一个xhtml的抽象描述,内部使用一些code来生成动态内容。Haml 是一种简洁优美的模板语言,可以应用于Ruby on Rails、 PHP等Web开发平台,可以大大缩减模板代码,减少冗余,提高可读性。并且Haml是一种完备的模板语言,没有牺牲当前模板语言的任何特性。Haml由 Hampton Catlin发明并且开发了Ruby on Rails上的实现。)
.scss
从第三代开始,保留缩进式风格,完全向下兼容普通的css代码
什么是 Compass Compass是Sass的工具库,详情请点击这里 Sass与Compass
Sass与Compass的关系,类似于JavaScript和JQuery的关系.
Sass与Compass能做什么?
Sass与Compass的安装
国内需要FQ
没钱FQ的可以使用淘宝的镜像,改变source 就可以了
$ gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
执行命令 gem install compass 来安装compass,安装compass的时候,也会把sass一起装上.
执行命令compass -v 查看是否安装成功,安装成功会在控制台输出版本号.
执行命令sass -v 查看是否安装sass成功,安装成功会在控制台输出版本号.
Sass基础语法 编译scss
sass <sass file> <css file>
输出风格一共有四种
. nested .body {
. background-color: #f00; }
.
..person, .son {
. height: 100px; }
.
./*# sourceMappingURL=demo1.css.map */
. expanded ./* line 1, ../sass/demo1.scss */
.body {
. background-color: #f00;
.}
.
./* line 4, ../sass/demo1.scss */
..person, .son, .banner {
. height: 100px;
.}
.
./* line 7, ../sass/demo1.scss */
..son, .banner {
. height: 100px;
.}
.
.compact ./* line 1, ../sass/demo1.scss */
.body { background-color: #f00; }
.
./* line 4, ../sass/demo1.scss */
..person, .son, .banner { height: 100px; }
.
./* line 7, ../sass/demo1.scss */
..son, .banner { height: 100px; }
.
.compressed 主要用于生产线
.body{background-color:red}.person,.son,.banner{height:100px}.son,.banner{height:100px}
利用sass命令来监视文件和文件夹 监视Sass文件:
sass --watch <sass file>:<css file>
监视文件夹
sass --watch <sass folder>:<css folder>
使用compass编译sass 创建compass目录执行compass create folderName
查看创建好的目录结构可以看出,该命令共创建了两个文件夹,
分别是sass和stylesheets,这两个文件夹前者是用来放sass文件,后者则是用来存储编译好的css文件.
只需要把相关的scss放进sass文件夹内,执行compass compile命令就可以编译了,编译好的文件会自动放在stylesheets文件夹内
监视文件夹
执行命令compass watch
如果加上后缀–force的话表示不管文件更改还是不更改都会重新编译文件
compass watch --force
设置中文不报错
路径根据自己的安装ruby的目录来进行寻找,每个人电脑都不一样
C:\Ruby22-x64\lib\ruby\gems\2.2.\gems\sass-3.4.\lib\sass\engine.rb
添加如下代码Encoding.default_external = Encoding.find('utf-8')
Sass Start .sass使用块级作用域 .变量分为局部变量和全局变量 如果在一个块级作用域里面声明一个变量,要在另一个块级作用域使用的话必须加上!global,否则如果在另一个块级作用域使用此变量会报错.
.// scss
.body {
. /*$color: red;
4. color: $color; 局部变量,下面访问不到, 所以编译会报错,如果想要下面能够访问到的话. 只需要后面加上!global就可以了*/
. $color: red !global; /*这样就可以吧局部变量变为全局变量*/
. color: $color;
.}
.
.footer {
. color: $color;// 这里也不会报错
.}
.变量默认值 在变量后面,分号前面加上!default
作用: 如果首先定义了一个变量$color: red,那么第二次继续赋值为$color: green,此时$color的值为green, 如果第二次赋值的时候在变量后面加上一个!default标识的话,就不会覆盖上次的赋值.这说明,加上!default标识的语句会被优先编译和赋值.
下面代码是没有加default
.// scss
.$fontSize: 12px;
.$fontSize: 16px;
..one {
. font-size: $fontSize;
.}
.// 生成的css
.body { color: red; }
.footer { color: red; }
..one { font-size: 16px; }
下面代码加上了!default
.// scss
.$fontSize: 12px;
.$fontSize: 16px !default;
..one {
. font-size: $fontSize;
.}
.// 生成的css
.body { color: red; }
.footer { color: red; }
..one { font-size: 12px; }
.
. 多值变量 4.1 nth: 语法nth(variable,index); 需要注意的是它的索引是从1开始的
.// scss
.$color: red;
.$maps: (borderColor: red, backgroundColor: blue);
.$paddings: 10px 20px 30px 40px;
.$padding1: 3px 20px 30px 40px;
.body {
. color: $color;
.}
.
.footer {
. color: $color;
. padding: $paddings;
. padding-left: nth($padding1,);
.}
.
.// 生成的css
.
.body { color: red; }
.footer { color: red; padding: 10px 20px 30px 40px; padding-left: 3px; }
4.2 map-get: 语法map-get(variable, key) variable语法$maps: (borderColor: red, backgroundColor: blue);
有两点需要注意一下
当variable错误的时候,会报错
当key不存在的时候,不会编译这条语句,也就是说这条css不会编译出来
.// scss
.$color: red;
.$paddings: 10px 20px 30px 40px;
.$padding1: 3px 20px 30px 40px;
.$maps: (borderColor: red, backgroundColor: blue);
.body {
. color: $color;
.}
.
.footer {
. color: $color;
. padding: $paddings;
. padding-left: nth($padding1,);
. border-color: map-get($maps, borderColor);
. background-color: map-get($maps, backgroundColor);
.}
.
.// 生成的css
.body { color: red; }
.footer { color: red; padding: 10px 20px 30px 40px; padding-left: 3px; border-color: red; background-color: blue; }
. 变量的特殊用法 5.1 变量用在属性或者选择器上 当变量当做 属性来使用的时候#{变量名}
当变量当做 类名来使用的时候’.#{变量名}{}’
.// scss
.$className: container; // 变量的特殊用法
.$bgc: background-color;
..#{$className} {
. width: 100px;
. height: 100px;
. #{$bgc}: $color;
.}
.// 生成的css
..container { width: 100px; height: 100px; background-color: red; }
5.2 变量的使用中横线还是下划线,都是一个变量 怎么用取决于你的爱好 .//scss
.$font-size: 19px;
..font-size {
. font-size: $font_size;
.}
.// 生成的css
..font-size { font-size: 19px; }
.样式导入 6.1 部分文件 部分文件的名称约定以下划线开头
以下划线卡头的文件名称不会被编译
6.2 导入文件 因为原生导入css的方式和sass使用的关键词一致,为了区分使用了一些约定
原生css导入
如果导入的文件名称以css结尾
如果被导入的文件的名称是一个URL地址
被导入的文件的名字是css的url()的值
以下三种情况会直接生成css,不作任何变化,会被当做原生的css导入
.// scss
.@import "css.css";
.@import "http://xxx";
.@import url(css.css);
.// 生成的css
.@import url(css.css);
.@import "http://xxx";
.@import url(css.css);
scss文件导入
.// 这里我新建了一个文件名称叫做_part1.scss
.
.// _part1.scss 文件的样式
.$fontFamily: '微软雅黑';
..body {
. font-family: $fontFamily;
.}
.
.// 在demo1.scss中导入
.@import "part1"; // 这样直接写,就会导入_part1.scss中的样式,这是约定.
.
.
.// demo1文件生成了以下的css
./* line 2, ../sass/_part1.scss */
..body { font-family: "微软雅黑"; }
.scss嵌套常用 & 相当于this
@at-root 跳出嵌套
默认的@at-root只能跳出选择器嵌套,不能跳出@media和@support
如果需要跳出这两个嵌套的话需要设置@at-root(without: media)和@at-root(without: support)
这个语法关键词有四个
all表示所有的
rule表示常规的
media表示media
support表示support,目前@support还无法广泛的使用
我们的默认的@at-root,其实就是@at-root(without: rule)
.body {
. a {
. height: 100px;
. &:hover {
. background-color: green;
. }
. // 跳出常规样式,对应着下面的行号 8
. @at-root .container {
. height: 100px;
. }
. @media(min-width: 768px) {
. // 跳出media和常规样式
. @at-root(without: media rule) {
. .container { // 这里对应下面的行号14
. height: 100px;
. }
. }
. // 下面的样式只跳出了media 没有跳出常规样式,如果需要跳出常规样式的话需要设置,rule
. @at-root(without: media) {
. .container { // 这里对应行号20
. width: 1000px;
. }
. }
. }
. }
. @media(max-width: 1000px) {
. // 默认是跳出 rule
. @at-root .container{ // 对应行号28
. height: 1000px;
. }
. // 下面这句跳出media
. @at-root(without: media rule) {
. .container { // 对应行号33
. width: 500px;
. }
. }
. }
.}
.
.
.// css
.@charset "UTF-8";
./* line 2, ../sass/demo2.scss */
.body a { height: 100px; }
./* line 4, ../sass/demo2.scss */
.body a:hover { background-color: green; }
./* line 8, ../sass/demo2.scss */
..container { height: 100px; }
./* line 14, ../sass/demo2.scss */
..container { height: 100px; }
./* line 20, ../sass/demo2.scss */
.body a .container { width: 1000px; }
.
.@media (max-width: 1000px) { /* line 28, ../sass/demo2.scss */
. .container { height: 1000px; } }
./* line 33, ../sass/demo2.scss */
..container { width: 500px; }
& 和 @at-root的嵌套用法
.// scss
. @at-root .container {
. color: red;
. @at-root nav & {
. color: blue;
. }
. }
.
.// out css
..container { color: red; }
.nav .container { color: blue; }
. 继承 8.1 简单继承 使用关键字@extend selector,代码如下
.//scss
..alert {
. height: 30px;
.}
..alert-info {
. @extend .alert;
. color: #D9EDF7;
.}
.// out css
..alert, .alert-info { height: 30px; }
..alert-info { color: #D9EDF7; }
8.2 多继承 同简单继承类似,语法: @extend selector1, selector2…………
.// scss
..alert {
. height: 30px;
.}
..bgc {
. background-color: #f5f5f5;
.}
..alert-info {
. @extend .alert, .bgc;
. color: #D9EDF7;
.}
.
.// out css
..alert, .alert-info { height: 30px; }
..bgc, .alert-info { background-color: #f5f5f5; }
..alert-info { color: #D9EDF7; }
8.3 链型继承 什么是链式继承呢,按照自己的理解为,假如c继承b,b继承a,那么c同时拥有b和a 的属性.这看起来像一条链条
.// scss
..one {
. border: 1px solid red;
.}
..two {
. @extend .one;
. color: red;
.}
..three {
. @extend .two;
. background-color: #f5f5f5;
.}
.
.// out css
..one, .two, .three { border: 1px solid red; }
..two, .three { color: red; }
..three { background-color: #f5f5f5; }
8.4 继承局限性 无法继承
兄弟选择器是无法继承的(.one + .two)
包含选择器也是无法继承的(.one .two {})
多余继承
如果有hover属性,那么同样的hover属性也会被继承下来
8.5 继承交叉合并 同时继承两个选择器,但是,这两个选择器在同一条语句上面,就形成了交叉继承.
这种用法不太容易控制,应当避免这种用法
.a span{
. height: 100px;
.}
.div .container {
. @extend a, span;
.}
.a span, div .container span, a div .container, div a .container, div .container .container { height: 100px; }
8.6 继承作用域 假如你在media里面定义了一个样式,那么此样式不能继承media之外的选择器.
.// scss 这样写将会出错 ,
.// .three1 {width: 100px;} // 将media写在这里将会出错
.@media screen and (min-width:320px) and (max-width:639px){
. .three1 {width: 100px;} // 写在这里下面的才可以继承
. .container {
. @extend .three1;
. height: 100px;
. }
.}
. 占位选择器 % 表示占位选择器, 不会生成到架构里面,只有用到它的时候才会生成
.// scss
.%message {height: 30px;}
..message-danger {
. @extend %message;
. color: red;
. font-size: 18px;
. height: 30px;
.}
.
.// out css
..message-danger { height: 30px; }
..message-danger { color: red; font-size: 18px; height: 30px; }
 原文链接  http://www.cnblogs.com/songyaqi/p/5195777.html (有修改)
 

Sass之一(基础篇)的更多相关文章

  1. Sass/Scss 基础篇

    Sass/Scss 基础篇 总结Sass学习到的内容 应用Sass/Scss前,环境配置 首先下载Ruby (http://rubyinstaller.org/downloads) 通过命令下载sas ...

  2. 【项目实战】sass使用基础篇(上)

    Sass是一种CSS预处理语言.CSS预处理语言是一种新的专门的编程语言,编译后形成正常的css文件,为css增加一些编程特性,无需考虑浏览器的兼容性(完全兼容css3),让css更加简洁.适应性更强 ...

  3. Sass进阶之路,之一(基础篇)

    Sass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css作为目标生成文件,然后开发者就只要使用这种语言进行编码工作了.预处理器通 ...

  4. 前端总结·基础篇·CSS(三)补充

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 目录 一.移动端 1.1 视口(viewport) 1.2 媒体查询(medi ...

  5. Sass-学习笔记【基础篇】

    最下边附结构图 在线编辑器网址如下:http://sassmeister.com/  注意编写的时候,符号千万别用了中文的:.:.....之类的,会报错,Sass也转换不成css. less和sass ...

  6. 前端总结·基础篇·CSS

    前端总结·基础篇·CSS 1 常用重置+重置插件(Normalize.css,IE8+) * {box-sizing:border-box;}  /* IE8+ */body {margin:0;}  ...

  7. 【webpack 系列】基础篇

    Webpack 基础篇 基本概念 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每 ...

  8. 基于vue2.x的webpack升级与项目搭建指南--基础篇

    first thing fitrst 博主声明:绝对不当标题党 有人看最好不过的背景: 十月初对公司产品的前端构建做了一些优化,但还遗留了不少问题(可了解我的前一篇博文:一次webpack小规模优化经 ...

  9. C#多线程之基础篇3

    在上一篇C#多线程之基础篇2中,我们主要讲述了确定线程的状态.线程优先级.前台线程和后台线程以及向线程传递参数的知识,在这一篇中我们将讲述如何使用C#的lock关键字锁定线程.使用Monitor锁定线 ...

随机推荐

  1. HttpClient设置编码类型

    笔者引用的是commons-httpclient这个jar包httpclient 可是通过get/post方式获取带有中文页面的html文件时.返回的是乱码,在网上找了非常久.最终找到一个合适的: H ...

  2. //%f表示以十进制格式化输出浮点数 %.2f

    //%f表示以十进制格式化输出浮点数 String s1 ="评分: %.1f"; String s2 = String.format(s1, 8.0); System.out.p ...

  3. mysql 索引 大于等于 走不走索引 最左前缀

    你可以认为联合索引是闯关游戏的设计 例如你这个联合索引是state/city/zipCode 那么state就是第一关 city是第二关, zipCode就是第三关 你必须匹配了第一关,才能匹配第二关 ...

  4. 演练:创建和注册自定义 HTTP 模块

    本演练演示自定义 HTTP 模块的基本功能. 对于每个请求,都需要调用 HTTP 模块以响应 BeginRequest 和 EndRequest 事件. 因此,该模块在处理请求之前和之后运行. 如果 ...

  5. 利用MapReduce实现数据去重

    数据去重主要是为了利用并行化的思想对数据进行有意义的筛选. 统计大数据集上的数据种类个数.从网站日志中计算访问地等这些看似庞杂的任务都会涉及数据去重. 示例文件内容: 此处应有示例文件 设计思路 数据 ...

  6. const成员或者引用成员必须使用构造函数初始化列表的方式

    #include<iostream.h> class A { const int a; int b; }; void main() { A obja; }编译出现如下错误:error C2 ...

  7. 关于js中__proto__和prototype的一些理解<转>

    var Person = function(name) {     this.name = name; } var p = new Person(); new操作符的操作是 var p = {} p. ...

  8. Genymotion常见问题整合与解决方案(转)

    常见问题1:Genymotion在开启模拟器时卡在了starting virtual device(注意只有tarting virtual device窗口,没有模拟器的黑屏窗口)    原因:Vir ...

  9. CSS——div居中,window.open(0

    margin:0 auto 表示什么意思?? margin后面如果只有两个参数的话,第一个表示top和bottom,第二个表示left和right因为0 auto,表示上下边界为0,左右则根据宽度自适 ...

  10. springmvc+shiro认证框架配置

    1,在web.xml中配置fiter,如下所示 <!-- shiro的filter --> <!-- shiro过虑器,DelegatingFilterProxy通过代理模式将spr ...