前端基础学习之Sass

2023-11-09

一、概念

1.Sass是什么?

  • Sass (英文全称:Syntactically Awesome Stylesheets) 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言
  • Sass 是一个 CSS 预处理器
  • Sass 是 CSS 扩展语言,可以帮助我们减少 CSS 重复的代码,节省开发时间。
  • Sass 完全兼容所有版本的 CSS
  • Sass 扩展了 CSS3,增加了规则变量混入、选择器、继承、内置函数等等特性
  • Sass 生成良好格式化的 CSS 代码,易于组织和维护
  • Sass 文件后缀为 .scss

2.Sass的特点

  • 兼容CSS:Sass完全兼容所有版本的CSS,可以无缝地使用任何可用的CSS库

  • 特性丰富:Sass拥有比其他任何CSS扩展语言更多的功能和特性

  • 成熟:Sass已经经过其核心团队超过13年的精心打造

  • 行业认可:一次又一次地,行业把Sass作为首选CSS扩展语言

  • 社区庞大:数家科技企业和成百上千名开发者为Sass提供支持

  • 框架:有无数的框架使用Sass构建   比如CompassBourbon 和 Susy

3.为什么使用Sass

  • css本身语法不够强大 重复编码导致代码量大 无法实现复用 也不方便维护
  • Sass引入了合理的样式复用机制,增加了规则、变量、混入、选择器、继承、内置函数等等特性

二、Sass语法格式

1.SCSS(Sassy CSS):

  • 仅在 CSS3 语法的基础上进行拓展,所有CSS3 语法在 SCSS 中通用,同时加入 Sass 的特色功能
  • 支持大多数 CSS hacks 写法及浏览器前缀写法 (vendor-specific syntax)和早期的 IE 滤镜写法
  • .scss 作为拓展名

2. Sass(Indented Sass):

  • 是最早的 Sass 语法格式  被称为缩进格式  通常简称 "Sass"  是一种简化格式
  • 使用 “缩进” 代替 “花括号” 表示属性属于某个选择器,用 “换行” 代替 “分号” 分隔属性
  • 也可以使用 Sass 的全部功能,只是与 SCSS 相比个别地方采取了不同的表达方式
  • .sass 作为拓展名

三、Sass变量

1.变量声明:

  • 可把反复使用的css属性值 定义成变量,然后通过变量名来引用它们,而无需重复书写这一属性值
  • 使用 $ 符号来标识变量
  • $开头,字母 数字 下划线 - 组成  但不能以数字开头
  • 变量使用前必须声明
  • 变量可以存储:字符串、数字、颜色值、布尔值、列表、null 值

语法:

$variablename:value;

 实例:

/* 定义变量 */
$bgc1: yellow;
$color1: #123456;
/* 使用变量 */
.box2 {
    width: 200px;
    height: 200px;
    background-color: $bgc1;
    color:$color1
}

2.作用域:

  • 全局变量:没有被包含在任意的选择器{}中的变量称为全局变量 任意地方可使用
  • 局部变量:有被包含在任意的选择器{}中的变量称为局部变量 当前{}里面去使用
  • 内层可以使用外层 外层不能使用内层的变量
  • 局部变量变为全局变量:变量值后 ;前 加 !global

3.!global:

  • 使用 !global 关键词来设置变量是全局的
  • 所有全局变量一般定义在同一个文件  如:_globals.scss 然后使用 @include 来包含该文件

4.变量引用:

  • 凡是css属性的标准值可存在的地方,变量就可以使用
  • css生成时,变量会被它们的值所替代,之后如果你需要一个不同的值,只需要改变这个变量的值,则所有引用此变量的地方生成的值都会随之改变
  • 在声明变量时,变量值也可以引用其他变量
  • 一般情况下,你反复声明一个变量,只有最后一处声明有效且它会覆盖前边的值

5.- 与 _

  • 中划线命名的内容和下划线命名的内容是互通的无区别,包括 变量混合器Sass函数 的命名
  • 但是在sass中纯css部分不互通,比如类名、ID或属性名

四、Sass嵌套规则与属性

1.嵌套规则:

  • 将 子级选择器 放在 父级选择器 内部

2.父选择器&

  • 若想要在嵌套的选择器里面使用一个类似 :hover 的伪类用 &
  • 当包含父选择器标识符的嵌套规则被打开时,它不会像后代选择器那样进行拼接,而是&被父选择器直接替换

