前端学习之路——scss篇

学习资料:

  sass语法 http://www.w3cplus.com/sassguide/syntax.html

  Sass http://sass.bootcss.com/docs/sass-reference/

     http://www.ruanyifeng.com/blog/2012/06/sass.html

一、什么是SASS

SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护。

二、安装和使用

Sass依赖于ruby环境,所以装sass之前先确认装了ruby。先导官网下载个ruby。在安装的时候,请勾选Add Ruby executables to your PATH这个选项,添加环境变量,不然以后使用编译软件的时候会提示找不到ruby环境。安装好ruby后,然后安装Sass。(mac自带)

输入一下命令:

gem install sass

这样,sass就可以使用了。

三、基本使用

Sass 有两种语法。 第一种被称为 SCSS (Sassy CSS),是一个 CSS3 语法的扩充版本;二种比较老的语法成为缩排语法(或者就称为 "Sass"), 提供了一种更简洁的 CSS 书写方式。使用 sass-convert 命令实现两者相互转换。本文介绍的是Scss用法。

# 将 Sass 转换为 SCSS
$ sass-convert style.sass style.scss

# 将 SCSS 转换为 Sass
$ sass-convert style.scss style.sass

3.1 注释

SASS共有两种注释风格。标准的CSS注释 /* comment */ ,会保留到编译后的文件。单行注释 // comment,只保留在SASS源文件中,编译后被省略。在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。

3.2 变量

SASS可以使用变量,所有变量以$开头。如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中。变量后面添加 !default ,表示该值是默认值。

$left: left;

div{
    float: $left;
    margin-#{$left}: 20px;
}

多个变量

多值变量分为list类型和map类型,简单来说list类型有点像js中的数组,而map类型有点像js中的对象。

/* list */
$linkColor:         #08c #333 !default;//第一个值为默认值,第二个鼠标滑过值
a{
  color:nth($linkColor,1);

  &:hover{
    color:nth($linkColor,2);
  }
}

/* map */
$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $key, $value in $headings {
  #{$key} {
    font-size: $value;
  }
}

编译为:
/* list */
a { color: #08c; }
a:hover { color: #333; }

/* map */
h1 { font-size: 2em; }
h2 { font-size: 1.5em; }
h3 { font-size: 1.2em; }

3.3 嵌套

SASS可以使用选择器嵌套。

div {
    img{
        width: 50px;
    }
}

//编译为
div img{ width: 50px; }

属性也可以嵌套,比如 border-color 属性。

div{
    border: {
        color: red;
    }
}

//编译为
div{ border-color: red; }

注意:border后面必须加上冒号。

在嵌套的代码块内,可以使用 & 引用父元素。比如 a:hover 伪类。

a{
    &:hover{
        color: #ccc;
    }
}

//编译为
a:hover{ color: #ccc;}

3.4 @at-root

sass3.3.0中新增的功能,用来跳出选择器嵌套的。默认所有的嵌套,继承所有上级选择器,但有了这个就可以跳出所有上级选择器。适用 BEM 命名方式(如: .block 、.block__element 、.block--modifier)、@keyframe。先看如果使用嵌套写法是什么样的情况。

.block {
    color: red;
    #{&}_element {
        color:blue;
    }
    #{&}--modifier {
        color: orange;
    }
}

编译为
.block { color: red; }
.block .block_element { color: blue; }
.block .block--modifier { color: orange; }

明显编译出来的CSS并不是我们想要的代码。 @at-root 可以实现上面 BEM 的特性。

.block {
    color: red;
    @at-root #{&}_element {
        color:blue;
    }
    @at-root #{&}--modifier {
        color: orange;
    }
}

编译为:
.block { color: red; }
.block_element { color: blue; }
.block--modifier { color: orange; }

3.5 计算

SASS允许在代码中使用算式。这里就不做描述了。

四、代码重用

4.1 继承

SASS通过 @extend 命令使一个选择器class2继承另一个选择器class1

.class1{
    width: 50px / 2;
    height: 50px + 50px;
}
.class2{
    @extend .class1;
    height: 50px;
}

编译为:
.class1, .class2 { width: 50px / 2; height: 100px; }
.class2 { height: 50px; }

编译后以群组选择器方式显示;如果选择器class2不需要选择器class1的某个属性,可添加该属性进行覆盖,并单独显示出来。(看文档的时候总是将群组选择的 “,” 看成 “.”,误认为后代选择器了,所以写出来。)

4.2 Mixin

Sass中使用 @mixin 声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,也可以给参数设置默认值 $opacity:50 ,如果一个参数可以有多组值,如 box-shadow、transition 等,那么参数则需要在变量后加三个点表示,如 $variables... 。使用 @mixin 命令,定义一个代码块。再使用 @include 命令,调用这个 @mixin。

