【面试】css预处理器之sass(scss)

news2025/1/24 1:23:27

目录

为什么引入css预处理器

可读性

嵌套:关系明朗

选择器

属性

伪类‘’

变量:语义明确

默认变量:美元符号 $ 变量名:值 !default

全局变量::global {  $global-x: }

变量插值:#{}

map键值对:$变量名:( key:值,...)

可维护性

混入指令/混合指令/宏指令@mixin:函数传参提高样式的复用率

不带参数混合宏

带参数混合宏

带特别多参数混合宏

调用混合宏@include

继承@extend:提高复用率

占位符 %placeholder:不产生代码的可继承样式

混合宏、继承、占位符

什么情况不适用

sass=scss

后缀扩展名

语法书写方式

sass和less

编译

Sass在服务端处理的

Less在客户端使用Less.js

语法

插值#{}

注释

加减法

乘法

除法

@if, @else if ,@else条件

@for

@while循环

@each循环

@import引入 SCSS 和 Sass

为什么引入css预处理器

提高CSS代码的可读性可维护性

可读性

嵌套:关系明朗

选择器
#css
nav a {
  color:red;
}
header nav a {
  color:green;
}
#scss
nav {
  a {
    color: red;
    header & {
      color:green;
    }
  }  
}
属性
#css
.box {
    border-top: 1px solid red;
    border-bottom: 1px solid green;
}
#scss
.box {
  border: {
   top: 1px solid red;
   bottom: 1px solid green;
  }
}
伪类‘’
.clearfix{
    &:after {
        clear:both;
        overflow: hidden;
    }
}

变量:语义明确

默认变量:美元符号 $ 变量名:值 !default
$link-color: #3498db !default;

a {
  color: $link-color; // 如果未定义 $link-color,则使用默认值 #3498db
}
全局变量::global {  $global-x: }
:global {
  $global-padding: 10px;
}

.box {
  padding: $global-padding;
}
变量插值:#{}
$theme: light;

body {
  background-color: #{$theme}-background; // 将变量插入到字符串中
}
map键值对:$变量名:( key:值,...)
$colors: (
  primary: #3498db,
  secondary: #2ecc71,
  accent: #e74c3c
);

.box {
  background-color: map-get($colors, primary);
}

可维护性

混入指令/混合指令/宏指令@mixin:函数传参提高样式的复用率

相当于先写好了一组样式,其它地方传参/直接引用

Vue中叫它混入指令,可以设置参数,复用重复代码块。

但会生成冗余的代码块。比如在不同的地方调用一个相同的混合宏时,不能将两个合成并集形式。

不带参数混合宏
@mixin border-radius{
    border-radius: 5px;
}
带参数混合宏
# 带值参数
@mixin border-radius($radius){
    border-radius: $radius;
}
# 带默认值参数
@mixin border-radius($radius:5px){
    border-radius: $radius;
}
带特别多参数混合宏

当混合宏传的参数过多之时,可以使用“…”来替代