3.嵌套属性:

  • 有同样前缀的属性名
  • 把属性名从中划线-的地方断开,在根属性后边添加一个冒号: 紧跟一个{ }块,把子属性部分写在这个{ }块中

实例:

.parent {
    width: 300px;
    height: 300px;
    background-color: red;

    // 父元素选择器
    &:hover {
        background-color: yellow;

        a {
            color: #fff;
        }
    }

    .fa {
        $color: yellow;
        width: 260px;
        height: 260px;
        background-color: blue;

        .sn {
            width: 100px;
            height: 100px;
            background-color: green;
        }

        a {
            text-decoration: none;
            color: $color;
            // font-size: 100px;
            // font-weight: bold;
            // font-style: italic;
            // font-family: Georgia, 'Times New Roman', Times, serif; 
            // 属性嵌套
            font: {
                size: 100px;
                weight: bold;
                style: italic;
                family: Georgia, 'Times New Roman', Times, serif; 
            }
        }
    }
}

五、@import

css的@import规则:

  • 允许在一个css文件中导入其他css文件
  • 但只有执行到@import时,浏览器才会去下载其他css文件,这导致页面加载起来特别慢

sass的@import规则:

  • 在生成css文件时就把相关文件导入进来
  • 这意味着所有相关的样式被归纳到了同一个css文件中,而无需发起额外的下载请求
  • 所有在被导入文件中定义的变量和混合器均可在导入文件中使用
  • 不需要指明被导入文件的全名  可以省略 .sass.scss 文件后缀

语法:

@import "filename";

六、@mixin 与 @include

1.概念:

通过sass的混合器实现大段类似样式的重用

  • @mixin 指令允许定义一个可以在整个样式表中重复使用的样式

  • @include 指令可以将混入(mixin)引入到文档中

  • 混入也还可以包含选择器、属性嵌套,以及父选择器

  • 一个mixin可以被多个地方使用

2.向混入传递变量:

(1)混入可以接收参数  可以向混入传递变量(也可直接使用外部变量)

   实例:

@mixin box($color1) {
    color: $color1;
}
.test_color {
    /* 在使用的时候传入实际的值 */
    @include box(pink);
}

(2)混入的参数可以定义默认值

   实例:

/* 没有传值将使用默认值 */
@mixin box($color1: blue) {
    color: $color1;
}
.test_color {
    /* 传值则为红色 */
    @include box(red);
}
.test_color {
    /* 未传值使用默认值为蓝色 */
    @include box();
}

(3)设置可变参数:不能确定一个混入(mixin)或函数(function)使用多少个参数,使用 ... 

  实例:

@mixin box-shadow($shadows...) {
      box-shadow: $shadows;
}
.shadows {
  @include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}
