【面试】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总结笔记 基础入门(超级直观细节) - 掘金

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

函数保留凸性的一些运算,限制为一条线

凸优化在学术研究中非常重要&#xff0c;经常遇到的问题是证明凸性。常规证明凸性的方式是二阶导数的黑塞矩阵为半正定&#xff0c;或者在一维函数时二阶导数大于等于零。但很多时候的数学模型并不那么常规、容易求导的&#xff0c;若能够知道一些保留凸性的运算&#xff0c;将…

Zemax光学设计——单透镜设计

单透镜系统参数&#xff1a; 入瞳直径&#xff1a;20mm F/#&#xff08;F数&#xff09;&#xff1a;10 全视场&#xff1a;10 波长&#xff1a;587nm 材料&#xff1a;BK7 优化方向&#xff1a;最佳均方根光斑直径 设计步骤 一、单透镜系统参数 步骤一&#xff1a;入…

红黑树的插入

一.红黑树的特征 红黑树是二叉搜索树红黑树分为内部结点和外部结点,将空指针视为外部结点,其它结点视为内部结点根结点和外部结点都是黑色从根结点到外部结点的路径上不能有连续的红结点从根结点到外部结点的路径上黑结点的数目相同从根结点到外部结点的最长路径的长度不超过最…

Spring Framework远程代码执行漏洞 CVE-2022-22965 漏洞复现

Spring Framework远程代码执行漏洞 CVE-2022-22965 漏洞复现和相关利用工具 名称: Spring Framework 远程命令执行漏洞 描述: Spring core是Spring系列产品中用来负责发现、创建并处理bean之间的关系的一个工具包&#xff0c;是一个包含Spring框架基本的核心工具包&#xff0…

爬虫代理技术与构建本地代理池的实践

爬虫中代理的使用&#xff1a; 什么是代理 代理服务器 代理服务器的作用 就是用来转发请求和响应 在爬虫中为何需要使用代理&#xff1f; 隐藏真实IP地址&#xff1a;当进行爬取时&#xff0c;爬虫程序会发送大量的请求到目标网站。如果每个请求都使用相同的IP地址&#xff…

深入Python元编程:了解声明与初始化定制元类

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 简介 在Python中&#xff0c;元编程是指在运行时创建或定制类的编程。元类是Python中最强大的元编程工具之一&#xff0c;允许您控制类的创建过程。元类是类的类&#xff0c;它控制类的实例化&#xff0c;允许您…

【软件测试学习】—软件测试模型(二)

【软件测试学习】—软件测试模型&#xff08;二&#xff09; 我 | 在这里 &#x1f469;‍&#x1f9b0;&#x1f469;‍&#x1f9b0; 读书 | 长沙 ⭐计算机科学与技术 ⭐ 本科 【2024届】 &#x1f383;&#x1f383; 爱好 | 旅游、跑步、网易云、美食、摄影 &#x1f396;️…

修复 MyBatis 中空值引起的 SQL 语法错误

修复 MyBatis 中空值引起的 SQL 语法错误 背景 最近在查看别人的项目代码时&#xff0c;遇到了一个问题&#xff1a;数据库中的数据为空。在调试过程中&#xff0c;发现问题出现在调用 MyBatis 中的方法&#xff1a;listByIds(Collection<? extends Serializable> idL…

QML Column Row 属性 pyside6

在 QML 中&#xff0c;Column 和 Row 是常用的布局元素&#xff0c;用于水平&#xff08;Row&#xff09;和垂直&#xff08;Column&#xff09;排列它们的子元素。以下是这两个元素的主要属性列表&#xff1a; Column 属性 spacing: 子元素之间的垂直间隔。width 和 height:…

F22服装管理软件系统 前台任意文件上传漏洞复现

0x01 产品简介 F22服装管理软件系统是广州锦铭泰软件科技有限公司一款专为服装行业开发的综合性管理软件。该产品旨在帮助服装企业实现全面、高效的管理&#xff0c;提升生产效率和经营效益。 0x02 漏洞概述 F22服装管理软件系统UploadHandler.ashx接口处存在任意文件上传漏洞…

