Scss - 小知识与进阶功能 ( 上 )

之前介绍过 SCSS 的基础功能了,没看过可以看这里唷,这次来介绍一些小知识与进阶的功能吧!

SCSS 小知识

注解

SCSS 的注解有分为两种,一种会被输出一种不会

编译前

// 我不会被编译/* 我会被编译 */

编译后

/* 我会被编译 */

连结符号

在 SCSS 中宣告变数或函式名称时,-_ 代表的是相同的东西,也就是说 list-sizelist_size 皆为相同的变数

编译前

$list-size: 16px;$list_size: 20px;// 相同变数则后面覆盖前面.list-item {  font-size: $list-size;}

编译后

.list-item {  font-size: 20px;}

单位运算

SCSS 中有分为无单位正常单位複杂单位三种,其中複杂单位无法被编译,其余两者皆可编译,如果以正确的单位编译就不会出错

.list {  // 複杂单位 - 无法编译  font-size: 10px * 10px; // 100px*px  // 正常单位 - 可编译  font-size: 10px * 10px / 10px; // 100px  // 无单位 - 可编译  font-size: 10 * 10; // 100}

也就是说只要单位能正确抵销便能正确编译

编译前

$transition-speed: 1s/50px;@mixin move($left-start, $left-stop) {  position: absolute;  left: $left-start;  transition: left ($left-stop - $left-start) * $transition-speed;  &:hover {    left: $left-stop;  }}.slider {  @include move(10px, 110px);}

编译后

.slider {  position: absolute;  left: 10px;  -webkit-transition: left 2s;  transition: left 2s;}.slider:hover {  left: 110px;}

@media 与 @supports

当需要写到 @media@supports 时,可以将其写在样式内侧,编译时会自动移至外层

编译前

$layout-breakpoint-small: 960px;@media (min-width: $layout-breakpoint-small) {  .banner {    position: fixed;    @supports (position: sticky) {      position: sticky;    }  }}

编译后

@media (min-width: 960px) {  .banner {    position: fixed;  }  @supports ((position: -webkit-sticky) or (position: sticky)) {    .banner {      position: -webkit-sticky;      position: sticky;    }  }}

阵列

scss 中的阵列有多种写法与特性

可使用空白、逗号隔开,并可使用 ()[] 或是不使用皆可阵列的索引不是从 0 开始,而是从 1 开始所有阵列都是不可变的,使用方法皆会产生新的阵列
nth(10px 12px 16px, 3); // 16pxnth((10px, 12px, 16px), 3); // 16pxnth([10px, 12px, 16px], 3); // 16px

true 与 false

scss 中认定的 false 只有 falsenull 两个,其余的皆为 true,要特别注意

null 会被省略

若属性值是 null,则该属性则会被省略

编译前

$size: ('a': 10px, 'b': 12px);h3 {  font: {    size: map-get($size, 'c');    weight: bold;  }}

编译后

h3 {  font-weight: bold;}

开发者侦错

这边介绍的是 @error@warn@debug,前两者是开发者给用户的提醒,而 @debug 比较像是开发时所用的 console.log 一样

@error

将提示写入,若编译时出现条件内的条件,则会跳出该错误提示提醒用户

@mixin reflexive-position($property, $value) {  @if $property != left and $property != right {    @error "Property #{$property} must be either left or right.";  }  $left-value: if($property == right, initial, $value);  $right-value: if($property == right, $value, initial);  left: $left-value;  right: $right-value;}.sidebar {  @include reflexive-position(top, 12px);}
Error: Property top must be either left or right.>>     @error "Property #{$property} must be either left or right.";   ----^

@warn

将提示写入,若编译时出现条件内的条件,则会跳出该警告提示提醒用户

$known-prefixes: webkit, moz, ms, o;@mixin prefix($property, $value, $prefixes) {  @each $prefix in $prefixes {    @if not index($known-prefixes, $prefix) {      @warn "Unknown prefix #{$prefix}.";    }    -#{$prefix}-#{$property}: $value;  }  #{$property}: $value;}.tilt {  @include prefix(transform, rotate(15deg), wekbit ms);}
Warning: Unknown prefix wekbit.    test.scss 6:7   prefix()    test.scss 16:3  root stylesheet

@debug

开发时写入,提供开发者确认程式运行是否如预期

@mixin size($size, $space) {  $height: (2 * $space) + $size;  @debug 'divider offset: #{$height}';  line-height: $height;}.list {  @include size(20px, 5px);}
test.scss:3 Debug: height: 30px

内建函式

SCSS 的内建函式相当的多,这边介绍几个比较常看到的,其他可翻阅文件

数字

// 返回正整数abs(-10px); // 10px// 检查单位是否一致comparable(10px, 5em); // false// 返回随机数random(); // 0 ~ 1 随机数random(10); // 1 ~ 10 随机数// 无条件进位ceil(9.1px); // 10px// 无条件捨去floor(10.9px); // 10px// 四捨五入round(4.5px); // 5px// 最小值min(1px,30px,50px); // 1px// 最大值max(1px,30px,50px); // 50px

字串

// 返回字串位置str-index("Helvetica Neue", "Neue"); // 11// 返回字串长度str-length("Helvetica Neue"); // 14// 撷取字串str-slice("Helvetica Neue", 1, 9); // "Helvetica"// 返回带引号的字串quote(Helvetica); // "Helvetica"// 返回不带引号的字串unquote("Helvetica"); // Helvetica

颜色

// 增加亮度darken(#ff0000,10%); // #cc0000// 减少亮度lighten(#ff0000,10%); // #ff3333// 降低饱和度desaturate(#ff0000, 20%); // #e61a1a;// 混合颜色,第三个参数表示第一个颜色的比例mix(#036, #d2e1dd, 40%); // #7e9bad// 返回反相色invert(#ff0000); // #00ffff// 调整色相环adjust-hue(#ff0000, 50deg); // #ffd500

阵列

// 返回阵列长度length(10px 20px 30px); // 3// 返回索引index(10px 20px 30px, 20px); // 2// 返回该索引的值nth(10px 20px 30px, 3); // 30px

map

$font-weights: ("regular": 400, "medium": 500, "bold": 700);$font-weights-2: ("regular": 400, "bolder": 900);// 返回对应的值map-get($font-weights, "medium"); // 500// 检查 key 是否存在map-has-key($font-weights, "regular"); // true// 合併两个物件// ('regular': 400, 'medium': 500, 'bold': 700, 'bolder': 900)map-merge($font-weights, $font-weights-2); 

通用

// 返回类型type-of(#ffffff); // color// 返回 unquoted + 字串形式inspect(10px 20px 30px); // unquote("10px 20px 30px")

这次介绍的有小知识与一些内建函式,其他功能部分会在下篇介绍~


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章