草庐IT

Sass 笔记

risejl 2023-03-28 原文

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 相同的属性。

有关Sass 笔记的更多相关文章

  1. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. ruby - 为什么 `middleman serve` 有效,但是 `middleman build` 编译这个 Sass 失败? - 2

    当我刚刚运行middleman时服务,all.css编译得很好,只包含对+box-shadow(none)的调用:/*line1,/home/yang/asdf/source/stylesheets/content.css.sass*/div{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}但是当我构建网站时,我得到了这个Sass/Compass错误:$middlemanbuildSlim::EmbeddedEngineisdeprecated,itiscalledSlim::EmbeddedinSlim2.0

  4. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板 - 2

    写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c

  5. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  6. ruby - 无法激活 susy-2.1.1,因为 sass-3.2.17 与 sass 冲突 (~> 3.3.0) - 2

    我已经安装了最新版本的compass、sass和susy。但我仍然收到此错误:Unabletoactivatesusy-2.1.1,becausesass-3.2.17conflictswithsass(~>3.3.0)有人知道这个Ruby是如何工作的吗?这是我安装的gem的列表:***LOCALGEMS***CFPropertyList(2.2.0)chunky_png(1.3.0)compass(0.12.4)compass-core(1.0.0.alpha.19)compass-import-once(1.0.4)compass-rails(1.1.3)fssm(0.2.10)l

  7. ruby - jekyll 观看 haml 和 sass - 2

    我已经有一个在不同文件夹中包含.haml和.scss文件的项目。我按照这里的指南http://winstonyw.com/2013/02/24/jekyll_haml_sass_and_github_pages/创建了_plugins/haml.rb和_plugins/sass.rb我将我所有的.scss文件移动到./assets/css/文件夹中为了确保,我还创建了layouts文件夹并将所有.haml文件放在其中。我运行了jekyllserve--watch并且这些.haml/.scss文件没有在_sites中转换为.html或.css文件。我也无法通过浏览器访问它们。我在这里试过

  8. css - 检测到 Sass 更改但 style.css 仅在我保存时每 5 到 7 次被覆盖 - 2

    我在一台Windows764位机器上使用Sass和Ruby(最新版本),我正在我的家庭服务器上处理一个共享文件夹。(但是,我不得不承认问题本身也出现在服务器上,因为我试图安装Ruby并直接-watch服务器上的文件)。问题如下:如果我第一次保存,检测到变化,我的style.css被直接覆盖。之后,我总是需要保存多达7次才能覆盖style.css。每次都会检测到更改,但不会编译任何内容。这是一个屏幕:>>>Sassiswatchingforchanges.PressCtrl-Ctostop.overwritestyle.css>>>Changedetectedto:E:/Websites

  9. ruby - 用于 CSS3 跨浏览器兼容性的 SASS 插件? - 2

    是否有一个SASS扩展可以采用SASS样式表,找到中性属性(例如border-radius)并为其输出所有特定于供应商的属性(例如-webkit-border-radius等)自动?我真的不想手动创建所有混入,也不想手动编写代码。我确定一定有这样的扩展名,但我找不到它。帮忙? 最佳答案 有一个非常好的gem可以满足您的需求。它叫做Bourbon它不会用特定于供应商的css替换您的css,因为它可以像SASS一样工作。它基本上是一个正确生成跨浏览器css的mixin集合。 关于ruby-用

  10. ruby-on-rails - 在 SASS 中访问 Ruby 变量(从模型或 Controller ) - 2

    有没有办法在SASS中访问Ruby变量,还是我必须为它创建一个自定义函数?我想做的是为每个用户生成一个样式表,所以在Controller中,我会做类似的事情:defshowrespond_todo|format|format.css{render:partial=>"styles"}endend然后在View名称_styles.haml中我这样做::sass#header:backgroundurl(user.banner.url)这可能吗?*显然不是:http://sass-lang.com/docs/yardoc/file.FAQ.html#q-ruby-code除了我们所做的这个

随机推荐