首页 > 其他分享 >Sass 笔记

Sass 笔记

时间:2022-09-27 10:33:14浏览次数:39  
标签:box Sass color 笔记 shadow 0px CSS

Sass

Sass 全称 "Syntactically Awesome StyleSheets", 是 CSS 的一种扩展语言。

变量 Variable

Sass 允许使用变量(最新的 CSS 也支持了变量)。 可以在 Sass 中声明变量,并为它赋值。

在 Sass 中,变量以 $ 开头的,后跟变量名。

 $text-color: red;

使用

color: $text-color;

嵌套 CSS Nest

Sass 允许 CSS 规则的嵌套,这在组织样式表结构的时候会很有用。

在 CSS 里,每个元素的样式都需要写在独立的代码块中,如下所示:

nav {
  background-color: red;
}

nav ul {
  list-style: none;
}

nav ul li {
  display: inline-block;
}

对于一个大型项目,CSS 规则会很复杂。 这时,引入嵌套功能(即在对应的父元素中写子元素的样式)可以有效地简化代码:

nav {
  background-color: red;

  ul {
    list-style: none;

    li {
      display: inline-block;
    }
  }
}

Mixins 可重用 CSS Reusable

在 Sass 中,mixin 是一组 CSS 声明,可以在整个样式表中重复使用。

CSS 的新功能需要一段时间适配后,所有浏览器后才能完全使用。 随着浏览器的不断升级,使用这些 CSS 规则时可能需要添加浏览器前缀。 考虑 box-shadow

div {
  -webkit-box-shadow: 0px 0px 4px #fff;
  -moz-box-shadow: 0px 0px 4px #fff;
  -ms-box-shadow: 0px 0px 4px #fff;
  box-shadow: 0px 0px 4px #fff;
}

对于所有具有 box-shadow 属性的元素重写此规则,或者更改每个值以测试不同的效果,需要花费大量的精力。 Mixins 就像 CSS 的函数。 以下是一个例子:

@mixin box-shadow($x, $y, $blur, $c){ 
  -webkit-box-shadow: $x $y $blur $c;
  -moz-box-shadow: $x $y $blur $c;
  -ms-box-shadow: $x $y $blur $c;
  box-shadow: $x $y $blur $c;
}

定义以 @mixin 开头,后跟自定义名称。 参数($x$y$blur,以及上例中的 $c )是可选的。 现在在需要 box-shadow 规则的地方,只需一行 mixin 调用而无需添加所有的浏览器前缀。 mixin 可以通过 @include 指令调用。

div {
  @include box-shadow(0px, 0px, 4px, #fff);
}

@if @else 逻辑

Sass 中的 @if 指令对于测试特定情况非常有用——它的工作方式与 JavaScript 中的 if 语句类似。

@mixin make-bold($bool) {
  @if $bool == true {
    font-weight: bold;
  }
}

类似 JavaScript,可以在 Sass 中使用 @else if@else 测试更多条件:

@mixin text-effect($val) {
  @if $val == danger {
    color: red;
  }
  @else if $val == alert {
    color: yellow;
  }
  @else if $val == success {
    color: green;
  }
  @else {
    color: black;
  }
}

@for 循环

在 Sass 中使用 @for 循环添加样式,它的用法和 JavaScript 中的 for 循环类似。

@for 以两种方式使用:“开始 through 结束” 或 “开始 to 结束”。 主要区别在于“开始 to 结束”不包括 结束数字,而“开始 through 结束”包括 结束数字。

@for $i from 1 through 12 {
  .col-#{$i} { width: 100%/12 * $i;  }
}

@for $i from 1 to 6{
  .text-#{$i} {
    font-size: 15px * $i;
  }
}

#{$i} 部分是将变量(i)与文本组合成字符串的语法。 当 Sass 文件转换为 CSS 时,它看起来像这样:

.col-1 {
  width: 8.33333%;
}

.col-2 {
  width: 16.66667%;
}

...

.col-12 {
  width: 100%;
}

这是创建网格布局的有效方法。

@each 遍历列表

Sass 还提供 @each 指令,该指令循环遍历列表或映射中的每个项目。 在每次迭代时,变量将从列表或映射分配给当前值。

@each $color in blue, red, green {
  .#{$color}-text {
    color: $color;
}
}

map 的语法略有不同。 这是一个示例:

$colors: (color1:blue, color2:red, color3:green);
@each $key, $color in $colors {
  .#{$color}-text {
    color: $color;
    }
}

请注意,需要用 $key 变量来引用 map 中的键。 否则,编译后的 CSS 将包含 color1color2...... 以上两个代码示例都转换为以下 CSS:

