资讯专栏INFORMATION COLUMN

[Sass]-Sass入门

godiscoder / 1369人阅读

摘要:未编译样式多继承链式继承占位选择器编译后样式中使用声明混合,可以传递参数,参数名以符号开始,多个参数以逗号分开,也可以给参数设置默认值。

初识Sass SASS简介

sass是一种css预处理器,用专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。Sass是CSS3的扩展,它增加了嵌套规则,变量,mixins,选择器继承等等。Sass生成格式良好的CSS,使样式表更易于组织和维护。

.sass和.scss区别:

.sass最初是为了配合haml而设计,所有有着和haml一样的缩进风格,从第三代开始,保留缩进风格,完全向下兼容普通的css代码。推荐使用.scss

compass 是一个开源的css创作框架(一个技术类库)。在sass基础上封装了一系列有用的模块和模板,补充sass的功能

推荐链接: sass中文网 | sass入门 | sass用法指南-阮一峰

安装

window下安装SASS首先需要安装 (Ruby)[https://rubyinstaller.org/dow...
安装过程中请注意勾选Add Ruby executables to your PATH添加到系统环境变量。

安装完成后需测试安装有没有成功,运行CMD输入ruby -v。如安装成功会打印ruby版本号

更换gem源(使用淘宝的gem源https://ruby.taobao.org/)

1.删除原gem源gem sources --remove https://rubygems.org/

2.添加国内淘宝源gem sources -a https://ruby.taobao.org/

3.打印是否替换成功gem sources -l

4.更换成功后打印如下:

*** CURRENT SOURCES ***
https://ruby.taobao.org/

安装Sass和Compass

//安装如下(如mac安装遇到权限问题需加 sudo gem install sass)
gem install sass
gem install compass

sass常用更新、查看版本、sass命令帮助等命令:

//更新sass
gem update sass

//查看sass版本
sass -v

//查看sass帮助
sass -h

编译sass

sass编译有很多种方式,如命令行编译模式、sublime插件SASS-Build、编译软件koala、前端自动化软件codekit、Grunt打造前端自动化工作流grunt-sass、Gulp打造前端自动化工作流gulp-ruby-sass等。

//单文件转换命令
sass input.scss output.css

//单文件监听命令
sass --watch input.scss:output.css

//如果你有很多的sass文件的目录,你也可以告诉sass监听整个目录:
sass --watch app/sass:public/stylesheets

//编译格式
sass --watch input.scss:output.css --style compact

//编译添加调试map
sass --watch input.scss:output.css --sourcemap

//选择编译格式并添加调试map
sass --watch input.scss:output.css --style expanded --sourcemap

//开启debug信息
sass --watch input.scss:output.css --debug-info
数据类型

Number

String

List

Map

Color

Boolean

Null

// 数字类型
$n1: 1.2;
$n2: 12;
$n3: 12px;

// 字符串类型
$s1: content;
$s2: "content";

// bool类型
$true: true;
$false: false;

// Null 类型
$null: null;

// color 类型
$c1: blue;
$c2: #000;
$c3: rbga(0,0,0,0.3);

.#{$s1}{
    @if $null == null {
        font-size: $n3
    }
}
变量

sass的变量必须是$开头,后面紧跟变量名,而变量值和变量名之间就需要使用冒号(:)分隔开(就像CSS属性设置一样),如果值后面加上!default则表示默认值。

默认变量

sass的默认变量仅需要在值后面加上!default即可。

sass的默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式也很简单,只需要在默认变量之前重新声明下变量即可

多值变量

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

list。list数据可通过空格,逗号或小括号分隔多个值,可用nth($var,$index)取值

map。map数据以key和value成对出现,其中value又可以是list。格式为:$map: (key1: value1, key2: value2, key3: value3);。可通过map-get($map,$key)取值。

全局变量

在{}内定义的变量,在{}外访问不到。如果需要在全局访问,需要在变量值后面加上!global即为全局变量。

特殊变量

一般我们定义的变量都为属性值,可直接使用,但是如果变量作为属性或在某些特殊情况下等则必须要以#{$variables}形式使用。

未编译样式 Scss

body {
    $c_blue: blue;

    header {

        // 局部变量
        $c_red: red;

        // 全局变量
        $c_yellow: yellow !global;
        color: $c_red; 

        // 默认变量
        $fz: 14px;
        $fz: 12px !default;
        font-size: $fz;

        // 多值变量
        $padding: 2px 4px 6px 8px; // 类似数组
        padding: $padding;
        padding-left: nth($padding, 1); // 下标从1开始

        $maps: (color:red, fz: 13px); // 类似json
        background: map-get($maps, color);

        // 特殊变量
        $display: disp;
        
        .#{$display}{
            width: 10px;
            height: 10px;
        }
    }
    footer {
        color: $c_blue;
        color: $c_yellow;
        // color: $c_red; // Undefined variable: "$color".
    }
}

