# 一、Scss 变量

# 1、变量使用

  在 scss 语法中,变量定义要放在最前面,$border-color$border_color是一个意思。

    # 2、变量范围

      定义在选择器外的是全局变量,定义在选择器内的是局部变量。

      # 3、变量默认值

        变量默认值可以实现:在不同的地方使用相同的变量,但根据需要在不同的地方提供不同的值

        # 4、变量类型 ✨

          其实到现在我们已经可以感受到 sass 是一种类编程语言。所以它相较于 css,可以支持更多的数据类型(maps、数据、空值、布尔值等等)。

          # 6、插值语法

            插值语句可以应用在选择器、属性名、属性值、注释等等上。

          $class-name: danger; // ② 选择器
          $attr: color; // ③ 属性名
          $author: '任先生' // ④ 注释
            /*
            @author: #{$author}
          */ a.#{$class-name} {
            border-#{$attr}: #f00;
          }
          

          # 二、Scss 嵌套

          # 1、选择器嵌套

            # 2、属性嵌套

              # 三、@import 导入

              提示

                现在官网更加推荐使用 具有命名空间功能 的 @use (opens new window) 代替 @import (opens new window)

              # 1、导入方式

              • 样式目录
              styles/
              |-- _index.scss
              |-- variables/
              |   |-- _colors.scss
              |   |-- _typography.scss
              |-- components/
              |   |-- _buttons.scss
              |   |-- _forms.scss
              |-- main.scss
              
              • scss 中的@import

                # 2、css 与 scss ✨

                  在 scss 中不要使用:

                @import 'public.css'; // 会被当做css导入,不会编译 ✖
                @import 'https://example.com/styles.css'; // import远程的url样式表,在scss是不支持的 ✖
                

                  而在 css 中也不可以:

                @import url(public); // 直接使用filename是scss中的功能,在css中是没有自动识别文件功能 ✖
                

                # 3、Partial 文件

                  在 SCSS 中,文件名前加下划线(_)的文件通常被称为部分文件(Partial Files)。

                  这些以_开头的文件通常作为一个局部样式或变量的存储地点,可以被其他 SCSS 文件引用,但不会被编译为 css 文件。

                _public.scsspublic.scss文件在引入时,会被看做一个文件

                @import 'public'; // 相当于引入了_public.scss 或 public.scss 文件
                

                # 4、路由别名处理

                  在项目中,如果我们想要使用@别名,需要在前面加上一个**~**才可以

                .scrollbar-wrapper {
                  background: url('~@/assets/common/leftnavBg.png') no-repeat 0 100%;
                }
                

                # 四、@extend 和 @mixin

                # 1、extend 类扩展

                  -@extend (opens new window)可以将一个选择器的样式应用到另一个选择器上

                如果使用不当,可能会生成复杂的选择器结构,影响样式的可读性和维护性

                  # 2、mixin 样式混入 ✨

                  在 vue、小程序、uniapp 等中有相似的概念,共享不同的内容

                    # 3、区别分析

                    • @extend:适用于需要在多个选择器之间共享相同样式的情况

                      相较于@mixin 而言,@extend 的一大优势是类继承样式转换后不会生成重复的 css

                    • @mixin:适用于需要在不同选择器中应用相似样式

                      值得说明的是,@mixin 是可以接受参数,进而动态地生成样式

                    // 定义 @mixin
                    @mixin link-styles($color, $hover-color, $font-size: 16px, $font-weight: normal) {
                      color: $color;
                      text-decoration: none;
                      cursor: pointer;
                      transition: color 0.3s ease-in-out;
                    
                      // 大小调整
                      font-size: $font-size;
                      font-weight: $font-weight;
                    
                      &:hover {
                        color: $hover-color;
                        text-decoration: underline;
                      }
                    }
                    
                    // 使用 @include 引用 @mixin
                    .link {
                      @include link-styles(#3498db, #e74c3c);
                    }
                    
                    // 使用 @include 引用 @mixin,并自定义字体大小和粗细
                    .link-large {
                      @include link-styles(#3498db, #e74c3c, 20px, bold);
                    }
                    
                    更新于 : 8/7/2024, 2:16:31 PM