SCSS的基本使用(一)

server/2024/10/19 15:51:28/

目录

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

scss%E7%9A%84%E8%AF%AD%E6%B3%95-toc" style="margin-left:80px;">二、scss的语法

 三、变量(Variables)

四、嵌套(Nesting)

五、@mixin 和 @include

六、@extend 继承

七、@import 与 Partials

八、@if简单判断

九、@if复杂判断


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

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

.button {background-color: blue;&:hover {background-color: darkblue;}&.active {background-color: red;}.icon {color: white;font-size: 16px;}
}

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

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

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

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

scss%E7%9A%84%E8%AF%AD%E6%B3%95">二、scss的语法

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

 三、变量(Variables)

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

    四、嵌套(Nesting)

  • 普通后代选择器的嵌套
.box {background-color: pink;ul {/* ul 样式 */list-style: none;li {/* li 样式 */font-size: 1rem;}}
}

@charset "UTF-8";
.box {background-color: pink;
}
.box ul {/* ul 样式 */list-style: none;
}
.box ul li {/* li 样式 */font-size: 1rem;
}

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

.box{width: 300px;a{color:red;  &:hover {font-size: 30px;}}
}
.box {width: 300px;
}
.box a {color: red;
}
.box a:hover {font-size: 30px;
}
  • 属性嵌套
.box {font:{size:12px;weight: 400;}
}
.box {font-size: 12px;font-weight: 400;
}

五、@mixin 和 @include

可以理解为js的函数

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

Partials条件与特点:

body {margin: 0;padding: 0;
}.box {font-size: 30px;color: red;
}

// Partials 文件:_base.scss
body {padding: 0;margin:0;
}// 主要scss文件:index.scss
// 导入_base.scss
@import "base";.box {font-size: 30px;color: red;
}

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

    六、@extend 继承

  • SCSS @extend 继承

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

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

  • // 定义一个基本的类 .base-style
    .base-style {color: red;font-size: 16px;
    }// 使用 @extend 继承 .base-style 类的样式
    h1 {@extend .base-style;
    }p {@extend .base-style;
    }

    编译后的CSS:

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

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

  • // 使用嵌套规则来定义样式
    %base-style {color: red;font-size: 16px;
    }h1 {@extend %base-style;
    }p {@extend %base-style;
    }
    h1, p {color: red;font-size: 16px;
    }

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

  • 七、@import 与 Partials

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

八、@if简单判断

$flg: true;.box {@if $flg {font-size: 34px;}border:2px solid red;
}
.box {font-size: 34px;border: 2px solid red;
}

九、@if复杂判断

$body-color: red;body {@if $body-color == pink {background-color: pink;} @else if $body-color == red {background-color: red;} @else {background-color: gray;}
}
body {background-color: red;
}

http://www.ppmy.cn/server/23950.html

相关文章

智慧校园建设有哪些新策略?

在现有智慧校园建设方案中,智慧校园主要是用于解决学校日常事务,如学工管理,教工管理等,并利用数据分析,指导学校的一些决策行为。但随着新技术的不断发展,尤其是云计算、大数据、物联网、移动互联网、人工…

Kotlin作用域函数引发的遮蔽问题

前面讲了kotlin的it变量引起的遮蔽问题,见Kotlin it隐式变量的遮蔽问题,本篇聊聊作用域函数(scoped function)可能引起的遮蔽问题。 先来看一个简单的示例: fun test(): String {val s: String "asdf".al…

算法人生(12):从“优先级队列算法”到“”六点优先工作法”

算法思想和生活中很多解决问题的思想有着异曲同工之妙,让我们来看下今天的“优先级队列算法”可以怎么应用到我们的生活中吧! 优先级队列算法(Priority Queue Algorithm) 是一种特殊的数据结构,它在常规队列秉持着“先…

Linux的DNS域名解析服务

目录 1.DNS 1.1定义 1.2作用/功能 1.3域名结构 1.4两种查询方式 1.5DNS域名解析工作原理 1.6DNS系统类型 2.正向解析实验​ 2.1安装bind服务,查看配置文件 2.2配置文件配置及文件内容说明 3.反向解析实验 4.配置主从DNS服务器 1.DNS 1.1定义 DNS域名系…

特斯拉携手百度攻克在华推广辅助驾驶难题,马斯克意外访华成果显著

特斯拉近日宣布与科技巨头百度达成合作协议,共同为中国市场提供地图和导航服务,以进一步推动其辅助驾驶系统的广泛应用。这一重要进展得益于特斯拉CEO埃隆马斯克上周的意外访问。 更多消息:AI人工智能行业动态,aigc应用领域资讯 …

html+css+js+jquery实现在网页端将手动输入用户的信息转化成表格

1.实现的效果图 2.css代码 ​<style>*{background-color: antiquewhite;}#ss{font-size:20px;text-align: center;}#inputForm { margin-bottom: 20px; } #userTable { width: 100%; border-collapse: collapse; } #userTable th, #userTable td { border: 1px …

Android使用AlertDialog实现弹出菜单

最近又开始捣鼓APP&#xff0c;许多api , class都忘记怎么用了&#xff0c;楼下使用AlertDialog实现个弹出菜单&#xff0c;结果直接crash&#xff0c;查了半天&#xff0c;终于即将&#xff0c;记录一下…… 1 实现代码 AlertDialog.Builder mBuilder new AlertDialog.Builde…

机器学习-什么是 k-means?

1、什么是 k-means&#xff1f; k-means是一种无监督的分类学习算法。它的基本原理是以距离作为相似度的评价指标&#xff0c;用样本点到类别中心的误差平方和作为聚类好坏的评价指标&#xff0c;通过迭代的方法使总体分类的误差评分和函数达到最小的聚类方法。 2、 k-means聚…