Scss

尝试使用Scss,会让你工作效率更高,代码更易管理
Scss 有三大特性:嵌套 混合器 变量

变量

规范变量命名 建议使用-中划线 变量默认值使用!default

$warnning-color: red;
$warnning-border: 1px solid $warning-color;
// !default !important的反义词
$set-width: 400px !default; 

嵌套

  • 父选择器 &
.content {
  a {
    &:hover { margin-bottom: 1.4em }
  }
}
// 转换后
.content a:hover {margin-bottom: 1.4em}
  • 组合嵌套
.container {
  h1, h2, h3 {margin-bottom: .8em}
}
// 转换后
.container h1, .container h2, .container h3 { margin-bottom: .8em }
nav, aside {
  a {color: blue}
}
// 转换后
nav a, aside a {color: blue}
  • 结合css+ > ~选择器
article {
  ~ article { border-top: 1px dashed #ccc }
  > section { background: #eee }
  dl > {
    dt { color: #333 }
    dd { color: #555 }
  }
  nav + & { margin-top: 0 }
}
// 转换后
article ~ article { border-top: 1px dashed #ccc }
article > footer { background: #eee }
article dl > dt { color: #333 }
article dl > dd { color: #555 }
nav + article { margin-top: 0 }
  • 属性嵌套(注意冒号)
nav {
  border: 1px solid #ccc {
  left: 0px;
  right: 0px;
  }
}
// 转换后
nav {
  border: 1px solid #ccc;
  border-left: 0px;
  border-right: 0px;
}

导入文件@import

相对css导入文件来说,不会导致额外的下载请求,而且也更模块化和高效。导入文件里面的混合器和变量也可以直接使用

@import

  • 局部文件通常是使用_开头命名 在引入的时候也可以忽略下划线
// 引入thems/_night-sky
@import "theme/night-sky" 
  • 支持嵌套
aside {
  background: blue;
  color: white;
}

.blue-theme {@import "blue-theme"}

//生成的结果跟你直接在.blue-theme选择器内写_blue-theme.scss文件的内容完全一样。

.blue-theme {
  aside {
    background: blue;
    color: #fff;
  }
}

注释

body {
  color: #333; // 这种注释内容不会出现在生成的css文件中
  padding: 0; /* 这种注释内容会出现在生成的css文件中 */
}

混合器 mixin

  • 混合器更像是表现样式的css类 用来描述展示怎样的效果
@mixin no-bullets {
  list-style: none;
  li {
    list-style-image: none;
    list-style-type: none;
    margin-left: 0px;
  }
}

//引入混合器
ul.plain {
  color: #444;
  @include no-bullets;
}
//转化后
ul.plain {
  color: #444;
  list-style: none;
}
ul.plain li {
  list-style-image: none;
  list-style-type: none;
  margin-left: 0px;
}
  • 传入参数 传入参数也可以设置默认值
@mixin link-colors(
  $normal-color:red,
  $hover-color:$normal-color,
  $visited-color:$normal-color
) {
  color: $normal-color;
  &:hover { color: $hover-color; }
  &:visited { color: $visited-color; }
}
a {
  @include link-colors(blue, red, green);
}

继承 @extend

  • 继承是复制替换css中的选择器(所有包括目标的规则)混合器是复制里面的属性。所以继承相对混合器,生成的css文件会小很多
  • 使用继承的最好方法就是不好在规则中使用后代选择器。因为这样会让后面规则失控
//通过选择器继承继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

在上边的代码中,.seriousError将会继承样式表中任何位置处为.error定义的所有样式。以class="seriousError" 修饰的html元素最终的展示效果就好像是class="seriousError error"。相关元素不仅会拥有一个3px宽的边框,而且这个边框将变成红色的,这个元素同时还会有一个浅红色的背景,因为这些都是在.error里边定义的样式。


引申

关于@mixin@extend 对比
  • @minxin 相对@extend更可控,
  • 更易减少复杂度 尤其@mixin可以多层嵌套和传入参数
  • 在使用gzip后 @mixin@extend的压缩比更大。参考
控制命令
  • @if
@mixin txt($weight) {
    color: white;
    @if $weight == bold { font-weight: bold;}
}

.txt1 {
    @include txt(none);
}

.txt2 {
    @include txt(bold);
}
//转化后
.txt1 {
    color: white;
}

.txt2 {
    color: white;
    font-weight: bold;
}
@mixin txt($weight) {
    color: white;
    @if $weight == bold { font-weight: bold;}
    @else if $weight == light { font-weight: 100;}
    @else if $weight == heavy { font-weight: 900;}
    @else { font-weight: normal;}
}
  • @for
@for $i from 1 through 4 {
    .col-#{$i} { width: 100/4 * $i + %;}
}
  • @each 使用(#{$var}来占位
@each $usr in bob, john, bill, mike {
    .#{$usr}-avatar {
        background-image: url('/img/#{$usr}.png');
     }
}
  • @each in
@each $usr in bob, john, bill, mike {
    .#{$usr}-avatar {
        background-image: url('/img/#{$usr}.png');
     }
}
$ppl: ( usr1:bob, usr2:john, usr3:bill, usr4:mike );

@each $key, $usr in $ppl  {
    .#{$usr}-avatar {
        background-image: url('/img/#{$usr}.png');
    }
}
  • @while
$x:1;

@while $x < 13 {
    .col-#{$x} { width: 100/12 * $x;}
    $x: $x + 1;
};
操作符
  • 判断严格相等 是使用==
  • 逻辑操作符是 and or not
$list-map: (success: lightgreen, alert: tomato, info: lightblue);

@mixin button-state($btn-state) {
    @if (length($list-map) > 2 or length($list-map) < 5) {
        background-color: map-get($list-map, $btn-state);
    }
}

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

推荐阅读更多精彩内容

  • 慕课网学习笔记 什么是 CSS 预处理器? CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言...
    打铁大师阅读 1,192评论 0 0
  • 1. CSS预处理器 定义了一种新的专门的编程语言,编译后成正常的CSS文件。为CSS增加一些编程的特性,无需考虑...
    恰皮阅读 105,879评论 20 105
  • Sass是成熟、稳定、强大的CSS预处理器,而SCSS是Sass3版本当中引入的新语法特性,完全兼容CSS3的同时...
    白雪公主960阅读 292,481评论 10 183
  • 什么是SASS? SASS(Syntactically Awesome Stylesheets)是一种动态样式语言...
    桂圆_noble阅读 6,714评论 0 15
  • 用@extend继承复用样式 回忆一下最上面的嵌套,嵌套的特点是,比如a嵌套b,a声明的属性,b是得不到的,而实践...
    microkof阅读 5,046评论 0 0