SASS 官方文档速通

前言:参考 Sass 中文网。

一. 特色功能

Sass 是一款强化 CSS 的辅助工具,在 CSS 语法的基础上增加了变量、嵌套、混合、导入等高级功能。有助于组织管理样式文件,更高效地开发项目。

 二. 语法格式

.scss 拓展名:在 CSS3 语法的基础上进行拓展。

.sass 拓展名:用 “缩进” 代替 “花括号” ,用 “换行” 代替 “分号” 。

 三. 用法

1. 注释 /* */ 与 //

多行注释 /* */,单行注释 //,前者会被输出到编译后的 CSS 文件中,而后者则不会,例如:

/* This comment is* several lines long.* since it uses the CSS comment syntax,* it will appear in the CSS output. */
body {color: black;
}
// These comments are only one line long each.
// They won't appear in the CSS output,
// since they use the single-line comment syntax.
a {color: green;
}// 编译后
/* This comment is* several lines long.* since it uses the CSS comment syntax,* it will appear in the CSS output. */
body {color: black;
}
a {color: green;
}

2. 嵌套

2.1 嵌套规则

避免重复输入父选择器,令复杂的 CSS 结构易于管理。

#main p {color: #00ff00;width: 97%;.redbox {background-color: #ff0000;color: #000000;}
}// 编译后
#main p {color: #00ff00;width: 97%;
}
#main p .redbox {background-color: #ff0000;color: #000000;
}

2.2 父选择器 &

在嵌套 CSS 中,访问外层的父选择器,使用 & 代表外层的父选择器。

a {font-weight: bold;text-decoration: none;&:hover {text-decoration: underline;}body.firefox & {font-weight: normal;}
}// 编译后
a {font-weight: bold;text-decoration: none;
}
a:hover {text-decoration: underline;
}
body.firefox a {font-weight: normal;
}

2.3 属性嵌套

如 font-family, font-size, font-weight 。为了便于管理,避免重复输入。可以这样写:

.funky {font: {family: fantasy;size: 30em;weight: bold;}
}// 编译后
.funky {font-family: fantasy;font-size: 30em;font-weight: bold;
}

3 变量 $

以 $ 开头定义变量:

// 定义
$width: 5em;// 使用
#main {width: $width;
}

块级变量可以通过 !global 升级为全局变量:

#main {$width: 5em !global;width: $width;
}
#sidebar {width: $width;
}// 编译后
#main {width: 5em;
}
#sidebar {width: 5em;
}

4. 插值语句 #{}

通过 #{} 可以在选择器或属性名中使用变量:

$name: foo;
$attr: border;
p.#{$name} {#{$attr}-color: blue;
}// 编译后
p.foo {border-color: blue;
}

5. @import 导入

Sass 拓展了 @import 的功能,允许其导入 SCSS 或 Sass 文件。可以使用导入文件的变量和混合指令(mixin)。

@import "foo.scss";

嵌套 @import

.example {color: red;
}
#main {@import "example";
}// 编译后
#main .example {color: red;
}

6. @extend 继承

一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式。提取出公用样式,然后使用 @extend 继承。

.error {border: 1px #f00;background-color: #fdd;
}
.error.intrusion {background-image: url("/image/hacked.png");
}
.seriousError {@extend .error;border-width: 3px;
}// 编译后
.error,
.seriousError {border: 1px #f00;background-color: #fdd;
}
.error.intrusion,
.seriousError.intrusion {background-image: url("/image/hacked.png");
}
.seriousError {border-width: 3px;
}

7. @if 条件

当 @if 的表达式返回值不是 false 或者 null 时,条件成立,输出 {} 内的代码:

p {@if 1 + 1 == 2 {border: 1px solid;}@if 5 < 3 {border: 2px dotted;}@if null {border: 3px double;}
}// 编译后
p {border: 1px solid;
}

@if 后可以跟多个 @else if ,或 @else 。如果 @if 失败,Sass 将逐条执行 @else if ,如果全失败,则执行 @else 声明,例如:

$type: monster;
p {@if $type == ocean {color: blue;} @else if $type == matador {color: red;} @else if $type == monster {color: green;} @else {color: black;}
}// 编译后
p {color: green;
}

8. @for 循环

@for 指令可以在限制的范围内重复输出格式。

@for $i from 1 through 3 {.item-#{$i} {width: 2em * $i;}
}// 编译后
.item-1 {width: 2em;
}
.item-2 {width: 4em;
}
.item-3 {width: 6em;
}

9. @each 循环

