当前位置: 首页 > news >正文

Sass开发【三】

目录

​编辑

Sass选择器

选择器列表

选择器组合器

父选择器 &

占位符选择器

自定义属性

Sass里的值

数字

字符串

映射

查找值

添加到映射

合并映射

true和false

其它


Sass选择器

Sass选择器CSS选择器更加灵活,可以用非常少的代码替代CSS冗余的代码

选择器列表

选择器列表即“逗号分隔的选择器”,Sass将它们分别嵌套然后将它们组合回CSS选择器中:

.div,.template {.p,.span {font-size: large;}
}

这个CSS选择器的意思是:

  • div下的p:font-size:large;
  • div下的span:font-size:large;
  • template下的p:font-size:large;
  • template下的span:font-size:large;

编译后的CSS:

.div .p, .div .span, .template .p, .template .span {font-size: large;
}

选择器组合器

Sass甚至允许您嵌套组合器,并且可以将组合器放在“外部选择器”的末尾内部选择器的开头,甚至可以在两者之间单独放置

.div > {p {font-size: large;}
}.div {+ span {font-size: large;}
}.div {~ {span {font-size: large;}p {font-size: large;}}
}

编译后的CSS如下:

.div > p {font-size: large;
}.div + span {font-size: large;
}.div ~ span {font-size: large;
}
.div ~ p {font-size: large;
}

父选择器 &

父选择器Sass发送的一种特殊选择器,它嵌套在子选择器中引用外部选择器

使用父选择器可以很轻松的为父选择器添加伪类选择器

.div {background-color: green;&:hover {background-color: red;}&:active {background-color: black;}
}

父选择器也可以在SassScript中使用,它是一个特殊表达式,以选择器函数使用的相同格式放回当前父选择器:(一个逗号分隔的选择器列表)

.main aside:hover,
.sidebar p {parent-selector: &;
}

编译后的CSS

.main aside:hover,
.sidebar p {parent-selector: .main aside:hover, .sidebar p;
}

占位符选择器

Sass添加了一种特殊的选择器:“占位符选择器”,它以%开头,不会被Sass编译,不会生成对应的CSS语句

占位符选择器常与“类继承”配合使用,通过类继承我们可以很方便的复写CSS语句