@mixin opacity($opacity:50) {
  opacity: $opacity / 100;
  filter: alpha(opacity=$opacity);
}
.opacity{
  @include opacity;
}
.opacity-80{
  @include opacity(80);
}

编译为:
.opacity { opacity: 0.5; filter: alpha(opacity=50); }
.opacity-80 { opacity: 0.8; filter: alpha(opacity=80); }

4.3 函数

Sass定义了很多函数可供使用,当然你也可以自定义函数,以 @fuction 开始。实际项目中我们使用最多的应该是颜色函数,而颜色函数中又以lighten减淡和darken加深为最,其调用方法为lighten($color,$amount)darken($color,$amount),它们的第一个参数都是颜色值,第二个参数都是百分比。

$color: red;
@function rem($rem){
    @return $rem / 10 + rem;
}
.box{
    foot-size: rem(20);
    color: lighten($color, 20%);
}

编译为:
.box { foot-size: 2rem; color: #ff6666; }

五、高级使用

5.1 条件语句

@if可以用来判断:

p {
  @if 1 + 1 == 2 { border: 1px solid;  }
  @if 5 < 3      { border: 2px dotted; }
  @if null       { border: 3px double; }
}

编译为:
p { border: 1px solid; }

@if 声明可以由几个 @else if语句,一个 @else 声明组成。

$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}

编译为:
p { color: green; }

5.2 循环语句

@for循环:from x to y: 不含y;from x through y:包含y。

@for $i from 1 to 3 {
    .border-#{$i} {
        border: #{$i}px solid blue;
    }
}

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

编译为:
.border-1 { border: 1px solid blue; }
.border-2 { border: 2px solid blue; }
.item-1 { width: 2em; }
.item-2 { width: 4em; }
.item-3 { width: 6em; }

@each

$animal-list: puma, sea-slug, egret, salamander;
@each $animal in $animal-list {
  .#{$animal}-icon {
    background-image: url(‘/images/#{$animal}.png‘);
  }
}

编译为:
.puma-icon { background-image: url("/images/puma.png"); }
.sea-slug-icon { background-image: url("/images/sea-slug.png"); }
.egret-icon { background-image: url("/images/egret.png"); }
.salamander-icon { background-image: url("/images/salamander.png"); }

@while

$i: 6;
@while $i > 0 {
  .item-#{$i} { width: 2em * $i; }
  $i: $i - 2;
}

编译为:
.item-6 { width: 12em; }
.item-4 { width: 8em; }
.item-2 { width: 4em; }

六、编译

在命令行中运行 Sass 进行编译,只要输入:

sass input.scss output.css 

命令 Sass 监视文件的改动并更新 CSS :

sass --watch input.scss:output.css

如果你的目录里有很多 Sass 文件,你还可以命令 Sass 监视整个目录:

sass --watch app/sass:public/stylesheets

在命令行后面添加 --style 编译格式 可以选择编译方式。

编译方式有四种:

  nested(默认):选择器与属性等单独占用一行,缩进量与 Sass 文件中一致,每行的缩进量反映了其在嵌套规则内的层数。当阅读大型 CSS 文件时,这种样式可以很容易地分析文件的主要结构;

  expanded:选择器、属性等各占用一行,属性根据选择器缩进,而选择器不做任何缩进;

  compact:每条 CSS 规则只占一行,包含其下的所有属性。嵌套过的选择器在输出时没有空行,不嵌套的选择器会输出空白行作为分隔符;

  compressed:删除所有无意义的空格、空白行、以及注释,力求将文件体积压缩到最小,同时也会做出其他调整,比如会自动替换占用空间最小的颜色表达方式。

编译错误,命令行中会报错,并提示错误代码行数。

时间: 2024-11-03 05:48:18

前端学习之路——scss篇的相关文章

00 开始技术博客之旅,加速前端学习之路。

第一篇博文 都说程序员是“30IT,30岁挨踢”,其实这是个伪命题,只要自己喜欢学技术,喜欢不断地追新技术,多少岁也不会挨踢.所以,尽管我今年已经27岁了,但是我打算从零开始,希望成为一名前端工程师,目前在家待业,自学中. 说来也可笑,毕业时因为是女生且没有项目经验,很受挫,害怕了,最后没有做程序媛,4年过去了,我依然是个没有项目经验的女生,今天我去参加了我第三次前端实习生的面试,心里也明白是挂了,而且今天的面试官很mean呢,依然很受挫,但是不害怕了. 受挫是难免的,但是每每学完一个知识点,成

jQuery延迟加载(懒加载)插件 – jquery.lazyload.js-Web前端(W3Cways.com) - Web前端学习之路

Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担. Demo页面: 基本选项 淡入效果 对不支持JavaScript浏览器的降级处理 水平滚动 容器内水平滚动 容器内垂直滚动

前端学习之路-CSS介绍,Html介绍,JavaScript介绍

CSS介绍 学前端必备掌握CSS样式,css为层叠样式表,用来定义页面的显示效果,加强用户的体验乐趣,那么如何用css到html中呢? style属性方式 利用标签中的style属性来改变显示样式 <p style="background-color: #FFF000"> p标签 </p> 在head中加入style标签 <head> <style type="text/css"> p { color: #FFF000

我的web前端自学之路-心得篇:我为什么要学习web前端?

时光如流水,转眼间,自己已经是大三的学长了,看着一个个学弟学妹,心中有种莫名的感觉,很怀念大学的前两年时光,但也很憧憬着自己的未来,自己将要去经历很多从未经历的事.我是我们学校信科院的一名学生,在编程方面,一开始只是接触到了C语言,但是c语言对于我来说并不友好,也并不是那么的好学,所以自己对程序不是很有兴趣,但一个偶然的机会,我接触到了web前端,看着我的一个大牛同学用前端 所涉及的语言写出了一些很棒的程序,于是就产生了一种很想学习前端的想法和很想把前端做的完美的渴望,于是,就开始了我的前端之路

前端学习之路

转载自:https://github.com/qiu-deqing/FE-learning必备基础技能 前端技能汇总(https://github.com/JacksonTian/fks)这个项目详细记录 了前端工程师牵涉到的各方面知识.在具备基本技能之后可以在里面找到学习 的方向,完善技能和知识面. frontend-dev-bookmarks(https://github.com/dypsilon/frontend-dev-bookmarks)是老外总结的前端开发资源.覆盖面非常广.包括各种

我的web安全工程师学习之路——规划篇

据网上收集的web安全工程师需要掌握哪些技能,职位要求以及如何入门,加上学习网易推出的web安全工程师微专业课程,为了进一步学习,所以给自己做了一些小小规划,也希望给同样想成为web安全工程师的同仁们一些参考. 第一部分--基础学习 1#web安全工程师职位描述与要求: 2#需要掌握基础分层图: !--首先在我们入门前,肯定需要知道什么是web,一个网站是怎么搭建的?--! 3#基础学习--静态层根据上面的分层学习,第一步进行静态层的学习,包括HTML和javascript.关于入门掌握的程度:

引用类型-Array类型~ 前端学习之路

今天开始记录每天所学的重点,为了加深印象也为了今后的复习. 今天学习的重点是引用类型中Array类型,Array类型中的栈方法,队列方法,重排序方法,操作方法,位置方法,迭代方法,归并方法.这几个方法我感觉尤为重要,因此记录下来,以便忘记了可以回顾. (一)栈方法 首先要知道的是栈是一种后进先出的数据结构,也就是最先添加的项最先移除.在JS中提供有两种方法,push()和pop()方法是实现类似于栈的行为. push()方法可以接受任意数量的参数,并且把它们放在数组的末尾,最后返回修改后数组的长

web前端学习之路

test 随着自己对于web前端知识了解的越多,越来越发现自己真的好菜 一脸茫然阶段 两年前大学接触网页设计,那时对于网页设计一窍不通,只是看了一本自己大学编的一本入门教材,我甚至不知道那些网页设计的代码是干什么用的,大学的老师自己讲的很投入,然而我并不懂.最后考试他就划了重点.我们只要记一些简单的html代码,那时的我还不知道什么是盒子模型,不知道什么是css,怎么外部引用css和javascript,只是对一些标签眼熟 初识网页设计 去年的暑假,那时无意中看到了一个视频,视频是教你怎么在十分

IOS开发学习之路--第一篇--准备和说明

经过1个多月的对Objective-C的学习和了解,对其也有一定的认识,但是仅仅是了解,还需要今后的不断熟练和摸索才能掌握. 从现在写这个文章起,正式进入了学习IOS开发之路.之前看了很多人发表自己的论坛或者博客,觉得自己也该有这个东西,不仅可以充实学习内容,也是积累知识的过程.同时也可以总结学习过程中的各种方法. 长风破浪会有时,直挂云帆济沧海!每天进步一点点,生活乐趣大点点! 学习IOS开发,主要的学习资料: 1)OC基础,李明杰IOS开发基础视频(C和OC)经典 2)IOS开发技术,黑马2