@each 遍历的是一连串的值,也就是值列表。

@each $animal in puma, sea-slug, egret, salamander {.#{$animal}-icon {background-image: url("/images/#{$animal}.png");}
}// 编译后
.puma-icon {background-image: url("/images/puma.png");
}
.sea-slug-icon {background-image: url("/images/sea-slug.png");
}
.egret-icon {background-image: url("/images/egret.png");
}
.salamander-icon {background-image: url("/images/salamander.png");
}

10. @while 循环

@while 指令重复输出直到返回结果为 false。这样可以实现比 @for 更复杂的循环,只是很少会用到。例如:

$i: 6;
@while $i > 0 {.item-#{$i} {width: 2em * $i;}$i: $i - 2;
}// 编译后
.item-6 {width: 12em;
}
.item-4 {width: 8em;
}
.item-2 {width: 4em;
}

11. @mixin 混合指令

混合指令(Mixin)用于定义可重复使用的样式。

11.1 @mixin 定义、@include 引入

@mixin large-text {font: {family: Arial;size: 20px;weight: bold;}color: #ff0000;
}
.page-title {@include large-text;padding: 4px;margin-top: 10px;
}// 编译后
.page-title {font-family: Arial;font-size: 20px;font-weight: bold;color: #ff0000;padding: 4px;margin-top: 10px;
}

11.2 参数

参数用于给混合指令中的样式设定变量。

@mixin sexy-border($color, $width) {border: {color: $color;width: $width;style: dashed;}
}
p {@include sexy-border(blue, 1in);
}// 编译后
p {border-color: blue;border-width: 1in;border-style: dashed;
}

11.3 参数变量

不确定混合指令需要多少参数,可以使用参数变量 … 声明

