SCSS入门

1. CSS预处理器

  • 定义了一种新的专门的编程语言,编译后成正常的CSS文件。为CSS增加一些编程的特性,无需考虑浏览器的兼容问题,让CSS更加简洁,适应性更强,可读性更佳,更易于代码的维护等诸多好处。
  • CSS预处理器语言:scss(sass)、LESS等;

2.Sass和SCSS的区别

  • 文件扩展名不同:“.sass”和“.scss”;
  • Sass是以严格缩进式语法规则来书写的,不带大括号和分号;而SCSS的语法和CSS书写语法类似。

3.Sass安装(Windows版)

Paste_Image.png

  • 安装sass:
  • 方法一(通过命令安装sass):打开命令终端,输入:gem install sass
  • 方法二(本地安装sass):从http://rubygems.org/gems/sass 下载sass安装包,然后在终端输入: “gem install <把下载的安装包拖到这里>” 然后直接额回车即可安装成功。

4.scss语法格式

css代码:

body {
        font: 100% Helvetica, sans-serif;
        color: #333;
    }

使用scss代码:

$font-stack: Helvetica, sans-serif;
    $primary-color: #333;
    body {
        font: 100% $font-stack;
        color: $primary-color;
    }

tip:如果使用sass旧语法(sass语法),文件后缀名应为“.sass”;如果使用sass新语法(scss语法),文件后缀名应为".scss“语法,否则编译时编译不出来。

5. sass编译

5.1 sass编译的方法:

  • 命令编译
  • GUI工具编译
  • 自动化编译

5.1.1 sass命令编译(在命令终端输入sass指令来编译sass,最直接,最简单)

  • 单文件编译:
sass <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css
  • 多文件编译:
sass sass/:css/

上面的命令表示将项目中“sass”文件夹中所有“.scss”(“.sass”)文件编译成“.css”文件,并且将这些 CSS 文件都放在项目中“css”文件夹中。

  • 缺点及解决方法:

    缺点:每次保存scss文件后都要重新编译太麻烦;

    解决方法:开启“watch”功能:

sass --watch <要编译的Sass文件路径>/style.scss:<要输出CSS文件路径>/style.css
  • tip:文件路径不要带中文,如果有中文,watch功能无法正常使用。

6.sass嵌套输出方式nested

Paste_Image.png

只要在编译的时候带上参数“ --style nested”:

sass --watch test.scss:test.css --style nested

7.sass展开输出方式expanded

Paste_Image.png

在编译的时候带上参数“ --style expanded”:

sass --watch test.scss:test.css --style expanded

8.sass展开输出方式compact

Paste_Image.png

在编译的时候带上参数“ --style compact”:

sass --watch test.scss:test.css --style compact

9.sass展开输出方式compressed

Paste_Image.png

在编译的时候带上参数“ --style compressed”:

sass --watch test.scss:test.css --style compressed

10.sass变量声明

$+变量名+:+变量值;

$width:200px;

11.普通变量和默认变量

  • 普通变量声明后可以在全局范围内使用;
  • 默认变量仅需在值后面加上!default 即可;
  • 默认变量一般是用来设置默认值,然后根据需求来覆盖的,覆盖的方式是在默认变量之前重新声明下变量即可。默认变量的价值在进行组件化开发的时候会非常有用。
$baseLineHeight: 2;
$baseLineHeight: 1.5 !default;
body {
       line-height: $baseLineHeight;
}

编译后的CSS代码:

body {
        line-height:2;
}

12.局部变量和全局变量

  • 局部变量:在元素里面声明的变量;
  • 全局变量:在元素外面定义的变量;
  • 全局变量的影子:和全局变量名字相同的局部变量叫做全局变量的影子。
$color:green;//全局变量
$width:200px;//全局变量
$height:200px;//全局变量
body {
    background-color:$color;//调用全局变量
}
div {
    $color:yellow;//定义局部变量,全局变量$color的影子
    .div {
    background-color:$color;//调用局部变量
    width:$width;//调用全局变量
    height:$height;//调用全局变量
    }
}

13.sass嵌套

13.1 选择器嵌套

<header>
    <nav>
        <a href="#">home</a>
        <a href="#">page</a>
    </nav>
</header>

css:

    nav a {
        color:red;
    }
    header nav a {
        color:green;
    }

scss:

nav {
  a {
    color: red;

    header & {
      color:green;
    }
  }
}