编译后样式 Css

body header {
  color: red;
  font-size: 14px;
  padding: 2px 4px 6px 8px;
  padding-left: 2px;
  background: red; }
  body header .disp {
    width: 10px;
    height: 10px; }
body footer {
  color: blue;
  color: yellow; }

/*# sourceMappingURL=test.css.map */
导入

sass的导入(@import)规则和CSS的有所不同,编译时会将@import的scss文件合并进来只生成一个CSS文件。

原生css导入

如果在sass文件中导入css文件如@import "reset.css",那效果跟普通CSS导入样式文件一样,导入的css文件不会合并到编译后的文件中,而是以@import方式存在。
以下为原生css导入:

被导入文件的名字以.css结尾
@import "***.css"

被导入文件的名字是一个URL地址
@import "http://***"

被导入文件的名字是css的url{}值
@import url(*.css)

Sass导入

所有的sass导入文件都可以忽略后缀名.scss。一般来说基础的文件命名方法以_开头,如_mixin.scss。这种文件在导入的时候可以不写下划线,可写成@import "mixin"

嵌套 选择器嵌套

选择器嵌套指的是在一个选择器中嵌套另一个选择器来实现继承,从而增强了sass文件的结构性和可读性。

& 父选择器的标识符

&表示父元素选择器,常用 &:hover

群组选择器的嵌套
.container {
  h1, h2, h3 {margin-bottom: .8em}
}
子组合选择器和同层组合选择器 > +和~

子组合选择器>选择一个元素的直接子元素。(只会选择article下紧跟着的子元素中命中section选择器的元素)

