SCSS的基本使用(一)

目录

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

二、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的语法

  • (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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/576817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙云函数调试坑点

如果你要本地调试请使用 const {payload, action} event.body/** 本地调试不需要序列化远程需要序列化 */ // const {payload, action} JSON.parse(event.body) const {payload, action} event.body 注意: 只要修改云函数,必须上传云函数 如果使用 const {pay…

【服务器部署篇】Jenkins配置后端工程自动化部署

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产…

【亲测对比】大厂云服务器2-64G对比表 不卡顿 幻兽帕鲁 我的世界 雾锁王国 饥荒联机版 英灵神殿通用

更新日期:4月26日(京东云采购季持续进行) 本文纯原创,侵权必究 《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准! 【腾讯文档实时更新】2024年-幻兽帕鲁服务器专…

C语言系列文章 | 初识C语言

首先分为几个方面来和各位读者介绍C语言,并在之后的学习过程中不断地和各位读者去分享我学习的经历。 坐好,发车咯~目录如下:1. C语言是什么?2. C语言的历史和辉煌3. 编译器的选择VS20224. VS项目和源⽂件、头⽂件介绍5. 第⼀…

关于java对接微信公众号(对接百度AI实现图片文字识别,对接聚合数据实现笑话、谜语大全,成语接龙等功能)

前言: 只是自己学习使用,所以有点不规范,请见谅 本文直接附上源码与效果图,具体操作步骤请参考另一篇文章:http://t.csdnimg.cn/PQu25 1.运行效果图 1.1 关注事件 1.2 笑话大全 1.3 谜语大全 1.3 多级菜单 1.4 按钮…

MySQL基础知识——MySQL索引

深入浅出索引 索引的意义 索引的意义:在大量数据中,加速访问少量特定数据; 使用索引的前提条件: 1)索引块数量小于数据块数量; 2)索引键有序,故可以使用二分查找等高效的查找方式&…

互联网安全面临的全新挑战

前言 当前移动互联网安全形势严峻,移动智能终端漏洞居高不下、修复缓慢,移动互联网恶意程序持续增长,同时影响个人和企业安全。与此同时,根据政策形势移动互联网安全监管重心从事前向事中事后转移,需加强网络安全态势感…

ETF期权是什么详解

ETF期权是什么 ETF期权的本质是一种金融衍生品,与交易所交易基金(Exchange-Traded Fund,简称ETF)相关的期权合约。其核心在于赋予了投资者在未来某个时间点以约定价格买入或卖出特定ETF(交易所交易基金)的…

百望云发布金盾企业经营大模型,暨光明食品、法雷奥、西奥电梯财税数字化实践分享

百望云发布金盾企业经营大模型,暨光明食品、法雷奥、西奥电梯财税数字化实践分享 数字化转型思想指导下,如何标定好、利用好、管理好数据资产,已经成为企业寻找发展新动能的着力点。 基于此,“2024数字商业创新论坛”于4月26号在上…

2017美亚杯--个人赛

1、Gary的笔记本电脑已成功取证并制作成镜像 (Forensic Image),下列哪个是其MD5哈希值。A.0CFB3A0BB016165F1BDEB87EE9F710C9 B.5F1BDEB87EE9F710C90CFB3A0BB01616 C.A0BB016160CFB3A0BB0161661670CFB3 D.16160CFB3A0BB016166A0BB016166167 E.FB3A0BB016165 B016166…

【论文阅读】Self-DC:何时检索,何时生成?

对于RAG来说,什么时候利用外部检索,什么时候使用大模型产生已知的知识,以回答当前的问题?这是一个非常有趣的话题。 《Self-DC: When to retrieve and When to generate? Self Divide-and-Conquer for Compositional Unknown Questions》这…

环境配置——Windows平台配置VScode运行环境为远程服务器或虚拟机

1. 远程机需要先安装SSH服务,命令如下 sudo apt install openssh-server 2. 安装好后需要开启SSH服务: sudo service sshd start 3. 查看SSH服务是否有被开启: sudo systemctl status sshd.service 4. 本地Windows需要生成密钥将公钥放…

Windows 安全中心:页面不可用 你的 IT 管理员已限制对此应用的某些区域的访问,并且你尝试访问的项目不可用。有关详细信息,请与 IT 支持人员联系。

问题 1:Windows 安全中心提示:【页面不可用 你的 IT 管理员已限制对此应用的某些区域的访问,并且你尝试访问的项目不可用。有关详细信息,请与 IT 支持人员联系。】 修复 Microsoft.SecHealthUI 方法 1:命令自动重装安…

IDM下载器_Internet Download Manager 6.42.7

网盘下载 IDM下载器是一款针对互联网所打造的下载管理器。IDM下载器能将下载速度提高5倍,恢复因丢失的连接,网络问题,计算机关闭或意外断电而重新启动中断或中断的下载。IDM下载器还可支持所有流行的浏览器,以使用独特的“高级浏…

mysql8.0免安装版windows

1.下载 MySQL下载链接 2.解压与新建my.ini文件 解压的路径最好不要有中文路径在\mysql-8.0.36-winx64文件夹下新建my.ini文件,不建data文件夹(会自动生成) [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录(尽量用双斜杠\\,单斜杠\可能会报错) basedirD:\…

Linux系统----信号(万字文章超级详细并且简单易学附有实操shell指令图及注释!)

绪论​ “Do one thing at a time, and do well.”,本章开始Linux系统其中信号是学习操作系统的基本下面将会讲到什么是信号、信号的多种产生方式、信号如何保存的、信号如何处理的、以及一些信号的细节。话不多说安全带系好,发车啦(建议电脑…

qmt教程2----订阅单股行情,提供源代码

链接 qmt教程2----订阅单股行情,提供源代码 (qq.com) qmt教程1---qmt安装,提供下载链接 今天我重新封装了全部qmt的内容,包括数据,交易 qmt交易 我本来打算全部上次git的,但是考虑到毕竟是实盘的内容,就放…

w64devkit 下载,不需要下载MinGW了

w64devkit一个很方便的工具,不需要下载MinGW了 介绍 这里后面我为大家准备了 3 种下载方式,总有一个适合你,嘿嘿!! 在 linux 上大家常用的编译工具就是 gcc,这些工具 windows 上也是有的,常用…

平衡小车的控制算法--结合自动控制原理学习

单纯的去看自控原理,很多概念有点抽象,最好找些应用去理解相关的概念,就找了实验室的一个平衡小车作为应用,不过主要根据小车去跑matlab去验证一些控制算法。结合台湾国立交通大学林沛群的自控线上课的总结 一、自控原理重要概念 …

从零入门区块链和比特币(第二期)

欢迎来到我的区块链与比特币入门指南!如果你对区块链和比特币感兴趣,但不知道从何开始,那么你来对地方了。本博客将为你提供一个简明扼要的介绍,帮助你了解这个领域的基础知识,并引导你进一步探索这个激动人心的领域。…