13.2 属性嵌套(有相同的属性前缀)

css:

.box {
     font-size: 12px;
     font-weight: bold;
}

scss:

.box {
  font: {
   size: 12px;
   weight: bold;
  }
}

13.3 伪类嵌套

scss:

.clearfix{
&:before,
&:after {
    content:"";
    display: table;
  }
&:after {
    clear:both;
    overflow: hidden;
  }
}

css:

clearfix:before, .clearfix:after {
  content: "";
  display: table;
}
.clearfix:after {
  clear: both;
  overflow: hidden;
}

14. sass混合宏

14.1 声明混合宏

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

@mixin :声明混合宏的关键词;

border-radius:混合宏的名称;

大括号内:复用的样式代码;

14.2 调用混合宏

@mixin border-radius{
    -webkit-border-radius: 3px;
    border-radius: 3px;
}//声明混合宏border-radius
button {
    @include border-radius;
}//调用混合宏border-radius

编译为CSS:

button {
  -webkit-border-radius: 3px;
  border-radius: 3px;
}

14.3 混合宏的参数

  • 不带任何值的参数
@mixin border-radius($radius){
  -webkit-border-radius: $radius;
  border-radius: $radius;
}//声明一个带有参数$radius的混合宏
.box {
  @include border-radius(3px);//调用混合宏并给混合宏传参数“3px”
}
  • 传一个带值参数(传入一个默认值)
@mixin border-radius($radius:3px){
  -webkit-border-radius: $radius;
  border-radius: $radius;
}//声明一个传入了默认参数值的混合宏
.btn {
  @include border-radius;//使用默认参数值的混合宏
}
.box {
  @include border-radius(50%);//可以自己传入参数值
}

编译出来的CSS:

.btn {
  -webkit-border-radius: 3px;
  border-radius: 3px;
}
.box {
  -webkit-border-radius: 50%;
  border-radius: 50%;
}
  • 传多个参数值
@mixin size($width,$height){
  width: $width;
  height: $height;
}
.box-center {
  @include size(500px,300px);
}

编译出来的css:

.box-center {
  width: 500px;
  height: 300px;
}

15.sass 继承

scss:

.btn {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
}
.btn-primary {
  background-color: #f36;
  color: #fff;
  @extend .btn;
}

编译出来后:

.btn, .btn-primary {
  border: 1px solid #ccc;
  padding: 6px 10px;
  font-size: 14px;
 }
.btn-primary {
  background-color: #f36;
  color: #fff;
}

在sass中的继承,可以继承类样式块中所有样式代码,而且编译出来的css会将选择器合并在一起,形成组合选择器。

16.sass占位符%

用占位符声明的代码,如果不被@extend调用就不会被编译。

%mt5 {
  margin-top: 5px;
}
%pt5{
  padding-top: 5px;
}
.btn {
  color:red;
}

编译后:

.btn {
    color:red;
}//%占位符声明的代码没有被编译产生css代码

使用@extend调用:

%mt5 {
  margin-top: 5px;
}
%pt5{
  padding-top: 5px;
}
.btn {
  @extend %mt5;//使用@extend调用占位符代码
  @extend %pt5;
}
.block {
  @extend %mt5;
  span {
    @extend %pt5;
  }
}

编译后的css代码:

.btn, .block {
  margin-top: 5px;
}
.btn, .block span {
  padding-top: 5px;
}

通过@extend调用的占位符,编译出来的代码会将相同的代码合并在一起,代码变得十分简洁。

17.sass插值

$properties: (margin, padding);
@mixin set-value($side, $value) {
    @each $prop in $properties {//对每个在$properties中的$prop,即$properties中的margin、padding
        #{$prop}-#{$side}: $value;//$prop连接参数$side,值为参数$value
    }
}
.login-box {
    @include set-value(top, 14px);//调用混合宏
}

编译出来的css:

.login-box {
  margin-top: 14px;
  padding-top: 14px;
}

不可以:

$margin-big: 40px;
$margin-medium: 20px;
$margin-small: 12px;
@mixin set-value($size) {
    margin-top: $margin-#{$size};
}
.login-box {
    @include set-value(big);
}

也不可以:

@mixin updated-status {
    margin-top: 20px;
    background: #F00;
}
$flag: "status";
.navigation {
    @include updated-#{$flag};
}

可以在使用@extend时使用插值:

