2018.2.26-2018.3.4sass学习

一.准备工作:

1.安装(mac):
gem install sass;
2.sass文件的预编译:


屏幕快照 2018-03-05 上午12.42.16.png

二.变量

1.变量可以在css规则块定义之外存在。当变量定义在css规则块内,那么该变量只能在此规则块内使用。

$border-color: green;

.box {
  $font-size: 20px;
  font-size: $font-size;
  height: 300px;
  width: 300px;
  border: 1px solid $border-color;

}

2.将局部变量转为全局变量:!global

.scss文件:
.scroll-list {
  $list-style: none !global;
  li {
    list-style: $list-style;
  }
}
.project-list {
  list-style: $list-style;
}
编译后.css文件:
.scroll-list li {
  list-style: none; }

.project-list {
  list-style: none; }

三.sass文件的导入

1.sass的@import规则在生成css文件时就把相关文件导入进来。这意味着所有相关的样式被归纳到了同一个css文件中,而无需发起额外的下载请求。另外,所有在被导入文件中定义的变量和混合器均可在导入文件中使用。
2.使用sass的@import规则并不需要指明被导入文件的全名。例如:@import"sidebar";可以随意修改你或别人写的被导入的sass样式文件语法,在sass和scss语法之间随意切换。
3.sass局部文件的导入
约定sass局部文件的文件名以下划线开头。例如: _night-sky.scss
约定的目的: sass就不会在编译时单独编译这个文件输出css。
导入方式:

import 'night-sky';

4.默认变量值:
作用:局部文件可以被多个不同的文件引用,但有时需要对导入的样式做一些修改,所以需要默认变量值。

$box-width: 30px !default;
.box {
   width: $box-width;
}

当被导入的sass文件中已经对该变量赋了值,则导入的文件中的值无效,否则为默认值。
5.嵌套导入
sass允许@import命令写在css规则内:

_2.scss:

.face {
  width: 20px;
  height: 40px;
}
1.scss: 

.mouse {
  @import "import-sass/2";
}

结果:

.mouse .face {
  width: 20px;
  height: 40px;
 }

