scss 实用教程

简介: scss 实用教程

变量 $

定义变量

$link-color: 'blue';

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

使用变量

a {
  color: $link_color;
}
$highlight-border: 1px solid $link_color;
 

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

$link-color: blue;
a {
  color: $link_color;
}

变量作用域

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

$nav-color: #F90;
nav {
  $width: 100px;
  width: $width;
  color: $nav-color;
}

变量默认值

$fancybox-width: 400px !default;
.fancybox {
    width: $fancybox-width;
}

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

vscode中高亮显示scss代码

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

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

$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效果

样式嵌套

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

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

a{
    color: green;
    &:hover{
        color: yellow;
    }
}

属性嵌套

方式一

nav {
  border: {
      style: solid;
      width: 1px;
      color: #ccc;
  }
}

转化为css后,效果如下:

nav {
  border-style: solid;
  border-width: 1px;
  border-color: #ccc;
}

方式二

nav {
  border: 1px solid #ccc {
      left: 0px;
      right: 0px;
  }
}

转化为css后,效果如下:

nav {
  border: 1px solid #ccc;
  border-left: 0px;
  border-right: 0px;
}

静默注释 //

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

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

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

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

循环 @for

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

转化为css后,效果如下:

.pd1 {
  padding: 10px;
}

.pd2 {
  padding: 20px;
}

.pd3 {
  padding: 30px;
}

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

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

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

from to 改为 from through 则包含边界

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

得到

.pd1 {
  padding: 10px;
}

.pd2 {
  padding: 20px;
}

.pd3 {
  padding: 30px;
}

.pd4 {
  padding: 40px;
}

混合器 @minxin

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

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

定义混合器 @mixin

@mixin mark {
  color: red;
  background: yellow;
}

使用混合器 @include

.note {
  font-weight: bold;
  @include mark
}

最终css效果

.note {
    font-weight: bold;
    color: red;
    background: yellow;
}

可传参的混合器

类似JavaScript里的function

@mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

调用时直接传参

a {
  @include link-colors(blue, red, green);
}

最终生成的css效果如下

a { color: blue; }
a:hover { color: red; }
a:visited { color: green; }

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

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

指定默认参数值

@mixin link-colors(
    $normal,
    $hover: $normal,
    $visited: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

继承 @extend

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

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

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

//.seriousError从.error继承样式
.error a{  //应用到.seriousError a
  color: red;
  font-weight: 100;
}
h1.error { //应用到hl.seriousError
  font-size: 1.2rem;
}
目录
相关文章
|
XML Java 测试技术
通义灵码与githubcopilot的对比评测
本文评测了通义灵码,与github copilot在一些代码编写能力上面的能力比较。 虽然github copilot要强很多,但灵码目前的能力也不算很弱,并且在一些小类上会做的更好一些。 值得试试看,也是免费的
59172 10
|
域名解析 弹性计算 固态存储
阿里云服务器续费为什么贵?我们应该怎么办?
很多用户在首次购买阿里云服务器的时候都都是通过阿里云各种活动买的一年,到第二年续费的时候才发现,第一年买才一两百元的云服务器,续费就要1000多了,这时候就犯难了,续费吧,觉得续费太贵了,不续费吧,云服务器又还要使用,所以我们应当在购买和续费阿里云服务器的时候注意以下几点,能一定程度上避免阿里云续费续费太贵的情况。
阿里云服务器续费为什么贵?我们应该怎么办?
|
关系型数据库 MySQL
mysqlbinlog: File ‘mysql-bin.000001;‘ not found (Errcode: 2 - No such file or directory)
mysqlbinlog: File ‘mysql-bin.000001;‘ not found (Errcode: 2 - No such file or directory)
1101 0
|
JavaScript
【JS用法】js判断字符串是否包含某个字符串
【JS用法】js判断字符串是否包含某个字符串
964 0
DDR3L内存,12800S/12800R/12800L分别是什么意思?
DDR3L内存,12800S/12800R/12800L分别是什么意思?
2365 0
|
JavaScript
|
安全 前端开发 iOS开发
揭秘 electron-builder:macOS 应用打包背后到底发生了什么?
本文详细介绍了 Electron 应用在 macOS 平台上的打包流程,涵盖配置文件、打包步骤、签名及 notarization 等关键环节。通过剖析 `electron-builder` 的源码,展示了如何处理多架构应用、执行签名,并解决常见问题。适合希望深入了解 macOS 打包细节的开发者。
726 2
|
存储 人工智能 自然语言处理
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
Delta-CoMe是由清华大学NLP实验室联合OpenBMB开源社区、北京大学和上海财经大学提出的新型增量压缩算法。该算法通过结合低秩分解和低比特量化技术,显著减少了大型语言模型的存储和内存需求,同时保持了模型性能几乎无损。Delta-CoMe特别适用于处理数学、代码和多模态等复杂任务,并在推理速度上有所提升。
437 6
Delta-CoMe:清华联合OpenBMB等高校开源的新型增量压缩算法
|
自然语言处理 语音技术
交大x-lance跨媒体语言智能实验室等联合开源F5-TTS!零样本语音复刻,生成流畅,情感丰富!
上海交大x-lance跨媒体语言智能实验室联合剑桥大学、吉利汽车研究院(宁波)公司开源了一种基于流匹配的扩散变换器(Diffusion Transformer,DiT)的完全非自回归TTS模型-F5-TTS。
|
容器
Vue3图片(Image)
该图片预览组件提供丰富的功能,包括设置鼠标悬浮预览文本、图像描述、尺寸调整、适应容器模式等。支持单张或多张图片展示,具备旋转、缩放、镜像等功能,并可通过键盘或滚轮控制。组件允许自定义多项属性,如图像地址、宽度、高度、边框显示等,并兼容多种使用场景,如相册模式和循环切换。组件内部使用了 Vue3 的 `Spin` 和 `Space` 组件以及 `add` 函数辅助实现。
723 2
Vue3图片(Image)