%updated-status {
    margin-top: 20px;
    background: #F00;
}
.selected-status {
    font-weight: bold;
}
$flag: "status";
.navigation {
    @extend %updated-#{$flag};
    @extend .selected-#{$flag};
}

18. sass 注释

  • /*注释内容*/ :会在编译出来的css文件中显示
  • //注释内容 :不会在编译出来的css文件中显示
//定义一个占位符
%mt5 {
  margin-top: 5px;
}
/*调用一个占位符*/
.box {
  @extend %mt5;
}

编译出来的css:

.box {
  margin-top: 5px;
}
/*调用一个占位符*/

19. sass运算

19.1 sass 加法/减法

变量或属性中都可以做加法/减法运算

.box {
  width: 20px + 8in;
  height:20px - 5px;
}

编译出来的css:

.box {
  width: 788px;
  height:25px;
}

不用类型的单位做加法/减法会报错:

.box {
  width: 20px + 1em;//不同类型单位不能做加法
}

19.2 sass 乘法

这样子会有问题:

.box {
  width:10px * 2px;
}

应该这样子:

.box {
  width: 10px * 2;
}

编译出来的css:

.box {
  width: 20px;
}
  • 同加法减法一样,不同类型单位做乘法也会报错。

19.3 sass除法

  • 如果除式中没有变量或者不是在一个数学表达式中(有加法减法等),就要将除式运算用小括号括起来,否则“/”不会被当做除号运算。
p {
  font: 10px/8px;             // 纯 CSS,不是除法运算
  $width: 1000px;
  width: $width/2;            // 使用了变量,是除法运算
  width: round(1.5)/2;        // 使用了函数,是除法运算
  height: (500px/2);          // 使用了圆括号,是除法运算
  margin-left: 5px + 8px/2px; // 使用了加(+)号,是除法运算
}

编译出来的css:

p {
  font: 10px/8px;//这种是无意义的css
  width: 500px;
  height: 250px;
  margin-left: 9px;
 }
  • 除法中相同单位相除不会报错,会产生一个无单位的值:
.box {
  width: (1000px / 100px);
}

编译出来的css:

.box {
  width: 10;
}

19.4 sass 变量计算

$content-width: 720px;
$sidebar-width: 220px;
$gutter: 20px;
.container {
  width: $content-width + $sidebar-width + $gutter;
}

编译出来的css:

.container {
  width: 960px;
}

19.5 sass数字运算

.box {
  width: ((220px + 720px) - 11 * 20 ) / 12 ;
}

编译出来的css:

.box {
  width: 60px;
}

19.6 sass颜色运算

所有算术运算都支持颜色值,并且是分段计算的。

p {
  color: #010203 + #040506;
}

计算公式为 01 + 04 = 05、02 + 05 = 07 和 03 + 06 = 09, 并且被合成为:

p {
  color: #050709;
}
  • 数字和颜色一起运算:
p {
  color: #010203 * 2;
}

计算公式为 01 * 2 = 02、02 * 2 = 04 和 03 * 2 = 06, 并且被合成为:

p {
  color: #020406;
}

19.7 sass 字符运算

  • 用“+”对字符串进行连接:
$content: "Hello" + "" + "Sass!";
.box:before {
  content: " #{$content} ";
}

编译出来的css:

.box:before {
  content: " Hello Sass! ";
}
  • 可以使用“+”直接连接字符:
div {
  cursor: e + -resize;
}

编译出来的css:

div {
  cursor: e-resize;
}
  • 有引号的字符串和没有引号的字符串相加,看哪个在“+”号的左边,如果有引号的在左边,结果为有引号的;如果没有引号的在左边,结果为没有引号的:
p:before {
  content: "Foo " + Bar;
  font-family: sans- + "serif";
}

编译出来的css:

p:before {
  content: "Foo Bar";
  font-family: sans-serif; }

链接:https://www.jianshu.com/p/fa379a309c8a
來源:简书

原文地址:https://www.cnblogs.com/xfcao/p/10265761.html

时间: 2024-08-26 15:14:32

SCSS入门的相关文章

scss 入门

scss 入门 1. scss 引入其他文件 引入其他 .scss 文件 @import 'index.scss' 这样的话,文件在编译后,会自动把引入的文件和当前文件合并为一个. scss 文件 引入其他 .css 文件 @import 'index.css' 和引入. scss 文件不同,这样引入的. css 文件在编译后不会和当前文件合并为一个. scss 文件,而是继续保持为外链引入方式 2. scss 注释方法 scss 的注释有两种 块注释 /* */ 行注释 // 3. scss