6.原生的css文件的导入:
三种情况下会生成原生的CSS@import,但会造成浏览器解析css时的额外下载:
(1)被导入文件的名字以.css结尾;
(2)被导入文件的名字是一个URL地址(比如http://www.sass.hk/css/css.css),由此可用谷歌字体API提供的相应服务;
(3)被导入文件的名字是CSS的url()值。
在sass文件中导入css文件的方法:
把原始的css文件改名为.scss后缀,即可直接导入了。

四.静默注释:

1.作用:静默注释在生出的css文件中会被抹去.
2.样式:

.finger {
  font-size: 12px; // 字体大小
}

五.混合器:

sass的混合器可以实现大段样式的重用。混合器使用@mixin标识符定义。例子:

@mixin rounded-corners {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

1.何时使用混合器:
对一大段代码能起一个代表性的名字
2.混合器中的css规则:
混合器可以使用嵌套:

@mixin radius {
  border-radius: 10px;
  div.box-image {
    border-color: red;
    border-width: 3px;
  }
}
.clothes {
  color: #000;
  @include radius;
}

结果:

.clothes {
  color: #000;
  border-radius: 10px;
}
  .clothes div.box-image {
    border-color: red;
    border-width: 3px; 
}

3.给混合器传入参数:

@mixin box-color ($normal,$hover,$visited) {
  background-color: $normal;
  &:hover {
    background-color:$hover;
  }
  &:visited{
    background-color: $visited;
  }
}

.food {
  @include box-color(red,yellow,green)
}

六.使用选择器继承

1.选择器继承:

.aside {
  border: 1px solid red;
  background-color: yellow;
}
.aside div{
  color: #ccc;
}
.aside li {
  font-size: 20px;
}
.footer {
  @extend .aside;
  border-width: 2px;
}

注意:任何与.aside 相关的样式都会被继承。
结果是:

.aside, .footer {
  border: 1px solid red;
  background-color: yellow; }

.aside div, .footer div {
  color: #ccc; }

.aside li, .footer li {
  font-size: 20px; }

.footer {
  border-width: 2px; }

六.SassScript中的数据类型

1.SassScript 可作用于任何属性,允许属性使用变量、算数运算等额外功能。
2.数据类型

数字: 1, 2, 13, 10px
字符串: 有引号字符串与无引号字符串,"foo", 'bar', baz
颜色: blue, #04a3f9, rgba(255,0,0,0.5)
布尔型: true, false
空值: null
数组 (list): 用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
maps: 相当于 JavaScript 的 object,(key1: value1, key2: value2)

3.只有当插值语句传入有引号的字符串,才会被编译为无引号字符串例子:

@mixin font-style($selector){
  .text-title #{$selector} {
    font-style: italic;
  }
}
.text {
  @include font-style(".first-line");
}
编译结果:
.text .text-title .first-line {
  font-style: italic; }

4.三处会将‘/’作为运算符的情况:

  • 如果值,或值的一部分,是变量或者函数的返回值
  • 如果值被圆括号包裹
  • 如果值是算数表达式的一部分
/*除法运算*/
.box-img {
  $width: 20px;
  width: $width/2;
  height: (500px/2);
  margin-left: 5px + 18px/2;
}
结果:
.box-img {
  width: 10px;
  height: 250px;
  margin-left: 14px; }

5.颜色运算:

.box-bgc {
  background-color: #111 + #222;
  color: (#888/2);
  border-color: rgba(100,100,100,0.8) + rgba(50,50,50,0.8); 
// 其中透明度是不能计算的,必须相等
}

结果:
.box-bgc {
  background-color: #333333;
  color: #444444;
  border-color: rgba(150, 150, 150, 0.8); }
透明度运算:

.list-bgc {
  $color: rgba(100,100,100,0.3);
  color: opacify($color,0.5);  //加法
  background-color: transparentize($color,0.1); // 减法
}

结果:
.list-bgc {
  color: rgba(100, 100, 100, 0.8);
  background-color: rgba(100, 100, 100, 0.2); }

6.有无引号字符串顺序的区别:

.symbol {
  font-family: "Microsoft " + YaHei;
  border-style: i + 'talic';
}

结果:
.symbol {
  font-family: "Microsoft YaHei";
  border-style: italic; }

7.字符串运算之 +:

连接字符串:
.mouse {
  cursor: p + ointer;
}
结果:
.mouse {
  cursor: pointer; }

8.插值语句 #{}:

$name: color;
$attr: border;
$font-size: 22px;
$line-height: 11px;
.img-#{$name} {
  #{$attr}-color: red;
  font: #{$font-size}/#{$line-height}; // 使用 #{} 可以避免 Sass 运行运算表达式,直接编译 CSS。
}

结果:
.img-color {
  border-color: red;
  font: 22px/11px; }

七.控制指令:

1.if

p {
  @if 1 + 1 == 2 {
    color: red;
  }
  @if 2+ 3 > 5 {
    font-size: 12px;
  }
  @if null {
    border: 1px solid #ccc;
  }
}

/*if语句*/

$type: opacity;

li {
  @if $type == red {
    color: #000;
  } @else if($type == yellow) {
    color: red;

  } @else if($type == opacity) {
    color: green;
  }
}
结果:
p {
  color: red; }

/*if语句*/
li {
  color: green; }

2.for语句:

@for $i from 1 through 3 {
  icon-#{$i} {
    width: 20px * $i;
  }
}
结果:
/*for语句*/
icon-1 {
  width: 20px; }

icon-2 {
  width: 40px; }

icon-3 {
  width: 60px; }
@for $i from 1 to 3 {
  fly-#{$i} {
    height: 30px * 1;
  }
}

//结果:
fly-1 {
  height: 30px; }

fly-2 {
  height: 30px; }

3.each语句:


@each $var in dog,cat,sheep {
  .box-#{$var} {
    background-color: red;
  }
}

@each $key,$value in (header: red,body: yellow,foot: blue) {
  .fix-#{$key} {
    color: $value;
  }
}

@each $name,$color,$url in (asia,yellow,China),(africa,black,agla),(oceania,white,austrilia) {
  .earth-#{$name} {
    color: $color;
    background: url(image/#{$url}.jpg);
  }
}
//结果:
.box-dog {
  background-color: red; }
.box-cat {
  background-color: red; }
.box-sheep {
  background-color: red; }

.fix-header {
  color: red; }
.fix-body {
  color: yellow; }
.fix-foot {
  color: blue; }

.earth-asia {
  color: yellow;
  background: url(image/China.jpg); }
.earth-africa {
  color: black;
  background: url(image/agla.jpg); }
.earth-oceania {
  color: white;
  background: url(image/austrilia.jpg); }

4.while语句:

$while-val: 6;
@while $while-val > 2 {
  .chart-#{$while-val} {
    width: 20px * $while-val;
  }
  $while-val: $while-val - 1;
}

// 结果:
.chart-6 {
  width: 120px; }

.chart-5 {
  width: 100px; }

.chart-4 {
  width: 80px; }

.chart-3 {

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容