article > section { border: 1px solid #ccc }

同层相邻组合选择器+选择header元素后紧跟的元素

header + p { font-size: 1.1em }

同层全体组合选择器~,选择所有跟在article后的同层article元素,不管它们之间隔了多少其他元素

article ~ article { border-top: 1px dashed #ccc }
属性的嵌套

属性嵌套指的是有些属性拥有同一个开始单词,如border-width,border-color都是以border开头。

border后面必须加上冒号

@at-root 跳出嵌套

@at-root
用来跳出选择器嵌套的。默认所有的嵌套,继承所有上级选择器,但有了这个就可以跳出所有上级选择器。

@at-root (without: ...)和@at-root (with: ...)
默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support,如果要跳出这两种,则需使用@at-root (without: media),@at-root (without: support)。这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support,因为@support目前还无法广泛使用,所以在此不表)。我们默认的@at-root其实就是@at-root (without:rule)。

@at-root &组合

未编译样式 Scss

body {
    header {
        border: {
            color: red;
            radius: 5px;
        }

        a {
            text-align: center;

            &:hover {
                text-align: left;
            }
            @at-root .content {
                width: 100px;
            }
        }
    }
}
@media screen and (max-width:520px){
    @at-root (without:media rule){
        .content {
            height: 200px;
        }
    }
}
@at-root .text-info {
    color: red;

    @at-root nav &{
        color: blue;
    }
}

编译后样式 Css

body header {
  border-color: red;
  border-radius: 5px; }
  body header a {
    text-align: center; }
    body header a:hover {
      text-align: left; }
    .content {
      width: 100px; }

.content {
  height: 200px; }
.text-info {
  color: red; }
  nav .text-info {
    color: blue; }
继承

选择器继承可以让选择器继承另一个选择器的所有样式,并联合声明。使用选择器的继承,要使用关键词@extend,后面紧跟需要继承的选择器。

多继承

一个选择器中有多个继承

链式继承

.b 继承.a, .c 继承.b ...

局限性

不支持包含选择器(.a .b),相邻兄弟选择器(.a + .b)
a如果有:hover ,hover状态也被继承

占位选择器 %

如果不调用则不会有任何多余的css文件,避免了以前在一些基础的文件中预定义了很多基础的样式,然后实际应用中不管是否使用了@extend去继承相应的样式,都会解析出来所有的样式。占位选择器以%标识定义,通过@extend调用。

未编译样式 Scss

.header {
    background: blue;
}
.footer {
    font-size: 12px;
}
.sidebar {
    width: 12px
}
.content {
    height: 13px
}
// 多继承
.content-header {
    @extend .header;
    @extend .footer;
    @extend .sidebar, .content;
    color: red;
}

// 链式继承
.a {
    width: 12px
}
.b {
    @extend .a;
    height: 13px;
}
.c {
    @extend .b;
    border: 2px;
}

// 占位选择器 %
%d {
    width: 12px
}

.e {
    @extend %d;
    height: 13px
}

编译后样式 Css

.header, .content-header {
  background: blue; }

.footer, .content-header {
  font-size: 12px; }

.sidebar, .content-header {
  width: 12px; }

.content, .content-header {
  height: 13px; }

.content-header {
  color: red; }

.a, .b, .c {
  width: 12px; }

.b, .c {
  height: 13px; }

.c {
  border: 2px; }

.e {
  width: 12px; }

.e {
  height: 13px; }
mixin

sass中使用@mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,也可以给参数设置默认值。声明的@mixin通过@include来调用。
混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left。混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变量,输出多样化的样式。

无参数mixin
//sass style
//-------------------------------
@mixin content {
    margin-left:auto;
    margin-right:auto;
}
.demo{
    @include content;
}

//css style
//-------------------------------
.demo{
    margin-left:auto;
    margin-right:auto;
}
有参数mixin
@mixin cont($fz: 14px){
    font-size: $fz;
}
body {
    @include cont(12px) 
}
多个参数mixin

调用时可直接传入值,如@include传入参数的个数小于@mixin定义参数的个数,则按照顺序表示,后面不足的使用默认值,如不足的没有默认值则报错。除此之外还可以选择性的传入参数,使用参数名与值同时传入。

@mixin cont($color: red,$fz: 14px){
    color: $color;
    font-size: $fz;
}
body {
    @include cont($fz: 12px) 
}
多组值参数mixin

如果一个参数可以有多组值,如box-shadow、transition等,那么参数则需要在变量后加三个点表示,如$shadow...

@mixin box-shadow($shadow...){
    -moz-box-shadow: $shadow;
    -webkit-box-shadow: $shadow;
    box-shadow: $shadow;
}
.shadow{
    @include box-shadow(0px 2px 3px #ccc, 4px 5px 6px #f2f)
}
@content

可以用来解决css3的@media等带来的问题。它可以使@mixin接受一整块样式,接受的样式从@content开始。

@mixin style-for-iphone {
    @media only screen and (min-device-width: 320px) and (max-device-width: 568px){
        @content;
    }
}
@include style-for-iphone{
    font-size: 12px;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/112617.html

相关文章

  • sass入门初体验

    摘要:接上文入门初体验,接下来讲讲,有两种文件后缀名,一种是,另一种是。 接上文less入门初体验,接下来讲讲sass,sass有两种文件后缀名,一种是.sass,另一种是.scss。前者类似于ruby的语法规则,没有花括号,没有分号,具有严格的缩进;而后者更贴近于css的语法规则,易于阅读,更具语义性,所以本文采用.scss后缀名来编写sass代码 编译 1、Ruby:sass是由Rub...

    aisuhua 评论0 收藏0
  • 前端利器:SASS基础与Compass入门

    摘要:在吸取了的一些特性基础上,有了大幅改进,也就是现在的。嵌套极大程度上降低了选择器名称和属性的重复书写。选择器嵌套选择器嵌套是指从一个选择器中嵌套子选择器,来实现选择器的继承关系。也已经成为的一个标配组件。 SASS是Syntactically Awesome Stylesheete Sass的缩写,它是css的一个开发工具,提供了很多便利和简单的语法,让css看起来更像是一门...

    娣辩孩 评论0 收藏0
  • SASS入门

    摘要:阮一峰用法指南简单入门结一语法较为详细安装可用一键安装下载有点慢,记得把第二个给选了安装完成后记得重启使用查看是否安装成功。安装在中输入关于与文件这两种的区别在于文件对代码的排版有着非常严格的要求,而且没有大括号,没有分号。 阮一峰(简单入门)结一(较为详细) 1.安装Ruby windows可用RubyInstaller一键安装RubyInstaller 下载有点慢,be patie...

    edagarli 评论0 收藏0
  • vue入门文章

    摘要:本来想自己写一篇关于入门的文章。后面可能在这篇文章基础上,有所内容的增加。预处理器定义了一种新的专门的编程语言,编译后成正常的文件。 本来想自己写一篇关于vue入门的文章。但是看到链接的文章后,觉得写得太详细了,实在有保存下来的必要。后面可能在这篇文章基础上,有所内容的增加。 CSS预处理器 定义了一种新的专门的编程语言,编译后成正常的CSS文件。为CSS增加一些编程的特性,无需考虑浏...

    seanHai 评论0 收藏0
  • webpack配置sass模块的加载

    摘要:管理的项目,我们希望用定义样式,为了正常编译,需要做如下配置。这里不讲的入门,入门的文章,我推荐这篇入门。webpack管理的项目,我们希望用sass定义样式,为了正常编译,需要做如下配置。这里不讲webpack的入门,入门的文章,我推荐这篇《webpack入门》。   为了使用sass,我们需要安装sass的依赖包 //在项目下,运行下列命令行 npm install --save-de...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

godiscoder

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<