```scss
@mixin box-shadow($shadows...) {-moz-box-shadow: $shadows;-webkit-box-shadow: $shadows;box-shadow: $shadows;
}
.shadows {@include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}// 编译后
.shadowed {-moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;-webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}

12. @function 函数

$grid-width: 40px;
$gutter-width: 10px;
@function grid-width($n) {@return $n * $grid-width + ($n - 1) * $gutter-width;
}
#sidebar {width: grid-width(5);
}// 编译后
#sidebar {width: 240px;
}

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

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

相关文章

二分图板子

原理&#xff1a; 匈牙利算法&#xff1a;二分图最大权匹配 - OI Wiki 简单说就是挨个找&#xff0c;找到就退出。后面的来了就让前面的挪位置。 板子&#xff1a; book指给u找位置时&#xff0c;有人考虑过的位置就不考虑了。 match[ i ]就是i位置对应的人。 e是关系 …

k8s helm安装Tiller出错解决

安装Helm 安装Helm通常使用一下命令&#xff1a; [rootk8s-master ~]# curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent …

Kotlin快速入门系列10

Kotlin的委托 委托模式是常见的设计模式之一。在委托模式中&#xff0c;有两个对象参与处理同一个请求&#xff0c;接受请求的对象将请求委托给另一个对象来处理。与Java一样&#xff0c;Kotlin也支持委托模式&#xff0c;通过关键字by。 类委托 类的委托即一个类中定义的方…

Mysql-ReadView + MVCC-RR 与 RC

实验准备 创建脚本 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,age int(11) NULL DEFAULT NULL,addr varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,PRIMARY …

1967 - 输出字符的ascii码

题目 从键盘读入一个字符&#xff0c;请计算并输出该字符的 ascii 码。 比如&#xff1a;字符 A 的 ascii 码输出是 65 &#xff0c;a 的 ascii 码输出是 97 &#xff0c;0 的ascii码输出是 48 。 输入 一个字符。 输出 一个整数&#xff0c;代表字符对应的 ascii 码。 …

Red Panda Dev C++项目的基本操作

最近在Red Panda Dev C上面编写程序时发现&#xff0c;很多小伙伴都会创建项目。今天我带大家看看如何使用一个项目。 一、项目的创建 创建项目 首先&#xff0c;我们需要创建一个项目。 1、打开Red Panda Dev C。 2、点击 “文件[F]” → “新建[N]” → “项目[P]...”&…

精选70套前端数据可视化大屏

分享70款还不错的前端数据可视化大屏源码 其中包含行业&#xff1a;智慧社区、智慧物业、政务系统、智慧交通、智慧工程、智慧医疗、智慧金融银行等&#xff0c;全网最新、最多&#xff0c;最全、最酷、最炫大数据可视化模板。 你可以点击在线预览查看该源码资源的最终展示效果…

新概念英语第二册(50)上

【New words and expressions】生词和短语&#xff08;4&#xff09; ride n. 旅行 excursion n. 远足 conductor n. 售票员 view n. 景色 ★ride n. 旅行&am…

从零搭建Vue3 + Typescript + Pinia + Vite + Tailwind CSS + Element Plus开发脚手架

项目代码以上传至码云&#xff0c;项目地址&#xff1a;https://gitee.com/breezefaith/vue-ts-scaffold 文章目录 前言脚手架技术栈简介vue3TypeScriptPiniaTailwind CSSElement Plusvite 详细步骤Node.js安装创建以 typescript 开发的vue3工程集成Pinia安装pinia修改main.ts创…

正点原子--STM32定时器学习笔记(1)(更新中....)

F1系列基本定时器&#xff08;TIM6 / TIM7&#xff09; 我们的目标是通过TIM6基本定时器定时500ms&#xff0c;让LED0每隔500ms闪一下&#xff01; 思路&#xff1a;使用定时器6&#xff0c;实现500ms产生一次定时器更新中断&#xff0c;在中断里执行“翻转LED0”。 定时器什…

react useCallback(记忆函数)用法

//定义&#xff1a;防止组件重新渲染&#xff0c;导致方法被重新创建&#xff0c;起到缓存作用&#xff0c;只有第二个参数变化&#xff0c;才重新声明一次。 import React, { useCallback, useState } from react const [text,settext] useState(""); export def…

什么是ISO21434网络安全中的风险评估?-亚远景

在ISO 21434标准中&#xff0c;网络安全风险评估是指对汽车网络和相关电子系统进行系统性分析&#xff0c;以识别和评估潜在的网络安全威胁和风险。该过程旨在帮助汽车制造商和供应商在整个开发和运营生命周期中有效管理和缓解与网络安全相关的风险&#xff0c;确保车辆在数字化…

docker容器之consul

一、consul解决了什么问题&#xff1f; 如果后端应用服务器集群节点数量很多&#xff0c;前端负载均衡器配置和管理会很麻烦的问题 &#xff08;负载均衡器的节点配置条目数量会很多&#xff0c;后端节点的网络位置发生了变化还需要修改所有调用这些后端节点的负载均衡器配置等…

【精华文章】戊子仲秋的算法学习笔记汇总

文章目录 前言通用基础算法集合蓝桥杯备赛算法特训算法学习方法 前言 我的算法学习之旅&#xff0c;持续更新中 通用基础算法集合 二分查找 二分查找模板&#xff1a;二分原来这么简单二分题目合集&#xff1a;LeetCode 上六道经典的二分题目 排序算法 快速排序模板&#xf…

Android 12.0 应用中监听系统收到的通知

Android 12.0 通知简介https://blog.csdn.net/Smile_729day/article/details/135502031?spm1001.2014.3001.5502 1. 需求 在系统内置应用中或者在第三方应用中,获取Android系统收到的通知的内容. 2. NotificationListenerService 接口 Android 系统预留了专门的API, 即 No…

Github 2F2【解决】经验帖-PPHub登入

最近在做项目时,Github总是出问题,这是一经验贴 Github 2F2登入问题【无法登入】PPhub 2F2是为了安全,更好的生态 启用 2FA 二十八 (28) 天后,要在使用 GitHub.com 时 2FA 检查 物理安全密钥、Windows Hello 或面容 ID/触控 ID、SMS、GitHub Mobile 都可以作为 2F2 的工…

jenkins 下载插件sentry-cli失败 证书过期

现状 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli 原因是npm原域名停止解析&#xff0c;在访问上面sentry-cli的cdn资源的时候 证书过期无法下载。 解决&#xff1a; 替换证书过期…

代码随想录-动态规划专题

有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 步骤分为以下五步&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含…

买保险如何填健康告知

在投保健康险时&#xff0c;保险公司都有健康告知这一环&#xff0c;那么健康告知怎么机智的填&#xff1f; 人都吃五谷杂粮&#xff0c;身体免不了有各种小毛病&#xff0c;比如甲状腺结节等&#xff0c;健康告知通过不了怎么办&#xff1f; 健康告知是保险公司设计的健康问…

22.java8新特性

文章目录 Lambda表达式Lambda表达式的基本语法示例函数接口参数与类型推断函数式接口的预定义类型 自定义函数接口例子 分类消费型接口&#xff08;Consumer&#xff09;供给型接口&#xff08;Supplier&#xff09;函数型接口&#xff08;Function&#xff09;断言型接口&…