# 带多个参数
@mixin center($width,$height){
  width: $width;
  height: $height;
  margin-top: -($height) / 2;
  margin-left: -($width) / 2;
}
# 带特别多参数
@mixin box-shadow($shadows...){
  @if length($shadows) >= 1 {
    -webkit-box-shadow: $shadows;
    box-shadow: $shadows;
  } @else {
    $shadows: 0 0 2px rgba(#000,.25);
    -webkit-box-shadow: $shadow;
    box-shadow: $shadow;
  }
}
调用混合宏@include

关键词“@include”来调用声明好的混合宏

button {
  @include border-radius;
}
.box {
  @include border-radius(3px);
}
.box-center {
  @include center(500px,300px);
}
.box {
  @include box-shadow(0 0 1px rgba(#000,.5),0 0 2px rgba(#000,.2));
}

继承@extend:提高复用率

子类里继承了父类及其子类

.one{
    color: #000;
}
.one a{
    font-size: 10px;
}
.two{
    @extend .one;
    background-color: #fff;
}

编译出来的 CSS 会将选择器合并在一起,形成组合选择器.

.one, .two {
  color: #000;
}

.one a, .two a {
  font-size: 10px;
}

.two {
  background-color: #fff;
}

占位符 %placeholder:不产生代码的可继承样式

 %声明的代码,如果不被 @extend 调用的话,不会产生任何代码

%mt5 {
  margin-top: 5px;
}
.btn {
  @extend %mt5;
}
.block {
  @extend %mt5;
}

通过 @extend 调用的占位符,编译出来的代码会将相同的代码合并在一起.

.btn, .block {
  margin-top: 5px;
}

混合宏、继承、占位符

什么情况不适用

直观越好,运算类型(特别是map类型的,尽量不要在实际项目中使用,后续维护成本很高的。

sass=scss

平时都称之为 Sass,

后缀扩展名

  • Sass :“.sass”,
  • SCSS :“.scss”

语法书写方式

  • Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;)
  • SCSS 的语法书写和我们的 CSS 语法书写方式非常类似

sass和less

编译

Sass在服务端处理的

Less在客户端使用Less.js

语法

插值#{}

(1)构建一个选择器

@mixin generate-sizes($class, $small, $medium, $big) {
    .#{$class}-small { font-size: $small; }
    .#{$class}-medium { font-size: $medium; }
    .#{$class}-big { font-size: $big; }
}
@include generate-sizes("header-text", 12px, 20px, 40px);

(2) 属性变量

$properties: (margin, padding);
@mixin set-value($side, $value) {
    @each $prop in $properties {
        #{$prop}-#{$side}: $value;
    }
}
.login-box {
    @include set-value(top, 14px);
}

@mixin中插值不能作为赋值语句的值部分,只能用做属性名定义或者选择器构建时@include中不能使用插值

注释

1、类似 CSS 的注释方式,使用 ”/* ”开头,结属使用 ”*/ ”

2、类似 JS的注释方式,使用“//” 两者区别,

前者会在编译出来的 CSS 显示后者在编译出来的 CSS 中不会显示

加减乘除连带单位一起计算

加减法

在变量或属性中都可以做加法运算,但对于携带不同类型的单位时,在 Sass 中计算会报错

.content {
  width: $full-width - $sidebar-width;
}

字符串拼接

div {
  cursor: e + -resize;
}
编译后
div {cursor: e-resize;}

乘法

当一个单位同时声明两个值时会有问题 只能有一个值带单位(比如 em ,px , %)

# 编译的时候报“20px*px isn't a valid CSS value.”错误信息。
.box {
  width:10px * 2px;  
}
# 正确的写法
.box {
  width: 10px * 2;
}

除法

如果数值或它的任意部分是存储在一个变量中或是函数的返回值。
• 如果数值被圆括号包围。
• 如果数值是另一个数学表达式的一部分

在除法运算时,如果两个值带有相同的单位值时,除法运算之后会得到一个不带单位的数值

.box {
  width: (1000px / 100px);
}
编译后
.box {
  width: 10;
}

@if, @else if ,@else条件

@mixin blockOrHidden($boolean:true) {
  @if $boolean {
      display: block;
    }
  @else {
      display: none;
    }
}
.block {
  @include blockOrHidden;
}
.hidden{
  @include blockOrHidden(false);
}

@for

@for $i from <start> through <end>
@for $i from <start> to <end>

关键字 through 表示包括 end ,而 to 不包括 end 

@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

@while循环

@while $types > 0 {
    .while-#{$types} {
        width: $type-width + $types;
    }
    $types: $types - 1;
}

@each循环

@each 循环就是去遍历一个列表,然后从列表中取出对应的值

@each $var in <list>
$list: adam john wynn mason kuroir;
@mixin author-images {
    @each $author in $list {
        .photo-#{$author} {
            background: url("/images/avatars/#{$author}.png") no-repeat;
        }
    }
}
.author-bio {
    @include author-images;
}

@import引入 SCSS 和 Sass

Sass 扩展了 CSS 的 @import 规则,让它能够引入 SCSS 和 Sass 文件。 所有引入的 SCSS 和 Sass 文件都会被合并并输出一个单一

Sass总结笔记 基础入门(超级直观细节) - 掘金

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

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

相关文章

【Java SE】带你在String类世界中遨游!!!

&#x1f339;&#x1f339;&#x1f339;我的主页&#x1f339;&#x1f339;&#x1f339; &#x1f339;&#x1f339;&#x1f339;【Java SE 专栏】&#x1f339;&#x1f339;&#x1f339; &#x1f339;&#x1f339;&#x1f339;上一篇文章&#xff1a;带你走近Java的…

C++初阶(十三)vector

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、vector的介绍二、vector的模拟实现1、模拟实现2、测试结果 一、vector的介绍 vector的文…

分割掩模 VS 掩膜

掩膜 Mask分割掩模 Segmentation Mask总结示例 掩膜 Mask “掩膜” 是指一种用于 标识或遮蔽图像中特定区域 的 图像。 在图像处理中&#xff0c;掩膜通常是一个 二值图像&#xff0c;其中的 像素值为 0 或 1。binary Mask 叫做二元掩膜&#xff0c;如下图所示&#xff1a; 这…

九、hdfs中Namenode元数据处理

1、元数据的由来 在hdfs文件系统中&#xff0c;用户的每一次操作&#xff0c;都会对文件系统产生响应的影响&#xff0c;那么谁来记录这些影响呢&#xff1f; 在hdfs文件系统中&#xff0c;edits文件记录了hdfs中的每一次操作&#xff0c;以及本次操作影响的文件其对应的block。…

为啥网络安全缺口这么大,还是这么缺网络安全工程师?(网络安全行业前景到底如何)

为啥网安领域缺口多达300多万人&#xff0c;但网安工程师也就是白帽黑客却很少&#xff0c;难道又是砖家在忽悠人&#xff1f; 原因主要为这三点: 首先是学校的原因&#xff0c;很多学校网络安全课程用的还都是十年前的老教材&#xff0c;教学脱离社会需求&#xff0c;实操技能…

营销宝典:让天下没有难写的营销软文

作为一个互联网人&#xff0c;一个营销人&#xff0c;一个手里有项目的人&#xff0c;没有点三脚猫功夫&#xff0c;是很难在这上面立得住&#xff0c;站得稳的。 我们宣传自己也好&#xff0c;宣传产品和服务也好&#xff0c;无非通过三种方式触达客户&#xff1a;视频&#…

【Pytorch】Visualization of Feature Maps(5)——Deep Dream

学习参考来自&#xff1a; PyTorch实现Deep Dreamhttps://github.com/duc0/deep-dream-in-pytorch 文章目录 1 原理2 VGG 模型结构3 完整代码4 输出结果5 消融实验6 torch.norm() 1 原理 其实 Deep Dream大致的原理和【Pytorch】Visualization of Feature Maps&#xff08;1&…

3dMax导出glft和glb格式模型插件Max2Babylon教程

为了满足Autodesk提供自己的导出管道之前的迫切需要&#xff0c;Babylon.js导出器可用于3dMax。导出器可以将3dMax场景导出为.glTF文件、.glb文件或.babylon文件。 【适用版本】 3dMax2015 - 2024 【安装方法】 1.选择和自己电脑中3dMax所对应的插件版本&#xff0c;解压缩。…

JOSEF约瑟 逆功率继电器 GG-21 5a 100v 50hz

系列型号 GG-21逆功率继电器 GG-22过载继电器 1 用途 逆功率继电器GG-21/5A/100V 在出现逆功率时&#xff0c;从电网中断开交流发电机。 2 概述 逆功率继电器是基于感应式原理(具有旋转磁场)而工作。 继电器导磁体由两个磁路系统组成&#xff1a;上磁路系统和下磁路系统…

箭头函数与普通函数:谁更胜一筹?

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

数据结构 -- 图论之最小生成树

目录 1.最小生成树算法 1.Kruskal算法 2.Prim算法 1.最小生成树算法 定义:最小生成树算法:连通图有n个顶点组成,那么此时的图的每一个点都能相互连接并且边的个数为n-1条,那么此时该图就是最小生成树. 下面量算法有几个共同的特点: 1.只能使用图中权值最小的边来构造生成树 …

F. Magic Will Save the World

首先积攒了能量打了怪再积攒是没有意义的&#xff0c;可以直接积攒好&#xff0c;然后一次性进行攻击 那么怎么进行攻击了&#xff1f;可以尽量的多选怪物使用水魔法攻击剩余的再用火魔法进行攻击&#xff0c; 也就是只要存在合法的体积&#xff08;即装入背包的怪物的体积之…

谷粒商城-商品服务三级分类功能·-后端代码

递归获取树形结构 CategoryController RequestMapping("/list/tree")public R list(){List<CategoryEntity> entities categoryService.listWithTree();return R.ok().put("data",entities);}CategoryServiceImpl 第一步&#xff1a; 1.查出所有分类…

MySQL 中的锁(三)

8.7. 死锁和空间锁 一般来说&#xff0c;只要有并发和加锁这两种情况的共同加持下&#xff0c;都会有死锁的身影。 死锁的具体成因&#xff0c;借用我们在并发编程中的内容&#xff1a; 8.7.1. 死锁 8.7.1.1. 概念 是指两个或两个以上的进程在执行过程中&#xff0c;由于竞…

史上最全接单平台集锦,程序员不容错过!

非典型程序员不是每天都累成狗&#xff0c;天天”996"甚至”007“。可能&#xff0c;面临着上班摸鱼没事干&#xff0c;下班躺尸打游戏的无聊境况。那么&#xff0c;如果你也是这样的程序员&#xff0c;有没有什么安排可以打发时间&#xff1f; 闲着还不如挣钱~心情好的时…

聚焦 6G 无线技术——目标和需求

从 3G 到 5G 乃至之后的每一种无线标准&#xff0c;都在设计时加入了推动行业发展的具体目标。例如&#xff0c;4G 专注于以 IP 为中心的灵活语音、数据和视频通信&#xff0c;而 5G 则在此基础上进行了改进。6G 的目标是提供更加无处不在、更高效、更身临其境的无线连接。6G 系…

记录一次YAMLException异常

记录一次YAMLException异常 ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 报错以及B…

【从删库到跑路 | MySQL总结篇】表的增删查改(进阶下)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】&#x1f388; 本专栏旨在分享学习MySQL的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、联合…

Linux常用命令----touch命令

文章目录 Linux操作系统中&#xff0c;touch 命令是一个常用且强大的工具&#xff0c;主要用于创建空文件或设置文件的时间戳。本文将详细介绍 touch 命令的各种参数及其用法&#xff0c;并通过实例演示来加深理解。 1. touch命令基础 touch 命令的基本语法格式为&#xff1a…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)

一、Extend扩展组件样式 1、作用 前文提到可以使用Styles用于样式的扩展&#xff0c;在Styles的基础上&#xff0c;ArkTS语法还提供了Extend&#xff0c;⽤于扩展原生组件样式&#xff0c;包括Text、Button等等。 2、定义语法 Extend(UIComponentName) function functionNam…