SCSS的基本使用(一)

news2024/9/23 1:41:58

目录

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

二、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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

部署Devika - 代理 AI 软件工程师

Devika 是一位高级 AI 软件工程师,可以理解高级人类指令,将它们分解为步骤,研究相关信息,并编写代码以实现给定的目标。Devika 利用大型语言模型、规划和推理算法以及 Web 浏览能力来智能开发软件。 Devika 旨在通过提供 AI 对程…

STM32F4 Hal库中IO外部中断(EXIT)的应用

目录 概述 1 中断和事件 1.1 外部中断/事件控制器 (EXTI) 1.2 EXTI主要特性 1.3 中断和事件的差别 1.3.1 中断产生流程 1.3.2 事件产生流程 1.3.3 STM32F4的事件 2 STM32Cube配置工程 2.1 外部中断/事件介绍 2.2 配置参数 2.3 生成Project 3 STM32F4 Hal库中外部中…

【自动驾驶车辆-运动控制】运动学模型(Kinematic Model) | 手写数学推导公式 by.Akaxi

【前言】 在设计自动驾驶规控算法时,常常需要获取车辆的各种位姿、角度等信息,要控制车辆的运动,首先要对车辆的运动建立数字化模型,模型建立的越准确,对车辆运动的描述越准确,对车辆的跟踪控制的效果就越…

Redis入门到通关之Redis数据结构-String篇

文章目录 欢迎来到 请回答1024 的博客 🍓🍓🍓欢迎来到 请回答1024的博客 关于博主: 我是 请回答1024,一个追求数学与计算的边界、时间与空间的平衡,0与1的延伸的后端开发者。 博客特色: 在我的…

熊猫电竞赏金赛系统源码 APP+H5双端源码附搭建教程下载

熊猫电竞赏金系统简介 熊猫电竞赏金电竞系统 赏金赛源码,用户通过平台打比赛,赢了获得奖金奖励, 金币赛、赏金赛、vip赛等种赛事 可开王者荣耀、和平精英比赛 支持1v1、单排、双排组、战队排等多种比赛模式 支持QQ区、微信区 游戏玩的好…

react学习(一)之初始化一个react项目

React 是一个用于构建用户界面(UI)的 JavaScript 库,用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用,屏幕上的所有内容都可以被分解成组件&#xf…

Kimi Chat四大更新详细解读!模型能力提升,支持语音输入输出!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

.net6项目模板搭建教程

1.集成log4net 安装如下扩展依赖即可,已经包含了log4net依赖: Microsoft.Extensions.Logging.Log4Net.AspNetCore 添加日志配置文件: 日志配置文件属性设置为始终复制: 注入服务: #region 注入log4net日志服务build…

【学习笔记之vue】vue项目放在springboot项目里后,刷新页面会显示whitelabel error page

vue项目放在springboot项目里后,刷新页面会显示whitelabel error page。 解决方案: 当你在Spring Boot项目中嵌入Vue项目,并且刷新页面时遇到了“Whitelabel Error Page”,这通常意味着Spring Boot后端没有正确地处理前端路由的请求。Vue.j…

X-Spider媒体下载工具

软件介绍 X-Spider 是一个功能丰富的推特媒体下载器,它不仅可以帮助用户从推特上下载图片和视频,还提供了一些高级的过滤功能。例如,用户可以通过指定日期范围来筛选需要下载的媒体文件,并且可以跳过已下载的重复文件&#xff0c…

ARTS Week 24

Algorithm 本周的算法题为 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: img 输入:list1 [1,2,4], list2 [1,3,4]输出:[1,1,2,3,4,4] 实现代码如下&…

Centos7_miniconda_devtools安装_R语言入门之R包的安装

因为有同时反馈安装R包很慢或卡住。同事提供了一个安装R包的命令给我测试,在安装过程中复现报错信息,把下载慢或卡信的链接中的域名在防火墙中调整出口。 devtools::install_github("GreenleafLab/ArchR", ref"master", repos Bio…

助力突发异常事件预警保障公共安全,基于YOLOv7【tiny/l/x】模型开发构建公共生活场景下危险人员持刀行凶异常突发事件检测预警识别系统

基于AI目标检测模型的暴力持刀行凶预警系统是当下保障人民生命安全的新途径,近年来,公众场合下的暴力袭击事件频发,不仅给受害者及其家庭带来了深重的伤害,也对社会的稳定和安全造成了极大的威胁。在这种背景下,如何有…

为什么iPhone支持整页中文OCR应用很少?有什么好的解决方法?

iPhone上面没有支持中文整页OCR识别的app,这是一个值得探讨的问题。OCR,即光学字符识别,是一种将纸质文档或图片中的文字转化为可编辑文本的技术。随着科技的发展,OCR技术已经广泛应用于各个领域,包括文档处理、图像识…

AutoCAD 2025(CAD设计软件) V2025.0.0 珊瑚海精简优化版

网盘下载 AutoCAD2025珊瑚海精简版是一款计算机辅助设计软件的AutoCAD精简版,提供了丰富的设计工具和功能,使用户能够轻松创建复杂的图纸、模型和布局。该软件还具备强大的三维建模和渲染功能,用户可以用来创建和编辑三维模型,应用…

鸿蒙原生应用元服务-访问控制(权限)开发场景与权限声明

一、场景介绍 应用的APL(Ability Privilege Level)等级分为normal、system_basic和system_core三个等级,默认情况下,应用的APL等级都为normal等级。权限类型分为system_grant和user_grant两种类型。 二、配置文件权限声明 应用需要…

利用regress绘制拟合图,利用Slope的趋势分析(5)

code如下: % SCD,积雪日数 % SCS,积雪初日 % SCM,积雪终日% SCS SCD SCM clc; clear; % 读取 Excel 表 excel_file E:\work\2024年\April20\积雪作图\tif文件\excel表\SCS.xlsx; % Excel 文件路径 data readtable(excel_file);datavalue data{:,2:end}; year (…

就业班 第三阶段(负载均衡) 2401--4.18 day2 nginx2 LVS-DR模式

3、LVS/DR 模式 实验说明: 1.网络使用NAT模式 2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域 3.所有节点网关均指定真实网关 主机名ip系统用途client172.16.147.1mac客户端lvs-server172.16.147.154centos7.5分发器real-server1172.16.…

一句话或一张图讲清楚系列之——ISERDESE2的原理

主要参考: https://blog.csdn.net/weixin_50810761/article/details/137383681 xilinx原语详解及仿真——ISERDESE2 作者:电路_fpga https://blog.csdn.net/weixin_45372778/article/details/122036112 Xilinx ISERDESE2应用笔记及仿真实操 作者&#x…