• SCSS的基本使用(一)


    目录

    一、使用&符号来引用父选择器

    二、scss的语法

     三、变量(Variables)

    四、嵌套(Nesting)

    五、@mixin 和 @include

    六、@extend 继承

    七、@import 与 Partials

    八、@if简单判断

    九、@if复杂判断


    一、使用&符号来引用父选择器

    在嵌套规则中使用父选择器。这样可以避免重复编写选择器,并且在生成的CSS中保持正确的层级关系。

    1. .button {
    2. background-color: blue;
    3. &:hover {
    4. background-color: darkblue;
    5. }
    6. &.active {
    7. background-color: red;
    8. }
    9. .icon {
    10. color: white;
    11. font-size: 16px;
    12. }
    13. }

    在上面的示例中,.button选择器是父选择器。在嵌套规则中,使用&引用父选择器。

    • &:hover表示当鼠标悬停在.button元素上时,应用这个样式。
    • &.active表示当.button元素有.active类时,应用这个样式。
    • .icon表示嵌套在.button元素内的.icon元素,不使用&引用父选择器。 在编译为CSS后,生成的代码如下:
      1. .button {
      2. background-color: blue;
      3. }
      4. .button:hover {
      5. background-color: darkblue;
      6. }
      7. .button.active {
      8. background-color: red;
      9. }
      10. .button .icon {
      11. color: white;
      12. font-size: 16px;
      13. }

      通过使用&引用父选择器,可以编写更具可读性和维护性的代码。

      父选择器的引用可以嵌套在任何层级的规则中,并且可以与其他选择器和修饰符组合使用。

    二、scss的语法

    • (1)// 注释的内容不会编译到css文件中去
      1. /* 我的注释内容会编译到css文件中去 */
      2. body {
      3. margin: 0;
      4. }
    • (2) /* */ 注释的内容会编译到css文件中,但是不能是压缩的编译排版格式(--style compressed)
    1. /* 我的注释内容会编译到css文件中去 */
    2. body {
    3. margin: 0;
    4. }
    • (3)强制注释 /!* */,这种注释在编译排格式为compressed中也能存在。
    • 总结:// 一般注释scss内的变量、函数等,/* / 去注释样式说明,非常重要的注释采用/! */。

     三、变量(Variables)

    • 变量名以 $ 开头,变量的值无需加引号,变量名与变量值之间用冒号
    • 一个变量中可以使用其他变量
      1. // 变量名以 $ 开头,变量的值无需加引号,变量名与变量值之间用冒号
      2. $baseColor: pink;
      3. $bg_color: #ccc;
      4. // 一个变量中可以使用其他变量
      5. $base-border: 1px solid $baseColor;
      6. .box {
      7. color: $baseColor;
      8. background-color: $bg_color;
      9. border: $base-border;
      10. }
      1. .box {
      2. color: pink;
      3. background-color: #ccc;
      4. border: 1px solid pink;
      5. }

      四、嵌套(Nesting)

    • 普通后代选择器的嵌套
    1. .box {
    2. background-color: pink;
    3. ul {
    4. /* ul 样式 */
    5. list-style: none;
    6. li {
    7. /* li 样式 */
    8. font-size: 1rem;
    9. }
    10. }
    11. }

    1. @charset "UTF-8";
    2. .box {
    3. background-color: pink;
    4. }
    5. .box ul {
    6. /* ul 样式 */
    7. list-style: none;
    8. }
    9. .box ul li {
    10. /* li 样式 */
    11. font-size: 1rem;
    12. }

    伪类选择器的嵌套需要使用&符号, &的一个作用就是让两个元素之间没有空格,让他们紧密连接在一起;

    1. .box{
    2. width: 300px;
    3. a{
    4. color:red;
    5. &:hover {
    6. font-size: 30px;
    7. }
    8. }
    9. }
    1. .box {
    2. width: 300px;
    3. }
    4. .box a {
    5. color: red;
    6. }
    7. .box a:hover {
    8. font-size: 30px;
    9. }
    • 属性嵌套
    1. .box {
    2. font:{
    3. size:12px;
    4. weight: 400;
    5. }
    6. }
    1. .box {
    2. font-size: 12px;
    3. font-weight: 400;
    4. }

    五、@mixin 和 @include

    可以理解为js的函数

    1. // 声明:如果没有参数,括号可省略
    2. @minxin 名字(参1,参2,..) {
    3. // 样式代码,里面也可以写任何标签嵌套
    4. }
    5. // 调用,可以在某个标签下调用,也可单独调用;没有参数可以省略括号;
    6. .box {
    7. @include 名字
    8. }
    9. @include 名字
    • 无参数
    1. // 定义不带参mixin
    2. @mixin my() {
    3. border:1px solid red;
    4. color: pink;
    5. p {
    6. font-size: 24px;
    7. }
    8. }
    9. .box {
    10. @include my()
    11. }
    1. .box {
    2. border: 1px solid red;
    3. color: pink;
    4. }
    5. .box p {
    6. font-size: 24px;
    7. }

    Partials条件与特点:

    1. body {
    2. margin: 0;
    3. padding: 0;
    4. }
    5. .box {
    6. font-size: 30px;
    7. color: red;
    8. }

    1. // Partials 文件:_base.scss
    2. body {
    3. padding: 0;
    4. margin:0;
    5. }
    6. // 主要scss文件:index.scss
    7. // 导入_base.scss
    8. @import "base";
    9. .box {
    10. font-size: 30px;
    11. color: red;
    12. }

    • 有参数
      1. // 定义带参mixin
      2. @mixin info($text-color, $bg-color) {
      3. color: $text-color;
      4. background-color: $bg-color;
      5. }
      6. .box {
      7. // 按顺序传实参,传递的参数必须保持一致
      8. @include info(red, gray)
      9. }
      10. .box {
      11. // 这样传参可以不考虑顺序,但是数量要一一对应,不能少写
      12. @include info($bg-color: red, $text-color:gray)
      13. }
      1. .box {
      2. color: red;
      3. background-color: gray;
      4. }
      5. .box {
      6. color: gray;
      7. background-color: red;
      8. }
    • 有参数且带默认值
      1. @mixin btn($color:pink, $bg:orange) {
      2. color: $color;
      3. background-color: $bg;
      4. }
      5. .box {
      6. // 带默认值的参数,可以不填,等于默认值
      7. @include btn;
      8. }
      9. .box {
      10. // 也可以按顺序填,填一个值,对应@mixin的第一个形参
      11. @include btn(blue)
      12. }
      13. .box {
      14. // 也可指定某个值
      15. @include btn($bg: black)
      16. }
      1. .box {
      2. color: pink;
      3. background-color: orange;
      4. }
      5. .box {
      6. color: blue;
      7. background-color: orange;
      8. }
      9. .box {
      10. color: pink;
      11. background-color: black;
      12. }

      六、@extend 继承

    • SCSS @extend 继承

      在SCSS中,@extend指令用于共享样式规则。使用@extend可以提高CSS代码的DRY(不要重复自己)原则,减少冗余的代码,并使样式表更易于维护。

      以下是一个简单的例子,演示如何使用@extend

      1. // 定义一个基本的类 .base-style
      2. .base-style {
      3. color: red;
      4. font-size: 16px;
      5. }
      6. // 使用 @extend 继承 .base-style 类的样式
      7. h1 {
      8. @extend .base-style;
      9. }
      10. p {
      11. @extend .base-style;
      12. }

      编译后的CSS:

      1. .base-style, h1, p {
      2. color: red;
      3. font-size: 16px;
      4. }

      在这个例子中,h1p将会共享.base-style的样式。注意,.base-style自身也会出现在编译后的CSS中,作为这些选择器的一部分,这是因为@extend实质上是在修改选择器,而不是创建新的类。如果不希望.base-style类本身出现在CSS中,可以使用嵌套规则来定义样式,如下:

      1. // 使用嵌套规则来定义样式
      2. %base-style {
      3. color: red;
      4. font-size: 16px;
      5. }
      6. h1 {
      7. @extend %base-style;
      8. }
      9. p {
      10. @extend %base-style;
      11. }
      1. h1, p {
      2. color: red;
      3. font-size: 16px;
      4. }

      这里使用了%base-style(以百分号开头)定义的混合(placeholder)样式,不会在最终的CSS中生成对应的类。

    • 七、@import 与 Partials

    • 在传统的css中,就是使用@import导入其他css文件的,但是每次都会去发送http请求,浪费性能;
    • scss中,优化了@import,我们会先创建一个主要scss文件index.scss,然后根据需要去创建所需的每一部分的scss文件,我们称每一个部分为Partials;这样有益于模块化;
    • 创建文件时,以_开头
    • 使用@import导入文件时,名字不需要加_
    • 当你使用sass监听一个目录是,不会监听Partials文件

    八、@if简单判断

    1. $flg: true;
    2. .box {
    3. @if $flg {
    4. font-size: 34px;
    5. }
    6. border:2px solid red;
    7. }
    1. .box {
    2. font-size: 34px;
    3. border: 2px solid red;
    4. }

    九、@if复杂判断

    1. $body-color: red;
    2. body {
    3. @if $body-color == pink {
    4. background-color: pink;
    5. } @else if $body-color == red {
    6. background-color: red;
    7. } @else {
    8. background-color: gray;
    9. }
    10. }
    1. body {
    2. background-color: red;
    3. }
  • 相关阅读:
    刷题学习记录
    手机-电脑互传软件:在 Windows 上安装和使用 Localsend 的完整指南
    使用aop拦截自定义注解
    基于GA优化的竞价博弈频谱分配算法的matlab仿真
    Spring 体系版本对应关系
    生活中我们如何避免忘事?
    linux安装node(含npm命令) 并配置淘宝镜像源
    跟李沐学AI--深度学习之模型选择
    干货| 算法工程师常见问题(基础算法篇)
    猿创征文 | 《深入浅出Vue.js》打卡Day5
  • 原文地址:https://blog.csdn.net/RreamigOfGirls/article/details/138075345