前端基础学习之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 的相关文章

  • 简化 CSS 代码

    我怎样才能简化这段代码 user panel subscribe user panel faves user panel tags user panel title user panel calendar a user panel item
  • 使用jquery和css点击按钮后旋转div文本

    我想使用 jquery 和 css 单击按钮后旋转 div 文本 如果用户点击Rotate Left按钮 然后文本在左侧旋转 or用户点击Rotate Right按钮然后文本在右侧旋转 Example div Happy Birthday
  • 响应式 CSS 图像锚点标签 - 图像地图样式

    我一直在开发一个响应式网站 并且在图像映射方面遇到了一些问题 图像映射似乎不适用于基于百分比的坐标 经过一番谷歌搜索后 我发现了一个 JS 解决方法 http mattstow com experiment responsive image
  • 在打印 CSS 上在每个页面周围绘制边框?

    打印时我需要在每个页面周围绘制边框 我最初是使用带有分页符的 div 来完成此操作 例如 media print contentContainer position inline height 98 width 100 top 0px le
  • 显示带有背景颜色的百分比条

    例如 如果我有一个包含两列和 2 行的表 Col1 Percentage 50 50 70 70 如何用代表 COl1 值的颜色填充百分比列 像这样的东西 您可以使用具有两个紧接着的停止点的线性渐变 percentageFill heigh
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • CSS 选择器用于选择最后两个子项,而不知道列表中有多少项

    我有一个无序列表 它有时包含 4 5 6 或 7 个项目 我想知道是否有一个 CSS 选择器来选择最后两项 我意识到 last child会给我最后一件物品 是否有 倒数第二个孩子 选择器 或者 孩子数量 2 选择器 HTML ul li
  • 如何在 div 容器内的元素之间留出空间

    我有一个弹性容器 它将由元素动态填充 容器没有固定宽度 I use max width max content 并且可以包含我想要的任意数量的元素 问题是我需要这些元素之间的间距 但不需要元素和容器之间左侧和右侧的间距 当然我可以用 ele
  • 使用溢出时无法隐藏滚动条:auto

    我有这个CSS div background color red position relative height 414px overflow auto width 902px margin 0px auto 我尝试过overflow y
  • Google 再营销标签 - iframe 高度问题

    我注意到 Google 的再营销代码会在我的页面底部插入一个 iframe 问题是 iframe 弄乱了我的布局 它的高度为 13 像素 并且在底部留下了空白的白色垂直空间 我尝试用 css 隐藏它 但它在 IE9 中仍然可见 iframe
  • 文本后面有粗下划线

    如何使用 span 和 css 在文本 ABC 后面重现这种下划线 我已经能够做下划线below嵌套的文本span和彩色的border bottom 但无法获取behind图像和above文本基线 p style font size 48p
  • 响应式导航栏隐藏其下方的元素

    我创建了一个响应式导航栏 但它使下面的元素 Flexslider 插件 消失 在我制作导航栏之前 下面的 Flexslider 可以正常显示 但现在不行 导航栏的 z index 为 2 所以我不知道问题是什么 我应该如何 更改什么才能允许
  • 为开槽元素中的后代元素设置样式

    是否可以选择开槽元素中的后代元素 像这样的例子 slotted div p color blue div p test p div 这不起作用 不 您只能选择顶级节点 slotted slotted 中的选择器只能是复合选择器 https
  • 每 3 秒重复一次动画

    我正在使用 WOW js 和 animate css 现在我正在将 CSS 运行到 Infinite 我想知道如何让我的课程运行 3 秒停止并再次开始到无限 My html img src images fork png class for
  • 删除数据表列中的额外填充

    你好 我创建了 JQuery DataTables 如下所示 所以我的问题是如何删除 图片 列中过多的填充 这就是我初始化表的方式 violators tbl DataTable aoColumnDefs bSortable false a
  • 禁用引导列上的滚动

    我正在尝试禁用引导列上的滚动 这是我的代码 div class container fluid h 100 div class row h 100 div class col 4 h 100 bg dark fixed div div cl
  • 如何将背景图像仅应用于一个反应页面而不是整个应用程序?

    注册页面示例 register background image linear gradient to right ff5722 0 ff9800 100 margin top 150px important div div div div
  • 现在 CSS3 供应商前缀有多必要? [复制]

    这个问题在这里已经有答案了 我只是想知道现在在 CSS 中指定 webkit moz ms 或 o 等供应商前缀在多大程度上仍然有必要 如果我理解正确的话 opera 切换到了 webkit 所以会删除 o 对吗 IE 在 IE10 中不再
  • 避免响应式页面的重复内容

    我目前正在做一个涉及响应式设计的项目 整个布局应该使用HTML和CSS来实现 我知道可以使用 java 脚本将内容从一个列布局移动到另一列布局 而无需复制内容 但是使用 HTML 和 CSS 是否可以实现相同的效果 以下面的例子为例 它会在
  • 指针事件:无,过滤,适用于 ie8 和任何地方,不适用于 ie9

    正如我在这里看到的 https stackoverflow com questions 3680429 click through a div to underlying elements 4839672 4839672 过滤器可用于模拟跨

随机推荐

  • 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