Sass 语法

文章目录

    • 编译
    • 变量 \$
    • 嵌套 {} > + \~
    • 导入 @import
    • 注释 // /*\* \**/
    • 混入 @mixin/@include
    • 继承 @extend
    • 数据类型
    • 运算
    • 控制 @if/@for/@each/@while
    • 函数 @function
    • 媒体查询 @media
    • 根发出 @at-root
    • 警告@warn/错误@error/调试@debug

编译

编译命令

  • 单文件转换命令 sass input.scss output.css
  • 单文件监听命令 sass --watch input.scss:output.css
  • 如果你有很多的sass文件的目录,你也可以告诉sass监听整个目录:sass --watch app/sass:public/stylesheets

编译配置项

  • –style 表示解析后的 css 是什么排版格式

    • :nested 默认

      #main {color: #fff;background-color: #000; }#main p {width: 10em; }.huge {font-size: 10em;font-weight: bold;text-decoration: underline; }
      
    • expanded

      #main {color: #fff;background-color: #000;
      }
      #main p {width: 10em;
      }.huge {font-size: 10em;font-weight: bold;text-decoration: underline;
      }
      
    • compact

      #main { color: #fff; background-color: #000; }
      #main p { width: 10em; }.huge { font-size: 10em; font-weight: bold; text-decoration: underline; }
      
    • compressed

      #main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
      
  • –sourcemap 表示开启 sourcemap 调试。开启 sourcemap 调试后,会生成一个后缀名为 .css.map 文件。

变量 $

  • 普通变量 $fontSize: 12px; 只在当层块以及以下块内有用,如果内部块有同名变量则以内部为准,类似于函数的块作用域

  • 默认变量 $fontSize: 12px !default;

    • 如果之前未定义过该变量,则给该变量赋初始值;如果之前已经定义过该变量且赋过不为 null 的值,则该默认赋值将被忽略。

    • 它可被其他同名普通变量覆盖。

  • 变量引用 只在当层块以及以下块内有用,如果内部块有同名变量则以内部为准,类似于函数的块作用域

  • 变量名 用中划线和下划线连接都可以,无论用中划线还是下划线等值

    $link-color: blue;
    a {color: $link_color;
    }
    //编译后
    a {color: blue;
    }
    
  • 插值语句 #{}

    对变量取值的一种特殊用法,通过 #{} 插值语句可以在选择器或属性名中使用变量:

    $name: foo;
    $attr: border;
    p.#{$name} {#{$attr}-color: blue;
    }p.foo {border-color: blue; }// #{} 插值语句也可以在属性值中插入 SassScript,大多数情况下,这样可能还不如使用变量方便,但是使用 #{} 可以避免 Sass 运行运算表达式,直接编译 CSS。
    p {$font-size: 12px;$line-height: 30px;font: #{$font-size}/#{$line-height};
    }
    

