无星的前端之旅(二十五)—— sass的一些用法

433 阅读3分钟

背景

项目中总是遇到class取名难,样式到处定义,重复颜色到处写,代码切换烦得一批

一.dart-sass,node-sass

使用dart-sass,废弃node-sass

二.Vue项目中色板的使用

在全局css文件中,新建一个文件,放置各种scss变量

例如:

src/styles/variables.scss

$moedu-background-color: #F5F7FA;

配置vue.config.js,将整个变量文件注入

//vue.config.js
module.exports = {
  // …………省略其他配置
  css: {
    loaderOptions: {
      scss:{
        additionalData: '@import "@/styles/variables.scss";'
      }
    }
  },
}

在任意vue文件中,可直接使用$moedu-background-color变量,无需引入

<template>
  <div class="main">
    <p>123<p>
    <p>456<p>
  </div>
</template>

<style lang="scss" scoped>
.main{
  background-color: $moedu-background-color;
}
</style>

三.定义布局class

有的时候,页面只是为了写一些布局,需要专门定义一个class名,非常费事

例如

<template>
  <div class="main">
    <p>123<p>
    <p>456<p>
  </div>
</template>

<style lang="scss" scoped>
.main{
  display:flex;
  flex:1;
  flex-direction: column;
}
</style>

如果写好一些共用的

.flex {
  display: flex;
}
.flex1 {
  flex: 1;
}
.row {
  flex-direction: row;
}
.column {
  flex-direction: column;
}
.justify-content-center {
  justify-content: center;
}
.justify-content-flex-end {
  justify-content: flex-end;
}
.justify-content-flex-start {
  justify-content: flex-start;
}
.justify-content-space-between {
  justify-content: space-between;
}
.align-items-center {
  align-items: center;
}
.align-items-baseline {
  align-items: baseline;
}
.align-items-flex-start {
  align-items: flex-start;
}
.align-items-flex-end {
  align-items: flex-end;
}

则可以改成

<template>
  <div class="flex flex1 flex-direction-column">
    <p>123<p>
    <p>456<p>
  </div>
</template>

<style lang="scss" scoped>

</style>

四.烦人的margin与padding

同上述,mariginpadding经常性要定义class去写,烦得一批,相同的要定义很多次

例如:

<template>
  <div class="flex flex1 flex-direction-column">
    <p class="p1">123<p>
    <p class="p2">456<p>
  </div>
</template>

<style lang="scss" scoped>
.p1{
  margin-top:20px;
}
.p2{
  margin-top:30px;
}
</style>

我们通过一些函数,生成这些东西

// 填写需要的边距
$margins: (4,8,10,16,24);

@for $i from 1 through length($margins) {
  $item: nth($margins, $i);
  // .w#{$item}px {
  //   width: #{$item}px;
  // }
  .margin-#{$item}{
    margin: #{$item}px;
  }

  .margin-left-#{$item} {
    margin-left: #{$item}px;
  }

  .margin-top-#{$item} {
    margin-top: #{$item}px;
  }

  .margin-bottom-#{$item} {
    margin-bottom: #{$item}px;
  }

  .margin-right-#{$item} {
    margin-right: #{$item}px;
  }

  .padding-#{$item}{
    padding: #{$item}px;
  }

  .padding-left-#{$item} {
    padding-left: #{$item}px;
  }

  .padding-top-#{$item} {
    padding-top: #{$item}px;
  }

  .padding-bottom-#{$item} {
    padding-bottom: #{$item}px;
  }

  .padding-right-#{$item} {
    padding-right: #{$item}px;
  }
  
}

则可以修改为

<template>
  <div class="flex flex1 flex-direction-column">
    <p class="margin-top-20">123<p>
    <p class="margin-top-30">456<p>
  </div>
</template>

有点tailwindcss的味道

五.hex透明度

颜色大家肯定喜欢写十六进制的#ff6347,没有人喜欢写rgb(255,99,71)

但是有时候遇到透明度要设置,看很多同学就不知道hex怎么加了,都纷纷使用rgb(255,99,71,0.1)

其实hex可以直接加透明度

例如rgb(255,99,71,0.1),可以直接写成#ff63471A

透明度表格如下

Alpha %HexNum
100%FF255
99%FC252
98%FA250
97%F7247
96%F5245
95%F2242
94%F0240
93%ED237
92%EB235
91%E8232
90%E6230
89%E3227
88%E0224
87%DE222
86%DB219
85%D9217
84%D6214
83%D4212
82%D1209
81%CF207
80%CC204
79%C9201
78%C7199
77%C4196
76%C2194
75%BF191
74%BD189
73%BA186
72%B8184
71%B5181
70%B3179
69%B0176
68%AD173
67%AB171
66%A8168
65%A6166
64%A3163
63%A1161
62%9E158
61%9C156
60%99153
59%96150
58%94148
57%91145
56%8F143
55%8C140
54%8A138
53%87135
52%85133
51%82130
50%80128
49%7D125
48%7A122
47%78120
46%75117
45%73115
44%70112
43%6E110
42%6B107
41%69105
40%66102
39%6399
38%6197
37%5E94
36%5C92
35%5989
34%5787
33%5484
32%5282
31%4F79
30%4D77
29%4A74
28%4771
27%4569
26%4266
25%4064
24%3D61
23%3B59
22%3856
21%3654
20%3351
19%3048
18%2E46
17%2B43
16%2941
15%2638
14%2436
13%2133
12%1F31
11%1C28
10%1A26
9%1723
8%1420
7%1218
6%0F15
5%0D13
4%0A10
3%088
2%055
1%033
0%000