sass或scss入门

1.sass环境搭载: 安装ruby 安装sass 安装compass 配置webstorm 如果只是使用sass的话,就配置sass命名监听就好了 如图: sass目录如下: 如果配置了compass要监听compass命令,如图: compass目录如下: 2.基本语法: @import "compass/css3"; @import "compass/layout"; @import "compass/typography"; @impor

sass.scss简单入门

最近研究了一下sass和scss,清晰结构化,在某些地方的确强大,所以写了一篇入门教程,大概15分钟左右就能明白基本原理 什么是sass(css预处理器) Sass官网上是这样描述sass的,sass是一门高于css的元语言,他能用来清晰地,结构化的描述文件样式,有着比普通css功能更加强大的功能,sass能提供更简洁,更优雅的语法,同时提供多种功能来穿件可维护和管理的样式表. SASS 和 SCSS 有什么区别? 文件扩展名不同,Sass 是以".sass"后缀为扩展名,而 SCSS

rem 结合 scss 移动端自适应 初级入门demo

首先说明 本篇 内容 适合初级使用 rem 开发移动端 自适应 公式计算 推导过程, 高手绕路. 目标尺寸 = rem  *  根字体大小 根字体大小 = 比例值 = 屏幕尺寸宽度/PSD稿尺寸宽度 目标尺寸 = rem  *  屏幕尺寸宽度/PSD稿尺寸宽度 Px    =  rem * (html根字体px) Html跟字体浏览器支持 最小 12像素, 避免过小加权 系数 n 实际尺寸                                 实际尺寸              屏幕尺

Gulp新手入门教程

Gulp 是一个自动化工具,前端开发者可以使用它来处理常见任务: 搭建web服务器 文件保存时自动重载浏览器 使用预处理器如Sass.LESS 优化资源,比如压缩CSS.JavaScript.压缩图片 当然Gulp能做的远不止这些.如果你够疯狂,你甚至可以使用它搭建一个静态页面生成器.Gulp真的足够强大,但你必须学会驾驭它. 这是这篇文章的主要目的.帮助你了解Gulp的基础用法,助你早日完成一统天下的大业. 在我们深入了解之前,我们先来说说为什么是Gulp. 为什么是Gulp? 类似Gulp的

gulp入门

入门 http://www.tuicool.com/articles/FJVNZf 1.全局安装 sudo npm install -g gulp 以下需要进入项目目录: 2.项目安装 如果项目需要其他nodejs其它包,请先创建package.json,只用gulp,可以直接使用下面命令 cnpm install --save-dev gulp 3.安装gulp组件 例如: npm install gulp-jshint gulp-sass gulp-concat gulp-uglify gu

22--Rails快速入门总结

Rails的快捷最主要归功于ruby语言的特性,这个快速入门始终是入门而已.想要学好rails还是需要打好ruby基础,不要rails的进阶那些,没有良好的ruby基础是学不好的. Rails涉及的coffeescript和scss都是基于javascript和css的,我们要先进一步熟悉javascript和css这样用起来就很方便了,因为这两个就是简单地修改了用法使得开发更加快捷而已. ?

vue2.0入门

vue2.0 开发实践总结之入门篇 vue2.0 据说也出了很久了,博主终于操了一次实刀. 整体项目采用  vue +  vue-router +  vuex (传说中的vue 全家桶 ),构建工具使用尤大大推出的vue-cli 后续文章:如果有兴趣,可以移步  vue2.0 开发实践总结之疑难篇 项目是图片分享社交平台.   项目预览: 1 .vue-cli构建工具必知  我选用的vue-cli 是基于webpack的版本 ,不了解webpack的可以先粗略看下下面的基本知识 webpack

sass入门

sass入门 什么使sass呢?学过变成语言的人都知道,它不是一种编程语言! 我们知道,css基本上不是程序员的工具,因为它很麻烦,没有变量,没有条件语句,而只是一行行的单纯的描述,非常的不方便!正基于此,有人开始为了更方便地编写css来给css加入了编程元素,这就是“css预处理器(css proprocessor)”-----用一种专门的编程语言来设计样式,然后经过编译生成正常的css文件. 当然,css预处理器不仅仅有sass还有less,这两个css预处理器都非常流行,这里我们先来认识s