嵌套 {} > + ~

  • 父级选择器 &
    // 一般用法
    article a {color: blue;&:hover { color: red }
    }
    /*编译后*/
    article a { color: blue }
    article a:hover { color: red }// 你想不到但也有用处的用法
    #content aside {color: red;body.ie & { color: green }
    }
    /*编译后*/
    #content aside {color: red};
    body.ie #content aside { color: green }
    
  • 选择器嵌套
    • 群组选择器
    • 子组合选择器:>
    • 同层相邻选择器:+
    • 同层选择器:~
    article {~ article { border-top: 1px dashed #ccc }> section { background: #eee }dl > {dt { color: #333 }dd { color: #555 }}nav + & { margin-top: 0 }
    }
    /*编译后*/
    article ~ article { border-top: 1px dashed #ccc }
    article > footer { background: #eee }
    article dl > dt { color: #333 }
    article dl > dd { color: #555 }
    nav + article { margin-top: 0 }
    
  • 属性嵌套 属性前缀相同可以将属性提取出来进行属性嵌套
    // 一般属性嵌套
    nav {border: {style: solid;width: 1px;color: #ccc;}
    }
    /*编译后*/
    nav {border-style: solid;border-width: 1px;border-color: #ccc;
    }// 你想不到但又很实用的用法——属性嵌套+属性缩写
    nav {border: 1px solid #ccc {left: 0px;right: 0px;}
    }
    /*编译后*/
    nav {border: 1px solid #ccc;border-left: 0px;border-right: 0px;
    }
    

导入 @import

  • css @import VS sass @import

    原生 css 的@import 可以导入外部 .css 样式文件,但只有执行到 @import时,浏览器才会去下载其他 css 文件,这导致页面加载起来特别慢。所以用 sass 的 @import 去导入外部样式文件,在生成 css 文件时就把相关文件导入进来。

    如何区分 @import 是 css 还是 sass 的导入功能呢?只有以下三种情况,sass 文件中的 @import 是以原生 css 的行为做导入操作。

    • 被导入文件的名字以 .css 结尾;
    • 被导入文件的名字是一个 URL 地址(比如 http://www.sass.hk/css/css.css),由此可用谷歌字体 API 提供的相应服务;
    • 被导入文件的名字是 CSS 的 url() 值。
  • 单文件导入 @import "test2.scss";

    可省略后缀,即支持 .scss、.sass 格式,但不能用 @import 导入 .css 文件,它会认为是想用原生 css @import 导入。但因为 sass 兼容原生 css,我们可以将 .css 改为 .scss,这样就以 sass 的方式导入样式文件。

  • 多文件导入 @import "test2.scss", "test3.scss";

  • 部分文件 Partials 导入,不希望被编译为 css,Partials 文件命名需要 _ 开头,但引入的时候不需要 _。

  • 嵌套导入

    #main {// 生成的结果跟你直接在 #main 选择器内写_test2.scss文件的内容完全一样。// 注意部分导入的样式文件命名要以 _ 开头,但引入的时候可以省略 _ 符号@import "test2.scss";
    }
    

注释 // /* */

  • 多行注释 /* */,编译到 css 文件

    如果写在原生 css 不支持的地方,识别不了,也不会编译到 css 文件中。

  • 单行注释 // 不会被编译到 css 文件

混入 @mixin/@include

如果你的整个网站中有几处小小的样式类似(例如一致的颜色和字体),那么使用变量来统一处理这种情况是非常不错的选择。但是当你的样式变得越来越复杂,你需要大段大段的重用样式的代码,独立的变量就没办法应付这种情况了。你可以通过 sass 的混合器实现大段样式的重用。

  • 定义混入

    • 无参 @mixin large-tex{...}

    • 有参 @mixin large-text($color, $width:10px) {...}

  • 使用混入

    • 无参@include large-text
    • 有参 只传 value,要和形参位置严格对应 @include large-text('red', 20px) ;使用name:value形式传参不限制传参位置@include large-text($width:20px);可以给参数设置默认值

继承 @extend

@extend 类名继承其他样式类

//通过选择器继承继承样式
.error {border: 1px solid red;background-color: #fdd;
}
.seriousError {@extend .error;border-width: 3px;
}// 一般你以为继承到的
.seriousError {border: 1px solid red;background-color: #fdd;border-width: 3px;
}// 除了以上从 .error 自身继承到的,其它与 .error 相关联的组合样式都被 .seriousError 继承
.error a{  // 应用到 .seriousError acolor: red;font-weight: 100;
}
h1.error { // 应用到 hl.seriousErrorfont-size: 1.2rem;
}

关于 @extend 有两个要点你应该知道。

  • 跟混合器相比,继承生成的 css 代码相对更少。因为继承仅仅是重复选择器,而不会重复属性,所以使用继承往往比混合器生成的 css 体积更小。如果你非常关心你站点的速度,请牢记这一点。

    所以最佳实践是你完全可以放心地继承有后代选择器修饰规则的选择器,不管后代选择器多长,但有一个前提就是,不要用后代选择器去继承。因为如果用后代选择器去继承有后代选择器的 css 规则,会让情况变得很复杂。

  • 继承遵从 css 层叠的规则。当两个不同的 css 规则应用到同一个 html 元素上时,并且这两个不同的 css 规则对同一属性的修饰存在不同的值,css 层叠规则会决定应用哪个样式。相当直观:通常权重更高的选择器胜出,如果权重相同,定义在后边的规则胜出。

数据类型

  • 字符串,有引号字符串与无引号字符串,“foo”, ‘bar’, baz

    // 需要注意的是索引从 1 开始
    // https://www.runoob.com/sass/sass-string-func.html
    quote(string) - 给字符串添加引号。
    unquote(string)	- 移除字符串的引号
    str-index(string, substring) - 返回 substring 子字符串第一次在 string 中出现的位置。如果没有匹配到子字符串,则返回 null。
    str-insert(string, insert, index) - 在字符串 string 中 index 位置插入 insert。
    str-length(string) - 返回字符串的长度。
    str-slice(string, start, end) - 从 string 中截取子字符串,通过 start-at 和 end-at 设置始末位置,未指定结束索引值则默认截取到字符串末尾。包含起始和截止索引位置字符。
    to-lower-case(string) - 将字符串转成小写
    to-upper-case(string) - 将字符串转成大写
    unique-id()	- 返回一个无引号的随机字符串作为 id。不过也只能保证在单次的 Sass 编译中确保这个 id 的唯一性。
    
  • 数字,1, 2, 13, 10px

    abs(number)	- 返回一个数值的绝对值。
    ceil(number) - 向上取整
    floor(number) - 向下取整
    comparable(num1, num2) - 返回一个布尔值,判断 num1 与 num2 是否可以进行比较
    max(number...) - 返回最大值
    min(number...) - 返回最小值
    percentage(number) - 将数字转化为百分比的表达形式。
    random() - 返回 0-1 区间内的小数,
    random(number) - 返回 1 至 number 之间的整数,包括 1 和 limit。
    round(number) - 返回最接近该数的一个整数,四舍五入。
    
  • 列表 ,list,用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif

    // Sass 列表是不可变的,因此在处理列表时,返回的是一个新的列表,而不是在原有的列表上进行修改。
    // 列表的起始索引值为 1,记住不是 0。
    append($list, $value, [$separator]) - 将单个值 $value 添加到列表尾部。$separator 是分隔符,默认会自动侦测,或者指定为逗号或空格。(space-空格,comma-逗号,slash-斜杠)
    index($list, $val) - 元素的索引位置,从1开始
    is-bracketed($list) - 判断列表中是否有中括号
    join($list1, $list2, [$separator, $bracketed]) - 合并两列表,将列表 list2 添加到列表 list1 的末尾。$separator 是分隔符,默认会自动侦测,或者指定为逗号或空格。 $bracketed 默认会自动侦测是否有中括号,可以设置为 true 或 false。
    length($list) - 数组长度
    list-separator($list) - 返回一列表的分隔符类型。可以是空格或逗号。
    nth($list, $index) - 获取指定索引位置的值
    set-nth($list, $index, $val) - 设置指定位置的值
    zip($lists) - 将多个列表按照以相同索引值为一组,重新组成一个新的多维度列表。
    
  • 映射,maps, 相当于 JavaScript 的 object,(key1: value1, key2: value2)

    // Sass Map 是不可变的,因此在处理 Map 对象时,返回的是一个新的 Map 对象,而不是在原有的 Map 对象上进行修改。
    map-get($map, $key, [$keys...]) - 通过key值获取value;支持传入多个key值获取深层的值
    map-has-key($map, $key, [$keys...]) - 判断是否包含某个键;支持深层key
    map-keys($map) - 获取所有键的列表
    map-values($map) - 获取所有值的列表
    map-remove($map, $keys...) - 移除一个或多个key
    map-merge($map1, $map2) - 浅层次合并两个map,相同的属性取$map2的值
    
  • 颜色,blue, #04a3f9, rgba(255,0,0,0.5)

    rgb(red, green, blue) - 创建一个 Red-Green-Blue (RGB) 色。
    rgba(red, green, blue, alpha) - 根据红、绿、蓝和透明度值创建一个颜色。
    hsl(hue, saturation, lightness) - 通过色相(hue)、饱和度(saturation)和亮度(lightness)的值创建一个颜色。
    hsla(hue, saturation, lightness, alpha) - 通过色相(hue)、饱和度(saturation)、亮度(lightness)和透明(alpha)的值创建一个颜色。
    grayscale(color) - 将一个颜色变成灰色,相当于 desaturate( color,100%)complement(color) - 返回一个补充色,相当于adjust-hue($color,180deg)invert(color, weight) - 返回一个反相色,红、绿、蓝色值倒过来,而透明度不变。red(color) - 从一个颜色中获取其中红色值(0-255)。
    green(color) - 从一个颜色中获取其中绿色值(0-255)。
    blue(color) - 从一个颜色中获取其中蓝色值(0-255)。
    hue(color) - 返回颜色在 HSL 色值中的角度值 (0deg - 255deg)saturation(color) - 获取一个颜色的饱和度值(0% - 100%)lightness(color) - 获取一个颜色的亮度值(0% - 100%)alpha(color)	
    opacity(color) - 获取颜色透明度值(0-1)
  • 空值,null

  • 选择器函数 selector

    is-superselector(super, sub) - 比较两个选择器匹配的范围,即判断 super 选择器是否包含了 sub 选择器所匹配的范围,是的话返回 true,否则返回 false。
    selector-append(selectors) - 将第二个 (也可以有多个) 添加到第一个选择器的后面。 selector.
    selector-extend(selector, extendee, extender)	
    selector-nest(selectors) - 返回一个新的选择器,该选择器通过提供的列表选择器生成一个嵌套的列表。
    selector-parse(selector) - 将字符串的选择符 selector 转换成选择器队列。
    selector-replace(selector, original, replacement) - 给定一个选择器,用replacement 替换 original 后返回一个新的选择器队列。
    selector-unify(selector1, selector2) - 将两组选择器合成一个复合选择器。如两个选择器无法合成,则返回 null 值。
    simple-selectors(selectors) - 将合成选择器拆为单个选择器。	
    
  • Introspection 函数

    // Sass Introspection 函数比较少用于构建样式表,一般用于代码的调试上。
    call(function, arguments...) - 函数的动态调用,即调用函数 function 参数为 arguments,并返回结果。
    content-exists() - 查看当前的混入是否传递 @content 块。
    feature-exists(feature) - 检查当前的 Sass 实现是否支持该特性。
    function-exists(functionname) - 检测指定的函数是否存在
    get-function(functionname, css: false) - 返回指定函数。如果 css 为 true,则返回纯 CSS 函数。
    global-variable-exists(variablename) - 检测某个全局变量是否定义。
    inspect(value) - 返回一个字符串的表示形式,value 是一个 sass 表达式。
    mixin-exists(mixinname) - 检测指定混入 (mixinname) 是否存在。
    type-of(value) - 返回值类型。返回值可以是 number, string, color, list, map, bool, null, function, arglist。
    unit(number) - 返回传入数字的单位(或复合单位)。
    unitless(number) - 返回一个布尔值,判断传入的数字是否带有单位。
    variable-exists(variablename) - 判断变量是否在当前的作用域下。
    

运算

  • 字符串运算 +
  • 数字运算 +, -, *, /, %
  • 比较运算 <, >, <=, >=
  • 逻辑运算 and or 以及 not
  • 颜色值运算 #010203 + #040506,则计算 01 + 04 = 05、02 + 05 = 07、03 + 06 = 09,结果为#050709
  • 圆括号 ()

控制 @if/@for/@each/@while

  • @if:条件控制指令
  • @for:循环指令 包含 end @for $var from <start> through <end>,或者 不包含 end @for $var from <start> to <end>
  • @each:循环指令 @each $var in <list>
  • @while:循环指令

函数 @function

  • 内置函数

  • 自定义函数

    @function 函数名称(参数列表){// 数据处理
    }
    

媒体查询 @media

@media支持嵌套,编译到最外层

根发出 @at-root

@at-root 将样式编译到根层级。

警告@warn/错误@error/调试@debug

  • 警告 @warn message;

    警告信息,警告信息一般会在执行 scss 程序生成 css 时触发,所以出现在命令行中。

  • 错误 @error message;

    错误信息,错误信息直接显示在编译的 css 文件中。

  • 调试@debug 语句

    将 SassScript 表达式的值打印到标准错误输出流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1474007.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

从零开始读RocketMq源码(一)生产者启动

目录 前言 获取源码 总概论 生产者实例 源码 A-01:设置生产者组名称 A-02:生产者服务启动 B-01&#xff1a;初始化状态 B-02&#xff1a;该方法再次对生产者组名称进行校验 B-03&#xff1a;判断是否为默认生产者组名称 B-04: 该方法是为了实例化MQClientInstance对…

Matplotlib Artist Axes

在简介里介绍了很多了&#xff0c;这里补充一点 Axes包含一个属性patch&#xff0c;是Axes对应的方框&#xff0c;可以用来设置Axes的相关属性 ax fig.add_subplot() rect ax.patch # a Rectangle instance rect.set_facecolor(green) Axes有以下方法 Axes helper metho…

MYSQL的简易安装

先下载好安装包 官网&#xff1a;https://www.mysql.com 双击运行进入界面 打开之后将左侧的产品移到右侧 点击使用的产品设置路径 之后一直下一步即可 选择主机类型 同时要记住端口号 设置密码 设置系统服务列表中的服务名称 之后一直下一步就可以了 安装完成记得配置环…

.mkp勒索病毒:深度解析与防范

引言&#xff1a; 在数字化时代&#xff0c;网络安全问题日益严峻&#xff0c;其中勒索病毒作为一种极具破坏性的恶意软件&#xff0c;严重威胁着个人用户和企业机构的数据安全。在众多勒索病毒家族中&#xff0c;.mkp勒索病毒以其强大的加密能力和广泛的传播方式&#xff0c;成…

第二次练习

目录 一、student表的增删改查 1.向student表中添加一条新记录 2. 向student表中添加多条新记录 3.向student表中添加一条新记录 4.更新表&#xff0c;grade 大于90的加0.5 5.删除成绩为空的记录 二、用户权限部分 1、创建一个用户test1使他只能本地登录拥有查询student表的权…

http读书笔记

持久化 HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接&#xff08;HTTP Persistent Connections&#xff0c; 也称为 HTTP keep-alive 或 HTTP connection reuse&#xff09; 的方法。 持久连接的特点是&#xff0c; 只要任意一端 没有明确提出断开连接&#xff0c; 则保持 T…

信用卡没逾期就万事大吉了吗?

6月28日&#xff0c;中国人民银行揭晓了《2024年第一季度支付体系概览》&#xff0c;数据显示&#xff0c;截至本季度末&#xff0c;信用卡及借贷合一卡的总量为7.6亿张&#xff0c;与上一季度相比&#xff0c;这一数字微降了0.85个百分点。同时&#xff0c;报告还指出&#xf…

【Unity】unity学习扫盲知识点

1、建议检查下SystemInfo的引用。这个是什么 Unity的SystemInfo类提供了一种获取关于当前硬件和操作系统的信息的方法。这包括设备类型&#xff0c;操作系统&#xff0c;处理器&#xff0c;内存&#xff0c;显卡&#xff0c;支持的Unity特性等。使用SystemInfo类非常简单。它的…

HTML5使用<progress>进度条、<meter>刻度条

1、<progress>进度条 定义进度信息使用的是 progress 标签。它表示一个任务的完成进度&#xff0c;这个进度可以是不确定的&#xff0c;只是表示进度正在进行&#xff0c;但是不清楚还有多少工作量没有完成&#xff0c;也可以用0到某个最大数字&#xff08;如&#xff1…

ctfshow web sql注入 web242--web249

web242 into outfile 的使用 SELECT ... INTO OUTFILE file_name[CHARACTER SET charset_name][export_options]export_options:[{FIELDS | COLUMNS}[TERMINATED BY string]//分隔符[[OPTIONALLY] ENCLOSED BY char][ESCAPED BY char]][LINES[STARTING BY string][TERMINATED…

C++11|包装器

目录 引入 一、function包装器 1.1包装器使用 1.2包装器解决类型复杂 二、bind包装器 引入 在我们学过的回调中&#xff0c;函数指针&#xff0c;仿函数&#xff0c;lambda都可以完成&#xff0c;但他们都有一个缺点&#xff0c;就是类型的推导复杂性&#xff0c;从而会…

aardio —— 今日减bug

打字就减bug 鼠标双击也减bug 看看有多少bug够你减的 使用方法&#xff1a; 1、将资源附件解压缩&#xff0c;里面的文件夹&#xff0c;放到aardio\plugin\plugins 目录 2、aardio 启动插件 → 插件设置 → 选中“今日减bug” → 保存。 3、重启 aardio&#xff0c;等aa…

解决IDEA每次新建项目都需要重新配置maven的问题

每次打开IDEA都要重新配置maven&#xff0c;这是因为在DEA中分为项目设置和全局设置&#xff0c;这个时候我们就需要去到全局中设置maven了。我用的是IntelliJ IDEA 2023.3.4 (Ultimate Edition)&#xff0c;以此为例。 第一步&#xff1a;打开一个空的IDEA&#xff0c;选择左…

起飞,纯本地实时语音转文字!

简介 偶然在 github 上翻到了这个项目 https://github.com/k2-fsa/sherpa-ncnn 在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持 iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 也就是说语音转文字可以不再借助网络服务的接口&am…

昇思MindSpore学习笔记4-03生成式--Diffusion扩散模型

摘要&#xff1a; 记录昇思MindSpore AI框架使用DDPM模型给图像数据正向逐步添加噪声&#xff0c;反向逐步去除噪声的工作原理和实际使用方法、步骤。 一、概念 1. 扩散模型Diffusion Models DDPM(denoising diffusion probabilistic model) &#xff08;无&#xff09;条件…

昇思25天学习打卡营第8天|模型权重与 MindIR 的保存加载

目录 导入Python 库和模块 创建神经网络模型 保存和加载模型权重 保存和加载MindIR 导入Python 库和模块 上一章节着重阐述了怎样对超参数予以调整&#xff0c;以及如何开展网络模型的训练工作。在网络模型训练的整个进程当中&#xff0c;事实上我们满怀期望能够留存中间阶段…

眼底图像生成新 SOTA:GeCA模拟生物细胞的演变过程

眼底图像生成新 SOTA&#xff1a;GeCA模拟生物细胞的演变过程 提出背景GeCA 框架生成元胞自动机&#xff1a;从单细胞到生物体的过程生物体从单个像素细胞开始细胞扩散&#xff1a;从细胞演变为生物体通过基因遗传改进逆向采样视网膜疾病分类GeCA 逻辑拆解子解法1&#xff1a;神…

Go高级库存照片源码v5.3

GoStock – 免费和付费库存照片脚本这是一个免费和付费共享高质量库存照片的平台,用户可以上传照片与整个社区和访客分享,并可以通过 PayPal 接收捐款。此外,用户还可以点赞、评论、分享和收藏您最喜欢的照片。 下载 特征: 使用Laravel 10构建订阅系统Stripe 连接渐进式网页…

【Python机器学习】模型评估与改进——分层k折交叉验证

在k折分层验证中&#xff0c;将数据集划分为k折时&#xff0c;从数据的前k分之一开始划分&#xff0c;这可能并不总是一个好主意&#xff0c;例如iris数据集中&#xff1a; from sklearn.datasets import load_irisirisload_iris() print(Iris labels:\n:{}.format(iris.targe…

2.Python学习:数据类型和变量

1.标识符命名规则 只能由数字、字母、下划线组成不能以数字开头不能是关键字&#xff08;如class等python内部已经使用的标识符&#xff09;区分大小写 查看关键字&#xff1a; print(keyword.kwlist)2.数据类型 2.1常见数据类型 2.1.1Number数值型&#xff1a; 整数int&a…