sass笔记-2|Sass基础语法之让样式表更具条理性和可读性
这一篇主要详述保持sass条理性和可读性的3个最基本方法——嵌套、导入和注释。
零. 变量
变量本身的作用是为了保持属性值的可维护性,把所有需要维护的属性值放在同一个地方,快速更改,处处生效,可谓售后无忧。
1.变量声明
变量用"$"符号开头进行声明,任何可以用作CSS属性值的东西都可以用作sass变量的值,单个值、空格分开的多个值、逗号分开的多个值都可以:
$primary-color: #233;
$general-border: 1px solid #ddd;
变量一般声明在sass源代码的开头处,CSS规则块外(花括号外面),便于寻找和维护,不过有时候你也想将变量声明在规则块内,这也是没有问题的,只是这样就只能在块内使用,类似“块作用域”。
2.变量使用
凡是CSS属性的标准值可存在的地方,变量都可以使用,而且变量可以被引用在另一个变量的声明中:
$primary-color: #233;
$general-border: 1px solid $primary-color;
可能还见到过形如#{$val}
这样去用变量的,用#{
和}
包裹,这其实是把变量看成一个表达式在用,这样的用法叫插值,这个在sass高级特性中再述。
一. 嵌套——层次
嵌套规则就像洋葱,一层一层,很有层次感,即可读性和条理性。最常见的选择器嵌套,就是一层层打开,一般被包含选择器作为包含选择器的后代选择器展开:
/*sass*/
li{
float:left;
a{
color: #c33;
}
}
/*生成的css*/
li{
float:left;
}
li a{
color:#c33;
}
1. 父选择器标识符&
父选择器标识符&
可以放在任何一个选择器可以出现的地方,代表的就是字面意思——父选择器,为什么要有这个东西呢?因为不想无脑化被当做后代展开,最常见的比如当嵌套伪类选择器时:
li{
float:left;
a{
color: #233;
&:hover{
color:#c33;
}
}
}
/*这样生成的CSS是这样的*/
li{
float:left;
}
li a{
color:#233;
}
/*注意这里的a选择器和伪类选择器间没有空格,&被父选择器直接替换*/
li a:hover{
color:#c33
}
当包含父选择器标识符的嵌套规则打开时,不会简单当做后代选择器拼接,而是&
被父选择器直接替换。
伪类是一种常用用法,当然这个“飙师傅”——&
——也可以放在选择器后面(记得遇到&
打开时不是被正常拼接,可以替换):
#content aside{
color:red;
body.ie & { color:green }
}
/*输出的css是这样的*/
#content aside{
color:red;
}
body.ie #content aside { color:green }
2. 复杂选择器嵌套
- 群组选择器,如
h1,h2,h3{ a{...} }
或者div{ h1,h2,h3{...} }
,sass会正确处理,分别打开组合h1 a, h2 a, h3 a{...}
,div h1, div h2, div h3{...}
- 子组合选择器和同层选择器:
>
、+
和~
,sass都会正确处理,不管它们是在选择器前还是后
3. 属性嵌套
写背景样式时写一堆background-XX
很烦吧,属性嵌套可以帮你减少一些工作量。把属性名从中划线的地方断开,在根属性后边添加一个冒号,紧跟一个花括号块,把子属性写在花括号中:
div{
background:{
image: url(./img/233.png);
repeat: no-repeat;
size: contain;
}
}
二. 导入——@import
Sass的@import和CSS的不一样。CSS的@import
,只有在执行到的时候才去下载其他CSS文件,这就影响了页面加载;而Sass的@import
在生成CSS文件的时候就把相关文件导入进来了。
1.sass的@import语法
Sass的@import
并不需要指明被导入文件的全名,即可以省略.sass
或者.scss
扩展名。
此外,每个sass文件一般会被输出成CSS文件,但其实当我们用@import
引入sass文件时,我们仅仅希望生成一个总体的css文件,不需要每个sass文件都被输出成css,这样的文件被称作"sass局部文件",即不会被单独编译输出成css,用来被引入。
Sass局部文件需要以下划线开头,当用@import
引入时,不仅可以省略扩展后缀,也可以省略开头的下划线。
所以,假设我们有一个"_nav.scss"和一个"article.scss"需要引入,那么我们仅仅这么写就够了:
@import "nav"
@import "article"
而且,sass的@import
命令可以写在CSS规则内,这会使生成的CSS规则直接被插入到导入的地方。你可以把@import
命令看做一个宏,写在哪里,那里就被要导入的sass文件源代码替换。
2. 导入后可定制
导入机制能让你的sass根据某种依据分成几个板块(如根据不同的区域),那么导入某个sass文件,这个文件完全决定了这部分的样式,如颜色、字体、字号等。
而你想让导入后,还能修改一些值以定制自己需要的样式,比如颜色、大小等,尤其是当小明想导入你的sass文件时,可能被导入的样式设置不能很好满足他自己的需求,这个时候有两种做法:
- 小明在导入后,重新去声明一遍想修改的变量,并且给一个新的值,写在后面的值会覆盖前面的;
- 你在你的sass源文件中用
!default
修饰变量值从而设置变量默认值,再发布出去给别人用,如$link-color:red !default
。这个时候小明如果仅仅引入不想改,那么就是这个值,如果他想改,就可以在任何一处重新声明这个变量,那么就会变成小明的值。
两种方式都要重新声明,是不是“脱裤子放屁”呢?嗯,有点这个意思!区别在于:
变量值后面用!default
修饰,就有了默认值,这个变量不管在哪里被声明,就会用声明的值,这意味着,你可以在引入含有需要修改变量值的sass文件前,声明这个变量为你要的值,后面引入的文件中的值不会覆盖你声明的变量值。
3. 怎么回到CSS原生的@import机制
- 被导入文件的名字以
.css
结尾; - 被导入文件的名字是一个URL地址;
- 被导入文件的名字是CSS的url()值。
三. 注释——看得见和看不见
Sass的注释有两种形式,一种是来自CSS的注释风格,用\*
和*\
包裹,这种注释当Sass文件被编译输出css时是会输出的,
另一种注释方式是,以//
开头的单行注释,这被称为静默注释,因为这样的注释在被编译输出css时是不会被输出到CSS文件中的,此外,这种注释写起来简单快捷啊。
四. 小结
保持条理性和可读性的3种基本方式,拆分不同板块的Sass文件,然后通过@import引入;嵌套选择器和属性,不但可以帮助增加层次和条理,还能减少打字量(变相减少了打字出错);注释永远是一个好习惯。
sass笔记-2|Sass基础语法之让样式表更具条理性和可读性的更多相关文章
- sass笔记-3|Sass基础语法之样式复用和保持简洁
上一篇详述了Sass如何嵌套.导入和注释这3个基本方式来保持条理性和可读性,这一篇更进一步地阐述sass保持样式复用和简洁的方式--混合器和选择器继承--这两种方式都能复用样式,使用它们也不难,但一定 ...
- Sass的使用和基础语法
sass安装 官网下载ruby的windows安装包,安装时勾选上添加到环境变量add ruby executables to your path.安装完成后打开命令行,ruby -v输出内容则安装完 ...
- sass笔记-1|Sass是如何帮你又快又好地搞定CSS的
Sass学习笔记持续整理中,开篇不讲怎么安装,sass是什么,这些搜索引擎会告诉你,我们从sass的作用开始讲起,知道sass用来干什么,有什么作用,我们才能相信用sass的好处,并且时时刻刻想着sa ...
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: :声明val变量:可以使用val来声明变 ...
- Java编程基础阶段笔记 day04 Java基础语法(下)
day04 Java基础语法 (下) 笔记Notes要点 switch-case语句注意 switch-case题目(switchTest5) 循环执行顺序 if-else 实现3个整数排序 Stri ...
- 风变编程笔记(一)-Python基础语法
第0关 print()函数与变量 1. print()函数print()函数:告诉计算机,把括号的内容显示在屏幕上 # 不带引号 print(1+1) # 让计算机读懂括号里的内容,打印最终的结果 ...
- <学习笔记 之 JQuery 基础语法>
jQuery 库 - 特性 jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaSc ...
- sass的安装和基础语法
安装 下载ruby安装包[官网非常慢ruby官网] ruby-2.3.3-x64-mingw32.7z 下载sass sass-3.7.4.gem 方法一: ruby压缩包,解压即可,在bin目录下, ...
- Java 学习笔记(1)——java基础语法
最近抽时间在学习Java,目前有了一点心得,在此记录下来. 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础一点点的写,我想根据我已有的C/C++经验 ...
随机推荐
- MESH
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_meshtest.html A class that allows c ...
- 【USACO 1.5.3】特殊的质数肋骨
[题目描述]农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋骨,每次还剩下的肋骨上的数 ...
- javaScript高程第三版读书笔记
看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...
- javascript获得给定日期的前一天的日期
/** * 获得当前日期的前一天 */ function getYestoday(date){ var yesterday_milliseconds=date.getTime()-1000*60*60 ...
- HTML5拖放
HTML5拖放 <!doctype html> <html> <head> <meta charset="UTF-8"> <t ...
- Tinkphp定时发布文章的教程
第一步:在文章表中加一个字段,用来保存定时发布的时间 假定我把这个字段设为 push_time 默认为 0 第二步:写一个方法来检查文章列表,把文章列表到时间的文章改为发布状态 //定时发布文章 pu ...
- 在win8.1 64位环境下有关Oracle的安装和卸载
1,Oracle安装 3 注意:在win8.1环境下安装64位的oracle客户端,注意配置是1g的 2.Oracle的卸载:http://jingyan.baidu.com/article/f7ff ...
- JVM笔记-逃逸分析
参考: http://www.iteye.com/topic/473355http://blog.sina.com.cn/s/blog_4b6047bc01000avq.html 什么是逃逸分析(Es ...
- iOS常见内存泄漏解决
iOS常见内存泄漏解决 1 OC和CF转化出现的内存警告 CFStringRef cfString = CFURLCreateStringByAddingPercentEscapes(kCFA ...
- iOS 获取手机 唯一标识-b
存贮在keychainQuery 可以统计用户使用情况 -(void)gatherMessage{ //采集用户设备信息 NSUserDefaults *userDefaults=[NSUserDef ...