.shadows1 {
  @include box-shadow(2px 6px 10px #999);
}

七、extend 与 继承

  • 选择器继承是指一个选择器可以继承另一个选择器定义的所有样式
  • 通过 @extend 语法实现
  •  目的是减少重复量 复用代码

实例:

.fa {
    width: 300px;
    height: 300px;
    background-color: red;
    img {
        width: 100px;
        height: 100px;
    }
    div {
        display: flex;
        justify-content: center;
        align-items: center;
        .left {
            flex-shrink: 2;
        }
    }
    &:hover {
        background-color: red;
    }
}
section.fa {
    color: green;
}
.sn {
    @extend .fa;
    // 任何跟.fa有关的组合选择器样式也会被.sn以组合选择器的形式继承
}

八、条件判断语句

1. @if

语法:

@if 条件表达式 { 条件判断成功这里的代码就执行 不成功就不执行 }

实例:

$temp: 100;
// temp > 100 :500px  temp < 100 :300px  temp = 100 :400px
header {
    @if $temp > 100 {
        // 代码是否执行 条件是否成功 条件判断成功 里面的代码才会被使用
        width: 500px;
    }
    @if $temp < 100 {
        width: 300px;
    }
    @if $temp = 100 {
        width: 400px;
    }
}

2. @else if  单分支

语法:   

 @if 条件1 {
        条件1判断成功就执行的代码
    } 
 @else {
        条件1判断不成功就执行的代码
    }

实例:

//  temp > 100:500px  temp<=100:300px
section {
    @if $temp > 100 {
        // 条件判断成功 就执行
        height: 500px;
    }
    @else {
        // 条件判断不成功 就执行
        height: 300px;
    }
}

3. @ else 多分支

语法:

  @if 条件1 {
        条件1判断成功就执行的代码
    } 
    @else if 条件2 {
        条件1判断不就继续判断条件2 条件2 判断成功就执行的代码
    }
    @else if 条件3 {
        条件1 和 条件2判断不就继续判断条件3 条件3 判断成功就执行的代码
    }
    .....

    @else {
        以上所有条件判断不成功就执行的代码
    } 

实例:

// temp > 100 :500px ; temp < 100 :300px ; temp = 100 :400px
footer {
    @if $temp > 100 {
        // $temp > 100判断成功就执行
        line-height: 500px;
    }
    @else if $temp < 100 {
        // $temp > 100判断不成功就继续判断$temp < 100
        line-height: 300px;
    }
    @else {
        // $temp > 100  和 $temp < 100都判断不成功就执行
        line-height: 400px;
    }
}

九、总结

1. 后缀.sass格式

  • Sass 是由buby语言编写的一款css预处理语言,和html一样有严格的缩进风格

  • 因不使用花括号和分号 不被广为接受

  • Sass 是一款强化 CSS 的辅助工具,是对 CSS 的扩展,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、继承(extend)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅

  • 使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目

2. 后缀.scss格式

  • SCSS是一款css预处理语言,SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能

  • 任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件

  • SCSS 需要使用分号和花括号而不是换行和缩进

  • SCSS 对空白符号不敏感,其实就和css3语法一样

3. CSS预处理

  • css预处理器是用一种专门的语言,进行网页的样式设计,之后在被编译为正常的css文件,以供项目使用

  • 使用css预处理语言的好处:使css更简洁、方便修改、可读性强、适应性强、易于代码的维护

4. CSS和scss的关系

  • SCSS 和 CSS 写法无差别

  • 把现有的“.css”文件直接修改成“.scss”即可使用

5. .sass和.scss的关系

  • sass和scss其实是一样的css预处理语言,scss可简单理解是sass的一个升级版本

  • SASS版本3.0之前的后缀名为.sass,而版本3.0之后的后缀名.scss

  • sass时代是有严格的缩进规范并且没有‘{}’和‘;’

  •  而scss则和css的规范是一致的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端基础学习之Sass 的相关文章

  • 如何让更大的布局适合小设备屏幕?

    我有一个小问题meta viewport元素 问题是我的布局min width比我想要使用的许多屏幕分辨率都要大 所以将其设置为 没有帮助 结果我得到的页面必须缩小以适应设备宽度 如果我什至添加像 它也不起作用 发现了一个黑客来自CSS 技
  • 如何隔离 Vuetify 全局样式

    我已经开始在旧的现有项目中将 Vue js 与 Vuetify 结合使用 所以我没有重写所有前端 我只是导入了Vue并替换了一些部分 然后我注意到一个非常意想不到的行为 Vuetify 具有常见类的全局样式 例如 title它不仅影响整个页
  • iPad 上的网站纵向视图

    我的网站在 iPad 纵向模式下无法正确显示 它在横向模式下看起来不错 但当我将其转换为纵向模式时 我最终会得到一个混乱的网站 所有元素都分散在整个网站上 我怎样才能解决这个问题 请帮我 这是我网站的链接 inclouds co uk ht
  • AJAX 加载的图像在 Safari 中无法正确显示

    因此 我使用 AJAX 加载每个页面的内容并将其注入当前页面 在 Chrome Firefox Internet Explorer 上一切都运行良好 尽其所能 哈哈 并且除了两个奇怪的部分之外 内容在 Safari 上加载良好 通过 AJA
  • 如何将 ng-repeat 分成批次

    我正在做这个 ref checkbox 示例http getbootstrap com javascript buttons examples http getbootstrap com javascript buttons example
  • ie11 中的 SVG 问题

    我有一个 div 其高度设置为 320 像素 然后它的子元素宽度设置为 100 它的子文件是一个 SVG 文件 我将其宽度设置为容器的 200 在运行良好的 Chrome 和 Firefox 中 我得到了如下所示的漂亮图像 HTML 看起来
  • 如何将安全中心与 Flexbox 一起使用?

    居中的弹性盒项目可能会出现不良行为当他们溢出容器时 https stackoverflow com questions 33454533 cant scroll to top of flex item that is overflowing
  • 为什么 z-index 对 div 不起作用?

    我试图让我的页脚显示在页脚背景的顶部 但 z index 似乎不起作用 有人看出它有什么问题吗 http jsfiddle net f2ySC http jsfiddle net f2ySC 你必须明确地定义position财产 foote
  • 使用 jquery 触发 css3 关键帧

    我写了一个关键帧动画 webkit keyframes cubemove 0 webkit transform translateZ 194px rotateY 0deg 20 webkit transform translateZ 194
  • 两个单独表格上的 Td 高度

    我有两个单独的表 我在每个 tr 上使用焦点 悬停函数 该函数同时在两个表上都很好用 我的问题是 td 高度 因为如果第一个表中 td 的描述更大 将显示在中的两行上相同的td和td的高度将被修改 但仅限于第一个表td 如何记住第一个表中
  • height:100% 在 Internet Explorer 中不起作用

    我有一个关于 CSS 属性的问题height 100 在 Internet Explorer 中 height 100 在 IE 中不起作用 但在 Firefox 和 Chrome 中可以 HTML 文件 div ul ul div
  • CSS 列不会水平对齐

    我正在使用列计数来允许我的文本流入两个不同的列 但第一列的顶部 最左边 低于另一列 col moz column count 2 webkit column count 2 column count 2 div h3 Options h3
  • 角度错误:冲突:多个资源向同一文件名 file.svg 发出不同的内容

    我有这个css in my component scss file bg background url assets images file svg center center no repeat 并且该路径中只有一个 svg 文件 因此每
  • 工具提示未显示在 fontawesome 图标按钮上

    我有一个很棒的图标嵌套在 a 中 但工具提示没有弹出 i class fa fa random title some tooltip i style i fa display inline block 如果您使用的工具提示插件使用 befo
  • 获取脚本中 CSS 颜色属性的实际值

    当我使用window getComputedStyle在元素的颜色属性上 它返回一个带有rgb or rgba 值 无论最初用于设置颜色的语法如何 在 Internet Explorer 中 当被迫使用element currentStyl
  • 为什么明确:正确的方法没有按预期工作

    我总是很困惑clear left clear right and clear both在CSS中 我知道clear both意味着它不允许在其两侧浮动元素 我做了一些测试here http jsfiddle net malaikuangre
  • 这个 jQuery 选择器中的“>”是什么意思?

    大于号 gt 在这里制作 Is someElement find gt someAttribute 与 someElement find someAttribute 否 它仅选择一个元素 如果它是以下元素的直接子元素 someElement
  • 如何获取 CSS 旋转元素的实际(非原始)高度

    我需要获取几个不同元素的实际高度 为了精确的自定义工具提示定位 并且其中一些元素 不是全部 被旋转 elem outerHeight 返回原始高度 而不是实际显示的高度 这是一个非常简单的例子 http jsfiddle net NPC42
  • 删除 CSS Transitionend 事件侦听器不起作用

    我在尝试删除 css Transitionend 事件侦听器时遇到问题 我可以添加监听器 e addEventListener transitionend function event transitionComplete event pr
  • 在 Div 的两个顶角创建一个三角形,用边框划分

    通过遵循以下问题和答案 我能够在 div 的右上角获得一个三角形 Div 中的右上角三角形 https stackoverflow com questions 18531959 how to create triangle shape in

随机推荐

  • EndNote在Word中插入文献不能自动生成编号 - 解决方案

    本文出处 新浪博客 小数码植物摄影 之http blog sina com cn s blog 629be3eb0100sih3 html 新浪博客 小数码植物摄影 首页 http blog sina com cn u 1654383595
  • Android Studio中怎样引用图片资源

    随着不断接触Android Studio 越来越发现和Eclipse有着巨大的差别 不管是表面的目录结构 还是内在对各种资源的管理 本篇就来聊聊Android Studio中怎样来显示图片 以及与Eclipse中的差别 在Eclipse中依
  • requests爬虫遇到404怎么办_Python爬虫基础库和实践

    爬虫有三大基础库Requests BeautifulSoup和Lxml 这三大库对于初学者使用频率最高 现在大家一起来看看这基础三大库的使用 Requests库 Requests库的作用就是请求网站获取网页数据 Code res reque
  • C# Modbus Rtu实现

    Modbus Rtu的实现与Modbus Tcp的实现类似 C ModBus Tcp的学习及Master的实现 我们还是需要借用一个开源库NModbus4 在vs中 打开NuGet管理器 安装NModbus4 具体实现 具体实现与之前的Mo
  • 主流大语言模型的技术原理细节

    作者 spring 1 比较 LLaMA ChatGLM Falcon 等大语言模型的细节 tokenizer 位置编码 Layer Normalization 激活函数等 2 大语言模型的分布式训练技术 数据并行 张量模型并行 流水线并行
  • Vue组件(插槽)

    1 插槽属于Vue组件的三个核心之一 其余两个分别是属性和事件 今天主要学习插槽的使用 2 插槽 slot 将子组件和父组件进行组合 可以弥补视图的不足 是组件具有更好的拓展性 组件的封装方式 抽取共性 3 插槽的使用方式 1 vue2 0
  • 解决'Unknown custom element'问题

    报错截图 解决方法 模板少写了一个 然后删除多余的模板就行啦
  • 如何安装mysql5.7包_安装mysql 5.7 最完整版教程

    安装环境 CentOS7 64位 MINI版 安装MySQL5 7 1 配置YUM源 在MySQL官网中下载YUM源rpm安装包 http dev mysql com downloads repo yum 下载mysql源安装包 shell
  • anaconda python3.8目录_Linux系统下Anaconda的安装和使用教程

    一 Anaconda的安装 去官网下载 https www anaconda com products individual 下载到本地后利用FileZilla软件上传到服务器 我这里上传到了 data bioinfosoftware文件夹
  • vcpkg编译第三方库leveldb

    vcpkg编译leveldb 1 安装vcpkg 使用git命令直接pull vcpkg源码 git clone https github com microsoft vcpkg 2 在vcpkg目录执行bootstrap vcpkg ba
  • Android 之 intent内容解析

    文章目录 intent intent 属性 1 Action 匹配规则 Action匹配只要有一个与Intent中携带Action相同即可 2 Category 注意 3 Data 4 Component 5 Type 6 Extras 存
  • DirectShow音视频同步实验报告(2)

    单一视频流 Filter Graph如图2 图2 单一视频流的Filter Graph 注意 紧靠Video Renderer的上一级Filter的Video输出Pin 其GetMediaType函数提供的Media Type的VIDEOI
  • CMake学习之set

    文章目录 一 set关键字 二 变量的使用 一 set关键字 将一个cmake变量设置为给定值 将变量
  • 搭建jupyter notebook,开启线上IDE学习

    一 windows搭建jupyter notebook 在jupyter notebook中利用本地虚拟环境 1 激活本地虚拟环境 activate py36 安装nb conda conda install nb conda 3 在ana
  • 发布一套很有本土特色的闽南语QQ表情

    发布一套很有本土特色的闽南语QQ表情 作为福建本地人 对闽南语在熟悉不过了 平时朗朗上口的俗话 现在演变成活泼可爱有趣的QQ表情咯 大家喜欢的话可以来收藏 底下有QQ表情导入包 直接导入QQ即可使用了
  • 如何安装EasyX图形库

    如何下载 1 打开EasyX官网点我 应该是这样子的 2 点击 下载 EasyX 在图片的右边 找不到算你眼瞎 3 直接打开安装包 4 下一步 来到选择界面 5 点击安装 EasyX文档也可以安装一下 但下面的必须点一个 6 点击关闭 结束
  • 服务器运维基础知识,运维技术必须了解的服务器基础知识

    小影提醒 文章部分内容源于互联网收集整理 不代表影速观点 若有咨询 运维技术必须了解的服务器基础知识 等有关服务器 云主机租用 托管 配置 价格问题 请随时咨询影速科技客服 享受1v1贴心服务 1 双路等于双核么 常听说双路至强XX式服务器
  • Spring Boot单元测试

    目录 什么是单元测试 单元测试的好处 单元测试的实现 断言 修改操作 删除操作 添加数据 返回受影响的行数 返回自增id 什么是单元测试 是指对软件中的最小可测试单元进行检查和验证的过程 单元测试的好处 可以非常简单 直观 快速的测试某一个
  • 模块化 组合化_一流的组合模块系统

    模块化 组合化 这是本系列的第二篇文章 介绍了用于组合的反转控制类型系统 本文讨论了比上一篇文章的 一流过程类型 更通用的 模块类型 系统 注意 某些功能性编程语言也尝试定义一流模块 本文定义的First Class Modules是从反向
  • 前端基础学习之Sass

    一 概念 1 Sass是什么 Sass 英文全称 Syntactically Awesome Stylesheets 是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言 Sass