scss 实用教程

变量 $

定义变量

css 复制代码
$link-color: 'blue';

变量名可以与css中的属性名和选择器名称相同

使用变量

css 复制代码
a {
  color: $link_color;
}
css 复制代码
$highlight-border: 1px solid $link_color;

中划线和下划线相互兼容,即中划线声明的变量可以使用下划线的方式引用,反之亦然。

css 复制代码
$link-color: blue;
a {
  color: $link_color;
}

变量作用域

{}中定义的变量为局部变量,仅在{}内有效

css 复制代码
$nav-color: #F90;
nav {
  $width: 100px;
  width: $width;
  color: $nav-color;
}

变量默认值

css 复制代码
$fancybox-width: 400px !default;
.fancybox {
    width: $fancybox-width;
}

若导入的sass局部文件声明了$fancybox-width变量,则默认值无效,否则$fancybox-width将默认为400px

vscode中高亮显示scss代码

安装插件------Beautify css/sass/scss/less

新建文件 test.scss,写入代码

css 复制代码
$link-color: 'blue';

a {
  color: $link_color;
}

效果如下

vscode中实时编译scss---查看最终css效果

安装插件------Live Sass Compiler

点击vscode下边栏的 Watch Sass

此时在 test.scss 同目录下会生成文件 test.css,其内容为

修改 test.scss 中的代码,test.css 会同步编译,方便实时查看最终css效果

样式嵌套

html 复制代码
<div class="diary">
    <h1 class="title">标题</h1>
    <p class="content">内容</p>
</div>
css 复制代码
.diary {
    .title {
        color: red;
    }
    .content {
        color: blue;
    }
}

使用伪类选择器时,需要配合&符号,此时&表示父元素

css 复制代码
a{
    color: green;
    &:hover{
        color: yellow;
    }
}

属性嵌套

方式一

css 复制代码
nav {
  border: {
      style: solid;
      width: 1px;
      color: #ccc;
  }
}

转化为css后,效果如下:

css 复制代码
nav {
  border-style: solid;
  border-width: 1px;
  border-color: #ccc;
}

方式二

css 复制代码
nav {
  border: 1px solid #ccc {
      left: 0px;
      right: 0px;
  }
}

转化为css后,效果如下:

css 复制代码
nav {
  border: 1px solid #ccc;
  border-left: 0px;
  border-right: 0px;
}

静默注释 //

静默注释是一种内容不会出现在生成的css文件中的注释

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

当/* ... */注释出现在原生css不允许的地方,如在css属性或选择器中,这些注释也会被抹掉。

css 复制代码
body {
  color /* 这块注释内容不会出现在生成的css中 */: #333;
  padding: 1; /* 这块注释内容也不会出现在生成的css中 */ 0;
}

循环 @for

css 复制代码
@for $i from 1 to 4 {
  .pd#{$i} {
    padding: $i*10 + px;
  }
}

转化为css后,效果如下:

css 复制代码
.pd1 {
  padding: 10px;
}

.pd2 {
  padding: 20px;
}

.pd3 {
  padding: 30px;
}

@for 内可同时循环生成多个样式

css 复制代码
@for $i from 1 to 4 {
  .pd#{$i} {
    padding: $i*10 + px;
  }

  .mr#{$i} {
    margin: $i*10 + px;
  }
}

from to 改为 from through 则包含边界

css 复制代码
@for $i from 1 through 4 {
  .pd#{$i} {
    padding: $i*10 + px;
  }
}

得到

css 复制代码
.pd1 {
  padding: 10px;
}

.pd2 {
  padding: 20px;
}

.pd3 {
  padding: 30px;
}

.pd4 {
  padding: 40px;
}

混合器 @minxin

用于给一大段样式赋予一个名字,方便样式的复用

和CSS类名的区别是,CSS类名是在html中使用,混合器是在样式代码中使用。

定义混合器 @mixin

css 复制代码
@mixin mark {
  color: red;
  background: yellow;
}

使用混合器 @include

css 复制代码
.note {
  font-weight: bold;
  @include mark
}

最终css效果

css 复制代码
.note {
    font-weight: bold;
    color: red;
    background: yellow;
}

可传参的混合器

类似JavaScript里的function

css 复制代码
@mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

调用时直接传参

css 复制代码
a {
  @include link-colors(blue, red, green);
}

最终生成的css效果如下

css 复制代码
a { color: blue; }
a:hover { color: red; }
a:visited { color: green; }

如果记不清参数的顺序,可以通过语法$name: value的形式指定每个参数的值。

css 复制代码
a {
    @include link-colors(
      $normal: blue,
      $visited: green,
      $hover: red
  );
}

指定默认参数值

css 复制代码
@mixin link-colors(
    $normal,
    $hover: $normal,
    $visited: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

继承 @extend

跟混合器相比,继承生成的css代码相对更少。因为继承仅仅是重复选择器,而不会重复属性,所以使用继承往往比混合器生成的css体积更小。

css 复制代码
//通过标签继承样式(默认的浏览器样式不会被继承,因为它们不属于样式表中的样式)
.disabled {
  color: gray;
  @extend a;
}
css 复制代码
//通过选择器继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

.seriousError不仅会继承.error自身的所有样式,任何跟.error有关的组合选择器样式也会被.seriousError以组合选择器的形式继承

css 复制代码
//.seriousError从.error继承样式
.error a{  //应用到.seriousError a
  color: red;
  font-weight: 100;
}
h1.error { //应用到hl.seriousError
  font-size: 1.2rem;
}

在class="seriousError"的html元素内的超链接也会变成红色和粗体。

相关推荐
耶啵奶膘1 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^2 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie3 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic3 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿4 小时前
webWorker基本用法
前端·javascript·vue.js
cy玩具4 小时前
点击评论详情,跳到评论页面,携带对象参数写法:
前端
qq_390161775 小时前
防抖函数--应用场景及示例
前端·javascript
John.liu_Test5 小时前
js下载excel示例demo
前端·javascript·excel
Yaml46 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事6 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro