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

目录

为什么引入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.mzph.cn/news/182903.shtml

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

相关文章

轻量封装WebGPU渲染系统示例<39>- emissive和arm纹理支持(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/DynamicShaderBuilding2.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export class DynamicShaderBuildi…

python操作Mysql学习

文章目录 版权声明准备&#xff1a;MYSQL数据库数据库简介数据库分类数据库管理系统SQL语句关系型数据库中核心元素MySQL环境搭建Mysql数据类型数据完整性和约束MYSql基本操作登录和退出数据库命令数据库基本操作命令数据表基本操作命令数据表结构修改命令表数据操作命令Mysql查…

PCIe学习必读——《PCI Express System Architecture》

PCI Express (peripheral component interconnect express) 简称 PCIe&#xff0c;是一种高速串行计算机扩展总线标准。是一种全双工总线&#xff0c;使用高速串行传送方式&#xff0c;能够支持更高的频率&#xff0c;连接的设备不再像 PCI 总线那样共享总线带宽。PCIe目前发布…

Python基础入门例程74-NP74 字典新增(字典)

最近的博文: Python基础入门例程73-NP73 查字典(字典)-CSDN博客 Python基础入门例程72-NP72 生成字典(字典)-CSDN博客 Python基础入门例程71-NP71 喜欢的颜色(字典)-CSDN博客 目录 最近的博文:

数据结构-二叉树(2)

3.4堆的应用 3.4.1 堆排序 堆排序即利用堆的思想来进行排序&#xff0c;总共分为两个步骤&#xff1a; 1. 建堆 1.升序&#xff1a;建大堆&#xff1b; 2.降序&#xff1a;建小堆。 2. 利用堆删除思想来进行排序 这种写法有两个缺点&#xff1a; 1、先有一个堆的数据结构 …

微信小程序 老年人心血管健康知识科普系统

本系统的功能有管理员&#xff1a;个人中心&#xff0c;用户管理&#xff0c;热点信息管理&#xff0c;疾病管理&#xff0c;疾病类型管理&#xff0c;治疗管理&#xff0c;治疗类型管理&#xff0c;护理管理&#xff0c;护理类型管理&#xff0c;科普管理&#xff0c;科普类型…

如何利用轮廓系数(Silhouette Coefficient)来判断模糊c均值聚类FCM的聚类簇数量

文章目录 前言一、轮廓系数的计算方法二、具体流程 前言 轮廓系数&#xff08;Silhouette Coefficient&#xff09;是一种评价聚类效果的指标&#xff0c;它可以用于判断模糊C均值聚类的聚类簇数量。 一、轮廓系数的计算方法 对于每个数据点i&#xff0c;计算它属于每个聚类…

游戏动作师效能汇报以及交接流程规范

游戏动作师效能汇报以及交接流程规范 效能部分 一段300帧以内的表演类或连招动作手K大概需要2-3天时间。&#xff08;不含蒙皮时间&#xff09;当然也根据内容的复杂程度而定&#xff0c;一般会预出1-2天。 一般蒙皮会给予1-2天的时间&#xff08;根据蒙皮精细程度&#xff…

lightdb-ignore_row_on_dupkey_index

LightDB 支持 ignore_row_on_dupkey_index hint LightDB 从23.4 开始支持oracle的 ignore_row_on_dupkey_index hint&#xff0c; 这个hint是用来忽略唯一键冲突的。类似与mysql的 insert ignore。 语法如下&#xff1a; 在LightDB中ignore_row_on_dupkey_index的效果等同于o…

深入了解HMAC加密技术:原理、应用与实践

一、引言 在网络安全领域&#xff0c;消息认证码&#xff08;MAC&#xff09;是一种重要的技术手段。Hash-based Message Authentication Code&#xff08;HMAC&#xff09;作为其中的一种&#xff0c;凭借其简单、高效、安全的特性&#xff0c;广泛应用于各种网络通信场景。本…

k8s中批量处理Pod应用的Job和CronJob控制器介绍

目录 一.Job控制器 1.简介 2.Jobs较完整解释 3.示例演示 4.注意&#xff1a;如上例的话&#xff0c;执行“kubectl delete -f myJob.yaml”就可以将job删掉 二.CronJob&#xff08;简写为cj&#xff09; 1.简介 2.CronJob较完整解释 3.案例演示 4.如上例的话&#xf…

工艺系统所管理数字化实践

摘要 本文介绍了上海核工程设计研究院在数字化转型方面的实践&#xff0c;包括业务数字化和管理数字化两个方面。业务数字化方面&#xff0c;该院通过开发小工具改进工作流程。管理数字化方面&#xff0c;该院采用零代码平台集中管理管道力学信息相关模型和数据&#xff0c;并…

虾皮shopee关键词搜索商品接口,虾皮shopee关键词搜索列表接口,宝贝详情页接口,关键词取商品列表接口

关键词搜索商品API接口在电商平台中具有重要的作用&#xff0c;可以提供精准搜索、增加用户转化率、优化用户体验、精准广告投放以及市场调研和商品策划等功能。这些功能有助于提高用户的购物体验、提升电商平台的竞争力&#xff0c;并增加用户的忠诚度和购买意愿。 shopee.it…

JeeSpringCloud uploadFile.jsp 文件上传漏洞复现

0x01 产品简介 JeeSpringCloud是一款免费开源的JAVA互联网云快速开发平台&#xff0c;微服务分布式代码生成的敏捷开发系统架构&#xff0c;项目代码简洁、注释丰富、上手容易、还同时集中分布式、分布式事务、微服务,同时包含许多基础模块和监控、服务模块&#xff0c;JeeSpri…

RabbitMQ消息模型之Work Queues

Work Queues Work Queues&#xff0c;也被称为&#xff08;Task Queues&#xff09;&#xff0c;任务模型&#xff0c;也是官网给出的第二个模型&#xff0c;使用的交换机类型是直连direct&#xff0c;也是默认的交换机类型。当消息处理比较耗时的时候&#xff0c;可能生产消息…

供应链 | “利刃出鞘”——顶刊POMS论文解读:制造商借助电子商务部门入侵

论文解读者&#xff1a;肖善&#xff0c;温梓曦&#xff0c;张怡雯&#xff0c;杨子豪 编者按&#xff1a; 解密品牌商在线电商平台&#xff1a;组织结构、策略选择、三方共赢 Manufacturer encroachment with an e‐commerce division 原文作者信息 Shi, S., Wang, C., Ch…

微信小程序上传报错TypeError: Failed to fetch

上传之后报message&#xff1a;TypeError: Failed to fetch这个错误。 关掉项目 > 选择项目的ide界面右上有个齿轮设置 > 代理

嵌入式设备与PC上位机通信协议设计的几点原则

嵌入式设备在运行中需要设置参数&#xff0c;这个工作经常由PC机来实现&#xff0c;需要为双方通信设计协议&#xff0c;有代表性协议是如下三种&#xff1a; 从上表可以看到&#xff0c;一般嵌入式设备内存和运算性能都有限&#xff0c;因此固定二进制是首选通信协议。 一&am…

关于数据可视化编程一些话

这个专栏&#xff0c;主要是我学习数据可视化编程 d3 的一些记录&#xff1a; 1.前需知识&#xff1a; &#xff08;1&#xff09;HTML与文档对象模型&#xff08;DOM&#xff09;&#xff1b; &#xff08;2&#xff09;JavaScript&#xff1b; &#xff08;3&#xff09;…

【智能算法】改进粒子群优化算法及对比分析

程序名称&#xff1a;改进粒子群优化算法及对比分析 实现平台&#xff1a;matlab 代码简介&#xff1a;基本粒子群算法(BPSO)中&#xff0c;每个优化问题的解都可以看作粒子在搜索空间中的位置&#xff0c;粒子通过飞行速度决定它们的搜索方向和搜索范围&#xff0c;粒子群通…