Web实现悬浮球-可点击拖拽禁止区域

这次要实现的是这种效果&#xff0c;能够在页面上推拽和点击的&#xff0c;拖拽的话&#xff0c;就跟随鼠标移动&#xff0c;点击的话&#xff0c;就触发新的行为&#xff0c;当然也有指定某些区域不能拖拽&#xff0c;接下来就一起来看看有什么难点吧~ 需要监听的鼠标事件 既…

Android进阶之路 - TextView文本渐变

那天做需求的时候&#xff0c;遇到一个小功能&#xff0c;建立在前人栽树&#xff0c;后人乘凉的情况下&#xff0c;仅用片刻就写完了&#xff1b;说来惭愧&#xff0c;我以前并未写过文本渐变的需求&#xff0c;脑中也仅有一个shape渐变带来的大概思路&#xff0c;回头来看想着…

用代码评论代替代码注释

在一个软件项目中&#xff0c;某些逻辑部分可能非常复杂&#xff0c;容易让人困惑。为了确保其他开发人员能够理解这些代码&#xff0c;同时也为了自己回顾时能够快速上手&#xff0c;我们通常会编写相关文档或添加大量注释来对这些复杂的逻辑进行解释。这样做的好处是能够提高…

Go语言基础:包、函数、语句和注释解析

一个 Go 文件包含以下几个部分&#xff1a; 包声明导入包函数语句和表达式 看下面的代码&#xff0c;更好地理解它&#xff1a; 例子 package mainimport "fmt"func main() { fmt.Println("Hello World!") }例子解释 第 1 行&#xff1a; 在 Go 中&am…

go学习之文件操作与命令行参数

文章目录 一、文件操作1.基本介绍2.常用文件操作函数和方法3.关于文件操作应用实例4.写文件操作应用实例&#xff08;创建文件并写入文件&#xff09;1&#xff09;基本介绍2&#xff09;基本应用实例-方式一 5.判断文件是否存在6.统计英文、数字、空格和其他字符数量 二、命令…

Kubernetes

Kubernetes Docker的安装Docker安装&#xff1a;安装docker依赖环境配置国内docker-ce的yum源&#xff08;这里采用的是阿里云&#xff09;安装docker。插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自…

Sui主网升级至V1.14.2版本

Sui主网现已升级至V1.14.2版本&#xff0c;同时Sui协议升级至31版本。其他升级要点如下所示&#xff1a; #14875: [修复] 为所有权限设置共识度量值。 #14811: [Narwhal] 改进每个权限的共识信息度量的可用性。 完整变更日志&#xff1a;Release mainnet-v1.14.2 MystenL…

考虑极端天气线路脆弱性的配电网分布式电源配置优化模型_IEEE33节点(附带Matlab代码)

随着新能源技术及智能电网的发展&#xff0c;越来越多的分布式电源加入配电网中&#xff0c;不仅改变了配电网结构及供电方式&#xff0c;而且提升了配电网的供电质量。但是在全球气候变暖的背景下&#xff0c;极端天气发生的频率也越来越高&#xff0c;一旦发生必将对配电网系…

HashMap的死循环及数据覆盖问题

目录 一&#xff0c;HashMap 线程不安全的原因 二&#xff0c;HashMap 死循环问题 死循环发生的条件 死循环的具体过程 死循环执行步骤1 死循环执行步骤2 死循环执行步骤3 三&#xff0c;HashMap 数据覆盖问题 数据覆盖执行流程1 数据覆盖执行流程2 数据覆盖执行流…

8、CobaltStrike使用

文章目录 一、实验拓扑图二、实验步骤 一、实验拓扑图 二、实验步骤 1、登录"Kali"操作机&#xff0c;在终端中进入CS文件夹&#xff0c;然后使用命令chmod x teamserver给teamserver文件赋予执行权限&#xff0c;然后查看当前主机的本地IP地址。 2、启动服务端服务…