%toolbelt {box-sizing: border-box;border-top: 1px rgba(#000, .12) solid;padding: 16px 0;width: 100%;&:hover { border: 2px rgba(#000, .5) solid; }
}.action-buttons {@extend %toolbelt;color: #4285f4;
}.reset-buttons {@extend %toolbelt;color: #cddc39;
}

编译后的CSS文件

.reset-buttons, .action-buttons {box-sizing: border-box;border-top: 1px rgba(0, 0, 0, 0.12) solid;padding: 16px 0;width: 100%;
}
.reset-buttons:hover, .action-buttons:hover {border: 2px rgba(0, 0, 0, 0.5) solid;
}.action-buttons {color: #4285f4;
}.reset-buttons {color: #cddc39;
}

自定义属性

CSS自定义属性(CSS变量)在Sass中同样得到了支持,声明一个CSS变量时,可以使用插值的方式为变量填充值

$primary: blue;
$warn: orange;
$success: green;:root {--primary:#{$primary};--warn:#{$warn};--success:#{$success};
}

不过插值会删除字符串的引号,这可能导致在某些需要字符串的场景出现错误(如font-family的值是一个字符串)

作为解决方法,可使用meta.inspect()函数保留引号,使用该函数前请务必使用“use sass:meta”来引入meta库

@use "sass:meta";$font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas;:root {--font-family-sans-serif: #{meta.inspect($font-family-sans-serif)};--font-family-monospace: #{meta.inspect($font-family-monospace)};
}

编译后的CSS

:root {--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto;--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas;
}

Sass里的值

Sass支持多种值类型,其中大多数来自CSS,也有Sass特有的值

来自CSS的值

  • 数字:12或12px
  • 字符串:blue、red、green或"Hello World"
  • 颜色:十六进制,RGB、HSL
  • 值列表:“10px 20px 30px 40px”

Sass特有的值

  • 布尔值:true和false
  • null值
  • 映射值:("background":red, "foreground":pink)
  • 由get-function()返回并用call()调用的函数引用

数字

Sass中的数字有两个组成部分:“数字本身”、“单位”,例如16px,16就是数字本身,px就是单位

Sass数字支持科学计数法,它用数字与幂e表示,但Sass始终将其编译为完全展开的数字

// sass:
.main {font-size: 1e-2px;
}// css:
.main {font-size: 0.01px;
}

字符串

Sass字符串支持两种内部结构相同但渲染方式不同的字符串

  • 带引号的字符串:"Hello World"
  • 不带引号的字符串bold、blue、red

所有Sass字符串都支持标准CSS转义代码

  • 除了A到F的字符或0到9的数字之外的任何字符,都可以作为字符串的一部分包含在内,方法是在其前面加上“ /
@debug "\""; // '"'
@debug \.widget; // \.widget
@debug "\a"; // "\a" (a string containing only a newline)
@debug "line1\a line2"; // "line1\a line2"

映射

Sass的映射包含键值对,并且可以通过其对应的键轻松查找值

它们是以(<表达式>:<表达式>, <表达式>:<表达式>)的形式编写

键必须是唯一的

查找值

使用map.get($map, $key)函数,如果该映射没有$map键的值,返回null

@use "sass:map";
$font-weights: ("regular": 400, "medium": 500, "bold": 700);@debug map.get($font-weights, "medium"); // 500
@debug map.get($font-weights, "extra-bold"); // null

添加到映射

使用map.set($map,$key,$value)函数,它返回$map的副本,不在原$map上修改

@use "sass:map";
$font-weights: ("regular": 400, "medium": 500, "bold": 700);@debug $font-weights; // ("regular": 400, "medium": 500, "bold": 700)
@debug map.set($font-weights, "light", 300); // ("regular": 400, "medium": 500, "bold": 700, "light": 300)
@debug $font-weights; // ("regular": 400, "medium": 500, "bold": 700)

合并映射

使用map.merge($map1,$map2)函数,它返回$map1$map2合并后的新映射

如果两个映射中有相同的键,那么会用第二个位置$map2映射的值来填充

@use "sass:map";$light-weights: ("lightest": 100, "light": 300);
$heavy-weights: ("medium": 500, "bold": 700);@debug map.merge($light-weights, $heavy-weights);
// ("lightest": 100, "light": 300, "medium": 500, "bold": 700)

Sass中的映射是不可变的,这意味着映射值的内容永远不会改变

map映射函数都会返回新的映射,而不是修改原映射

true和false

在Sass中可以使用关系运算符:

@debug 1px == 2px; // false
@debug 1px == 1px; // true
@debug 10px < 3px; // false

还可以使用逻辑运算符:

@debug true and true; // true
@debug true and false; // false@debug true or false; // true
@debug false or false; // false@debug not true; // false
@debug not false; // true

甚至还有if(),相当于JS里的“expression ? value1 : value2

@debug if(true, 10px, 30px); // 10px
@debug if(false, 10px, 30px); // 30px

注意

  • 在Sass中,空字符串、空映射、数字0都是真值
  • Sass假值只有:“false”和“null

其它

更多CSS学习可以参考我的专栏:

CSS_是洋洋a的博客-CSDN博客

http://www.dtcms.com/a/389998.html

相关文章:

  • 百度之星2025(第二场)
  • Ovis-U1:阿里巴巴推出的统一的多模态理解与生成模型
  • 深入剖析C++智能指针:unique_ptr与shared_ptr的资源管理哲学
  • 创建索引失败,表一直查询不了
  • 知识分享:网线和DB9正确接线方法
  • 【算法笔记】前缀树
  • 让ai完成原神调酒 试做
  • 第十四届蓝桥杯青少组C++选拔赛[2022.11.27]第二部分编程题(2、拼写单词)
  • 私有化部署UE像素流后,通过实时云渲染平台配置网络端口,实现云推流内网及公网访问
  • Day 05 Geant4多线程 Multithreading --------以B1为例
  • 【word解析】从 Word 提取数学公式并渲染到 Web 页面的完整指南
  • FreeRTOS 队列机制详解:阻塞、唤醒与任务同步
  • Unity学习之UI优化总结
  • 基于微信小程序蓝牙信标 (Beacon)的室内导航实例
  • 用Comate Zulu开发一款微信小程序
  • 触觉智能Purple Pi OH2开发板配置参数
  • 鸿蒙Next应用文件管理全攻略:从基础操作到高级实践
  • 云手机对《黑神话:悟空》的作用都有哪些?
  • Leetcode 994. 腐烂的橘子 多源 BFS
  • 微硕WSP4982双N沟MOSFET,赋能汽车智能座椅通风系统
  • BMP280 气压计驱动
  • 速通ACM省铜第八天 赋源码(1709)
  • InnoDB索引结构与排序构建机制详解
  • mmpose可视化出错,图像与关键点对不上
  • Flutter 基本开发环境配置环境搭建
  • 【数控系统】第七章 NURBS插补
  • 某养老数字化协同办公平台网络方案解析
  • docker 容器终止时都做了什么?怎么优雅退出?
  • 苹果10月还有发布会?多款新品预曝光
  • wincc