当前位置:   article > 正文

Sass语法小册-笔记迁移

Sass语法小册-笔记迁移

Sass

1、@extend

一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式。

.a{
        width: 100px;
        height: 100px;
        background-color: greenyellow;
 }
.b{
        @extend .a;
        background-color: orangered;//覆盖.a继承来的背景色
}
结果-》
.b[data-v-5d9daadb] {
    background-color: orangered;
}

<style>
.a[data-v-5d9daadb], .b[data-v-5d9daadb] {
    width: 100px;
    height: 100px;
    background-color: greenyellow;--这个被覆盖掉
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2、@if @else if @else

@if表达式返回值不是 false 或者 null 时,条件成立,输出 {} 内的代码:

p {
  @if 1 + 1 == 2 { border: 1px solid; }
  @if 5 < 3 { border: 2px dotted; }
  @if null  { border: 3px double; }
}
-》
p {
  border: 1px solid;
}
if else if else
$type: monster;
p {
  @if $type == ocean {
    color: blue;
  } @else if $type == matador {
    color: red;
  } @else if $type == monster {
    color: green;
  } @else {
    color: black;
  }
}
p {
  color: green; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3、循环@for @while

@for

@for 指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动。这个指令包含两种格式:@for $var from <start> through <end>,或者 @for $var from <start> to <end>,区别在于 throughto 的含义:当使用 through 时,条件范围包含 <start><end> 的值,而使用 to 时条件范围只包含 <start> 的值不包含 <end> 的值。另外,$var 可以是任何变量,比如 $i<start><end> 必须是整数值。

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}
.item-1 {
  width: 2em; }
.item-2 {
  width: 4em; }
.item-3 {
  width: 6em; }
这里的i 1 2 3 。如果使用from  to 这里的i 就是1 2 不包含end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
@while

@while 指令重复输出格式直到表达式返回结果false。这样可以实现比 @for 更复杂的循环,只是很少会用到。例如:

$i: 6;
@while $i > 0 {
  .item-#{$i} { width: 2em * $i; }
  $i: $i - 2;
}
.item-6 {
  width: 12em; }

.item-4 {
  width: 8em; }

.item-2 {
  width: 4em; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

4、@each

each相当于for in,能够遍历一个列表。

@each 指令的格式是 $var in <list>, $var 可以是任何变量名,比如 $length 或者 $name,而 <list> 是一连串的值,也就是值列表。

@each $var in -1,-2,-3{
    .item#{$var}{
        color:red;
    }
}
这里的$var 就是-1 -2 -3

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

5、Mixin混合 @include引入混合

混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left。混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变量,输出多样化的样式。

使用 @include 指令引用混合样式,格式是在其后添加混合名称,以及需要的参数(可选):

@mixin center_hover{
    &:hover{
        display: flex;
        justify-content: center;
        align-content: center;
        color: yellow;
    }
}
 .a{
        @include center_hover();
        width: 100px;
        height: 100px;
        background-color: greenyellow;
}
.b{
        @extend .a;
        background-color: orangered;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

在这里插入图片描述

5.1、混入传参

参数用于给混合指令中的样式设定变量,并且赋值使用。在定义混合指令的时候,按照变量的格式,通过逗号分隔,将参数写进圆括号里。引用指令时,按照参数的顺序,再将所赋的值对应写进括号:

@mixin center_hover($bgc,$tx){
    &:hover{
        display: flex;
        justify-content: center;
        align-content: center;
        color: $bgc;
        transform: translateX($tx);
    }
}
.a{
        @include center_hover(gray,10px);
    	也可以写成关键词参数 @include center_hover($bgc:gray,$tx:10px);
        width: 100px;
        height: 100px;
        background-color: greenyellow;
    }
    .b{
        @extend .a;
        background-color: orangered;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

5.2、向混入中导入内容@content

类似于插槽

在引用混合样式的时候,可以先将一段代码导入到混合指令中,然后再输出混合样式,额外导入的部分将出现在 @content 标志的地方:

@mixin content_margin(){
    @content;
}
@include content_margin{
    .a{
        margin: 20px;
    }
}
 .a{
        @include content_margin();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

6、函数指令@function

@function computed_width($n){
    @return $n*100px 
}

 width: computed_width(7); ->700px
  • 1
  • 2
  • 3
  • 4
  • 5

7、关键词

7.1、插值语句#{}

#{}插值语句:通过 #{} 插值语句可以在选择器或属性名中使用变量:

  1. $name: foo;
    $attr: border;
    p.#{$name} {
      #{$attr}-color: blue;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

7.2、父级元素选择器&

&参考当前元素的父元素选择器,当父元素不存在&`将为null

如果父元素是a,下面代码就是a:hover

&:hover{
	color:red;
}
  • 1
  • 2
  • 3

8.数据类型

8.1、数组

$list:(1px,2px,5px,6px)
  • 1

nth 函数可以直接访问数组中的某一项;join 函数可以将多个数组连接在一起;append 函数可以在数组中添加新值;而 @each 指令能够遍历数组中的每一项。

nth(列表,index)
$colors: red, green, blue;
background-color: nth($colors, 2); // 输出 green


join()
$list1: 1, 2, 3;
$list2: a, b, c;
$list3: join($list1, $list2, "-"); // 输出 1-a, 2-b, 3-c如果未提供分隔符 `$separator`,则默认使用逗号作为分隔符。

$list3: join($list1, $list2); // 输出 1, 2, 3, a, b, c


$colors: red, green, blue;
$font-sizes: 12px, 14px, 16px;

@each $color in $colors {
  @each $font-size in $font-sizes {
    $class-name: join(nth($color, 1), nth($font-size, 1), "-");
    .#{$class-name} {
      color: $color;
      font-size: $font-size;
    }
  }
}
结果
 .red-12px、.red-14px 和 .red-16px,以及类似的类 .green-12px、.green-14px 和 .green-16px 和 .blue-12px、.blue-14px 和 .blue-16px。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

8.2、对象Maps

$map: (key1: value1, key2: value2, key3: value3);

//map-get函数用于查找键值
$colors: (
  red: #ff0000,
  green: #00ff00,
  blue: #0000ff
);

background-color: map-get($colors, red); // 输出 #ff0000

//map-merge函数用于map和新加的键值融合
$map1: (
  a: 1,
  b: 2
);

$map2: (
  b: 3,
  c: 4
);

$map3: merge($map1, $map2); // 输出 (a: 1, b: 3, c: 4)
函数也可以将映射与其他数据类型(例如列表、字符串等)合并。

$map: (
  a: 1,
  b: 2
);
$list: (3, 4);
$string: "hello";

$merged: merge($map, $list, $string); // 输出 (a: 1, b: 2, 1: 3, 2: 4, 3: h, 4: e, 5: l, 6: l, 7: o)


//@each命令可添加样式到一个map中的每个键值对。
$colors: (
  red: #ff0000,
  green: #00ff00,
  blue: #0000ff
);

$font-sizes: (
  small: 12px,
  medium: 14px,
  large: 16px
);

@each $color, $color-value in $colors {
  @each $font-size, $font-size-value in $font-sizes {
    $class-name: "#{$color}-#{$font-size}";
    .$class-name {
      color: $color-value;
      font-size: $font-size-value;
    }
  }
}
编译后的结果
 .red-small、.red-medium、.red-large、.green-small、.green-medium、.green-large、.blue-small、.blue-medium 和 .blue-large。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

9.综合示例

①简化媒体查询

@devices-settings(
    'phone':
        (320px,
        480px)
    ,
    'pad':
        (481px,
        768px,)
    ,
    'notebook':
        (769px,
        1024px,)
    ,
    'desktop':
        (1025px,
        1200px)
    ,
    'tv':1201px
)
@mixin respond-to($device){
    $device-setting : map-get($devices-settings,$device);
    @if type-of($device-setting) == 'list'{
    	@min : nth($device-setting,1);
        @max : nth($device-setting,2);
        @media(min-width:$min) and (max-width:$max){
            @content
        }
    }
    @else{
        @media(min-width:$device-setting){
            @content
        }
    }
}
.test{
    @include respond-to('phone'){
    	height:50px
	}	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/227549
推荐阅读
  

闽ICP备14008679号