.blue-text {
  color: blue;
}

.red-text {
  color: red;
}

.green-text {
  color: green;
}

@while 循环

Sass 中的 @while 指令与 JavaScript 中的 while 类似。 只要满足条件,它就会一直创建 CSS 代码。

$x : 1;
@while $x < 13 {
  .col-#{$x} {
    width: 100%/12 * $x;
  }
  $x: $x + 1;
}

Partials

Sass 中的 Partials 是包含 CSS 代码段的单独的文件。 这些片段可以导入其它 Sass 文件使用。 可以把类似代码放到模块中,以保持代码结构规整且易于管理。

partials 的名称以下划线(_)字符开头,这样 Sass 就知道它是 CSS 的一小部分,而不会将其转换为 CSS 文件。 此外,Sass 文件以 .scss 文件扩展名结尾。 要将 partial 中的代码放入另一个 Sass 文件中,使用 @import 指令。

例如,如果所有 mixins 都保存在名为 “_mixins.scss” 的 partial 中,并且在 “main.scss” 文件中需要它们,下面是使用方法:

@import 'mixins'

请注意,import 语句中不需要下划线——Sass 知道它是 partial。 将 partial 导入文件后,可以使用所有变量、mixins 和其它代码。

extend

Sass 有一个名为 extend 的功能,可以很容易地从一个元素中借用 CSS 规则并在另一个元素上重用它们。

.panel{
  background-color: red;
  height: 70px;
  border: 2px solid green;
}

现在需要另一个名为 .big-panel 的面板。 它具有与 .panel 相同的基本属性,但还需要 widthfont-size。 可以从 .panel 复制并粘贴初始 CSS 规则,但是当添加更多类型的面板时,代码会变得重复。 extend 指令是一种重用为一个元素编写的规则的简单方法,可以为另一个元素重用并添加更多规则:

.big-panel{
  @extend .panel;
  width: 150px;
  font-size: 2em;
}

除了新样式之外,.big-panel 将具有与 .panel 相同的属性。

标签:box,Sass,color,笔记,shadow,0px,CSS
From: https://www.cnblogs.com/risejl/p/16733638.html

相关文章

  • vue学习笔记(六):EL组件库学习
    安装Element-uinpmielement-ui在main.js中插入引用项importElementfrom'element-ui'import'element-ui/lib/theme-chalk/index.css'在newVue之前插入引用......
  • 【OpenLayers笔记】绘制描边线
    letlayer=newVectorLayer();//新建一个绘线层letfeature=newFeature({geometry:newLineString([fromLonLat([114,24]),//线的点坐标......
  • HCIA学习笔记三十一:静态路由的负载均衡
    一、负载分担示例• 在路由器B上配置到达路由器A的10.1.1.1网段的三条负载路由。二、负载分担实验2.1、拓扑图•分别在路由器中拖出2台AR2220、终端中拖出2台PC机,......
  • 电机笔记01
    1.电机的永磁体充磁一般分为两种,一种是径向充磁,另一种是平行充磁。如下图。  充磁方向的不同使得电机转子在不同位置时候所对应的气隙位置和磁通密度波形不同。如下图......
  • 学习笔记整理
    这是一个目录。图论经典图论构造三/四元环计数竞赛图广义串并联图一般图最大独立集/最大团问题字符串border与period理论数学线性代数容斥与反演集合幂级数......
  • 学习笔记-C++ STL篇
    1、C++中vector作为参数的三种传参方式(传值&&传引用&&传指针)https://blog.csdn.net/weixin_47641702/article/details/113522865c++中常用的vector容器作为参数时,有......
  • Flask学习笔记(五)-Flask通过Ajax传输JSON数据
    一.创建项目结构项目文件夹flask-ajax-demo,结构如下: 其中app.py是Python程序,user.html是静态页面。二.发起Ajax请求编写user.html,代码如下:<!DOCTYPEhtml><html......
  • vim_vim学习笔记
    普通模式-->插入模式i,表示inserta,表示appendo表示oneline(暂且这样理解)插入模式-->普通模式esc,模式就是这个键jj和capslock需要配置普通模式......
  • 《被讨厌的勇气》读书笔记
    1、如果一味地关注过去的原因,企图仅仅靠原因去解释事物,那就会陷入“决定论”。也就是说,最终会得出这样的结论:我们的现在甚至未来全部都由过去的事情所决定,而且根本无法改......
  • Swin Transformer 论文精读笔记
    参考https://www.bilibili.com/video/BV13L4y1475U/?spm_id_from=333.788&vd_source=920f8a63e92d345556c1e229d6ce363fICCV最佳论文:SwinTransformer  Swin,其实就......