| 知识点
| 变量 - $声明 !default默认值 全局和局部变量
| 嵌套 - 选择器嵌套、属性嵌套、伪类嵌套
| 宏 - @mixin声明宏、@include调用宏、宏可以加参数
| 继承 - @extend来承继一个class
| 占位符 - %mt5定义,@extend来调用
| 插值 - #{}
| 函数
| Sass规则 - @imponrt,@media
| 自定义函数 - @function 函数名
| Sass语句 - @if、@else,@for,@while
| 运算 - +、-、*、/
关于SASS
Sass是CSS预处理器定义了一种新的语言
sass的扩展名为 .sass 老版本 控制缩进不需要使用 {} 或 ; // 类似jade
sass的扩展名为 .scss 新版本 与正常css写法相同
其它预处理:
Sass(SCSS)
LESS
Stylus
Turbine
Swithch CSS
CSS Cacheer
DT CSS
变量声明
一、$ 声明变量
1、作为值使用
$color: '#ccc';
.test{
background-color: $color; // 调用
}
2、作为属性名使用
$side : left;
.rounded {
border-#{$side}-radius: 5px; // 输出 border-left-radius: 5px
}
二、!default 默认变量使用
默认值在组件中很有作用
$baseLineHeight: 2;
$baseLineHeight: 1.5 !default; // 在没有定义baseLineHeight值时,执行1.5的默认值
body{
line-height: $baseLineHeight; // line-hgiht: 2;
}
三、全局变量和局布变量
// 全局变量定义
$color: orange !default;
.block {
color: $color;
}
// 局部变量定义
em {
$color: red;
a {
color: $color;
}
}
嵌套
一、选择器嵌套
nav {
a {
color: red;
header & {
color:green;
}
}
}
输出:
nav a { color: red; }
header nav a { color: green; }
nav {
a {
color: red;
header & {
color:green;
}
}
}
输出:
.nav a { color: red }
.header .nav a { color:green }
二、属性嵌套
.box {
border: {
top: 1px solid red;
bottom: 1px solid green;
}
}
输出: .box { border-top: 1px solid red; border-bottom: 1px solid green; }
三、伪类嵌套
.clearfix{
&:before,
&:after {
content:"";
display: table;
}
&:after {
clear:both;
overflow: hidden;
}
}
输出
clearfix:before, .clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
overflow: hidden;
}
混合宏和声明混合宏
宏相当将一些属性封装到一个宏中,类似函数可重复利用
一、使用“@mixin”声明一个混合宏
@mixin border-radius {
-webkit-border-radius: 5px;
border-radius: 5px;
}
.text {
@include border-radius /* 调用宏 */
}
二、定义带参数的宏
@mixin border-radius($radius:5px){ // 定义一个默认值为5px
-webkit-border-radius: $radius;
border-radius: $radius;
}
.text {
@include border-radius(10px) // 调用
}
带逻辑运算符
@mixin box-shadow($shadow...) {
@if length($shadow) >= 1 {
@include prefixer(box-shadow, $shadow);
}
@else{
$shadow:0 0 4px rgba(0,0,0,.3);
@include prefixer(box-shadow, $shadow);
}
}
扩展和继承
继承是可以直接继承一个class类下所有的属性,
@extend .className;
.btn {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
@extend .btn;
}
.btn-primary-2 {
background-color: #f36;
color: #fff;
font-size: 16px;
@extend .btn;
}
结果:
.btn, .btn-primary, .btn-primary-2 {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
}
.btn-primary-2 {
background-color: #f36;
color: #fff;
font-size: 16px;
}
占位符
定义占位符 %名称 , 调用使用@extend
%mt5 {
margin-top: 5px;
}
%pt5{
padding-top: 5px;
}
.btn {
@extend %mt5;
@extend %pt5;
}
.block {
@extend %mt5;
span {
@extend %pt5;
}
}
结果
.btn, .block {
margin-top: 5px;
}
.btn, .block span {
padding-top: 5px;
}
插值#{}
可以将变量与属性结合
$properties: (margin, padding);
@mixin set-value($side, $value) {
@each $prop in $properties {
#{$prop}-#{$side}: $value;
}
}
.login-box {
@include set-value(top, 14px);
}
结果:
.login-box {
margin-top: 14px;
padding-top: 14px;
}
注释
// 不会被显示到代码中
/* */ 显示到代码中
数据类型
1、数字: 如,1、 2、 13、 10px
2、字符串:有引号字符串或无引号字符串,如,"foo"、 'bar'、 baz
3、颜色:如,blue、 #04a3f9、 rgba(255,0,0,0.5)
4、布尔型:如,true、 false
5、空值:如,null
6、值列表:用空格或者逗号分开,如,1.5em 1em 0 2em 、 Helvetica, Arial, sans-serif
函数
一、字符串函数
1、unquote(str): 删除字符串中的引号
2、quote(str): 给字符添加引号
.test1 {
content: unquote('Hello Sass!') ; // 输出 content: Hello Sass
}
.test3 {
content: quote(ImWebDesigner); // 输出 content: 'ImWebDesigner';
}
3、to-upper-case(): 转大写
4、to-lower-case(): 转小写
二、数字函数
1、percentage($value):将一个不带单位的数转换成百分比值;
.footer{ width : percentage(5px / 10px) } // width: 50%
2、round($value):将数值四舍五入,转换成一个最接近的整数;
3、ceil($value):将大于自己的小数转换成下一位整数;
4、floor($value):将一个数去除他的小数部分;
5、abs($value):返回一个数的绝对值;
6、min($numbers…):找出几个数值之间的最小值;
7、max($numbers…):找出几个数值之间的最大值;
8、random(): 获取随机数
三、列表函数
1、nth函数(nth function) 可以直接访问值列表中的某一项;
2、join函数(join function) 可以将多个值列表连结在一起;
3、append函数(append function) 可以在值列表中添加值;
4、@each规则(@each rule) 则能够给值列表中的每个项目添加样式。
四、判断函数类型
1、type-of($value):返回一个值的类型
2、unit($number):返回一个值的单位
3、unitless($number):判断一个值是否带有单位
4、comparable($number-1, $number-2):判断两个值是否可以做加、减和合并
五、unitless(): 用来判断一个值是否带有单位,如果不带单位返回的值为 true,带单位返回的值为 false
@mixin adjust-location($x, $y) {
@if unitless($x) {
$x: 1px * $x;
}
@if unitless($y) {
$y: 1px * $y;
}
position: relative;
left: $x;
top: $y;
}
.botton{
@include adjust-location(20px, 30);
}
六、comparable(): 用来判断两个数是否可以进行“加,减”以及“合并”, 返回true/false
comparable(2px,1rem)
七、三元函数: if(true,8em,20em); // 第一个参数为
八、map 在Sass中,maps代表一种数据类型,可以包含若干键值对的对象类型
创建一个map数据:
$color: (
default: #fff,
primary: #222,
negative: #333
); // 注意必须加 “;” 号
.box {
color: map-get($color, default);
}
获取map数据的函数:
1、map-get($map,$key):根据给定的 key 值,返回 map 中相关的值。
2、map-merge($map1,$map2):将两个 map 合并成一个新的 map。
3、map-remove($map,$key):从 map 中删除一个 key,返回一个新 map。
4、map-keys($map):返回 map 中所有的 key。
5、map-values($map):返回 map 中所有的 value。
6、map-has-key($map,$key):根据给定的 key 值判断 map 是否有对应的 value 值,如果有返回 true,否则返回 false。
@function colors($color){
@if not map-has-key($social-colors,$color){
@warn "No color found for `#{$color}` in $social-colors map. Property omitted.";
}
@return map-get($social-colors,$color);
}
7、keywords($args):返回一个函数的参数,这个参数可以动态的设置 key 和 value。
九、REG
rgb($red,$green,$blue):根据红、绿、蓝三个值创建一个颜色;
rgba($red,$green,$blue,$alpha):根据红、绿、蓝和透明度值创建一个颜色;
red($color):从一个颜色中获取其中红色值;
green($color):从一个颜色中获取其中绿色值;
blue($color):从一个颜色中获取其中蓝色值;
mix($color-1,$color-2,[$weight]):把两种颜色混合在一起。
Sass规则
一、@import: 用于引用scss或sass文件
二、@media: 媒体查询功能
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}
输出:
.sidebar {
width: 300px;
}
@media screen and (orientation: landscape) {
.sidebar {
width: 500px;
}
}
自定义函数
SASS允许用户编写自己的函数。
// 定义函数
@function double($n) {
@return $n * 2;
}
// 调用函数
#sidebar {
width: double(5px);
}
高级语句
一、条件语句
@if lightness($color) > 30% {
background-color: #000;
}
@else {
background-color: #fff;
}
二、循环语句
@for $i from 1 to 10 {
.border-#{$i} {
border: #{$i}px solid blue;
}
}
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
$i: $i - 2;
}
$list: adam john wynn mason kuroir; //$list 就是一个列表
@mixin author-images {
@each $author in $list {
.photo-#{$author} {
background: url("/images/avatars/#{$author}.png") no-repeat;
}
}
}
运算
+、-、*、/
$container: 960px;
$sidebar-width: 220px;
$gap-width: 20px;
.content{
width: $container - $sidebar-width;
float: left;
}
结果:
.content {
width: 740px;
float: left;
}
颜色计算
p {
color: #010203 + #040506;
}
Sass的目录结构
sass/
|
|– base/
| |– reset.scss # Reset/normalize
| |– typography.scss # Typography rules
| … # Etc…
|
|– components/
| |– buttons.scss # Buttons
| |– carousel.scss # Carousel
| |– cover.scss # Cover
| |– dropdown.scss # Dropdown
| |– navigation.scss # Navigation
| … # Etc…
|
|– helpers/
| |– functions.scss # Sass Functions
| |– mixins.scss # Sass Mixins
| |– helpers.scss # Class & placeholders helpers
| … # Etc…
|
|– layout/
| |– grid.scss # Grid system
| |– header.scss # Header
| |– footer.scss # Footer
| |– sidebar.scss # Sidebar
| |– forms.scss # Forms
| … # Etc…
|
|– pages/
| |– home.scss # Home specific styles
| |– contact.scss # Contact specific styles
| … # Etc…
|
|– themes/
| |– theme.scss # Default theme
| |– admin.scss # Admin theme
| … # Etc…
|
|– vendors/
| |– bootstrap.scss # Bootstrap
| |– jquery-ui.scss # jQuery UI
| … # Etc…
|
|- variables.scss # 存储Sass变量文件
|
`– main.scss # primary Sass file
| http://www.w3cplus.com/preprocessor/organize-that-sass.html # 组织Sass文件
| http://www.w3cplus.com/preprocessor/architecture-sass-project.html # SASS的目录结构
| http://www.w3cplus.com/blog/tags/302.html