Sass入门使用指南

简介: Sass入门使用指南

3.jpg

快速使用



  1. 在VSCode中安装Live Sass Compiler插件
  2. Watch Sass从状态栏单击以打开实时编译,然后Stop Watching Sass从状态栏单击以打开实时编译。
  3. 在html页面引入动态生成的.css文件


Sass使用指南


内容摘录自: www.sass.hk/


1. 使用变量

声明/引用/命名, 重复定义的变量按最后一次定义为准


  1. 声明规则: $key:value
$highlight-color: #F90;


  1. 引用规则: $key:value
.box { 
  color: $highlight-color;
}


  1. 命名规则: kebab-case(建议)


2. 嵌套规则

  1. &标识符:  在需要避免sass默认解套后空格连接父子选择器导致样式不生效的的情况下使用&处理,如遇到伪类选择器:hover等。
article a {
  color: blue;
  &:hover { color: red }
}


  1. 群组选择器的嵌套: 多个子选择器拥有公共父选择器,并且需要给子选择器设置通用属性的情况。
.container {
  h1, h2, h3 {margin-bottom: .8em}
}


  1. 子组合选择器和同层选择器: > 、+ 和 ~


  1. 子组合选择器>,选择一个元素的直接子元素
  2. 同层相邻组合选择器+,选择header元素后紧跟的p元素
  3. 同层全体组合选择器~,选择所有跟在article后的同层article元素,不管它们之间隔了多少其他元素
// 子组合选择器
article section { margin: 5px }
article > section { border: 1px solid #ccc }
// 同层相邻组合选择器
header + p { font-size: 1.1em }
// 同层全体组合选择器
article ~ article { border-top: 1px dashed #ccc }


  1. 嵌套属性
// css语法
nav {
  border-style: solid;
  border-width: 1px;
  border-color: #ccc;
}
// sass语法
nav {
  border: {
  style: solid;
  width: 1px;
  color: #ccc;
  }
}
// css语法
nav {
  border: 1px solid #ccc;
  border-left: 0px;
  border-right: 0px;
}
// sass语法
nav {
  border: 1px solid #ccc {
  left: 0px;
  right: 0px;
  }
}


3. 导入SASS文件

  1. css中的@import执行到后下载css文件,导致页面加载慢
  2. sass中的@import在生成css的时候导入,无法额外下载
  3. sass导入可以省略后缀

4.jpg

  1. 导入sass部分文件
  1. 通常在编写的base-style的文件是无需主动编译为css文件的,在其他sass文件中使用@import导入后生效即可。
  2. 通过将文件命名为'_'开头即不会在编译时生成单独文件
  3. 如需导入的文件为: themes/_night-sky.scss,那么导入的时候可以写@import "themes/night-sky";


  1. 默认变量值
  1. 多次定义相同变量会造成值的覆盖
  2. 可以通过使用!default进行标记
$fancybox-width: 400px !default;
.fancybox {
  width: $fancybox-width;
  /* 无效声明 */
  $fancybox-width: 500px;
}


  1. 嵌套导入
  1. 直接导入到需要使用的样式选择器中
文件: _blue-theme.scss
内容:
aside {
  background: blue;
  color: white;
}
// 嵌套导入
.blue-theme {
  @import "blue-theme"
}


  1. 原生css导入
  1. 勿用sass的@import导入原始css文件
  2. 可将css文件后缀修改为scss后缀


5. 混合@mixin

何时使用: 用于展示性样式的重用


  1. 定义:
@mixin rounded-corners {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}


  1. 使用:
notice {
  background-color: green;
  border: 2px solid #00aa00;
  @include rounded-corners;
}


  1. 混合器中css规则

内部除了包含属性也可包含css规则

@mixin no-bullets {
  list-style: none;
  li {
    list-style-image: none;
    list-style-type: none;
    margin-left: 0px;
  }
}


  1. 给混合器传参
@mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}
// 使用时动态赋值
a {
  @include link-colors(blue, red, green);
}


  1. 默认参数值
@mixin link-colors(
    $normal,
    $hover: $normal,
    $visited: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}
// 使用时动态赋值 $hover和$visited也会被自动赋值为red
@include link-colors(red)


6. 继承@extend

何时使用: 类名用于语义化样式的重用


  1. 定义
//通过选择器继承继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}


  1. 使用
//.seriousError从.error继承样式
.error a{  //应用到.seriousError a
  color: red;
  font-weight: 100;
}
h1.error { //应用到hl.seriousError
  font-size: 1.2rem;
}


Sass补充


数据类型:


  1. 数字: 1, 2, 13, 10px
  2. 字符串: "foo", 'bar', baz
  3. 颜色: blue, #04a3f9, rgba(255,0,0,0.5)
  4. 布尔型: true, false
  5. 空值: null
  6. 数组,用空格或逗号作分隔符: 1.5em 1em 0 2em, Helvetica, Arial, sans-serif
  7. maps: (key1: value1, key2: value2)


运算:

所有数据类型均支持相等运算 ==!=,此外,每种数据类型也有其各自支持的运算方式。


  1. 数字类型运算: +, -, *, /(除后取整), %(除后取余)数值运算, <, >, <=, >=关系运算
  2. 颜色值运算: 叠加符 '+'
  3. 字符串运算: 连接符 '+'
  4. 布尔运算: and, or, not


使用函数

SassScript 定义的函数

p {
  color: hsl(0, 100%, 50%);
}
// 编译为:
p {
  color: #ff0000; 
}


关键词参数

p {
  color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
}


插值语句 #{}


$name: foo;
$attr: border;
p.#{$name} {
  #{$attr}-color: blue;
}
复制代码


控制语句

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


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


  1. @each: 格式是 $var in <list>
@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'); 
}


  1. @while
$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; 
}


输出格式


  1. nested

Nested (嵌套)样式是 Sass 默认的输出格式,能够清晰反映 CSS 与 HTML 的结构关系。选择器与属性等单独占用一行,缩进量与 Sass 文件中一致,每行的缩进量反映了其在嵌套规则内的层数。当阅读大型 CSS 文件时,这种样式可以很容易地分析文件的主要结构。


  1. expand/体积较大

Expanded 输出更像是手写的样式,选择器、属性等各占用一行,属性根据选择器缩进,而选择器不做任何缩进。


  1. compact/体积较小

Compact 输出方式比起上面两种占用的空间更少,每条 CSS 规则只占一行,包含其下的所有属性。嵌套过的选择器在输出时没有空行,不嵌套的选择器会输出空白行作为分隔符。


  1. compressor/压缩的

Compressed 输出方式删除所有无意义的空格、空白行、以及注释,力求将文件体积压缩到最小,同时也会做出其他调整,比如会自动替换占用空间最小的颜色表达方式。



相关文章
|
流计算 SQL API
一文读懂Apache Flink发展史
本文整理自开源大数据专场中阿里巴巴高级技术专家杨克特(鲁尼)先生的精彩演讲,主要讲解了Apache Flink过去和现在的发展情况,同时分享了对Apache Flink未来发展方向的理解。
7169 0
|
7月前
|
机器学习/深度学习 人工智能 算法
算法备案全流程实操
随着《生成式人工智能服务管理暂行办法》在2024年实施,算法备案成为强制性要求。未合规将导致APP下架或高额罚款。本文详解算法备案的核心逻辑与流程,涵盖必备案算法类型、三大监管红线、六大阶段的关键节点,并提供阿里云工具支持,如合规预评估平台和备案助手插件。内容包括金融风控算法的可解释性要求、生成式AI的内容安全措施及个人开发者的技术能力证明方法,助力开发者实现持续合规。
970 4
|
9月前
|
缓存 安全 网络安全
解锁网站速度与安全:CDN 使用指南及免费平台推荐
在互联网时代,网站的速度和安全性至关重要。CDN(内容分发网络)通过全球缓存节点提升访问速度、降低延迟,并提供安全防护。本文详解CDN的作用与适用场景,推荐几款免费CDN平台,如阿里云、鸟盾安全CDN等,助您选择合适的CDN服务,保障网站性能与安全。
1014 94
|
10月前
|
人工智能 运维 监控
阿里云Milvus产品发布:AI时代云原生专业向量检索引擎
随着大模型和生成式AI的兴起,非结构化数据市场迅速增长,预计2027年占比将达到86.8%。Milvus作为开源向量检索引擎,具备极速检索、云原生弹性及社区支持等优势,成为全球最受欢迎的向量数据库之一。阿里云推出的全托管Milvus产品,优化性能3-10倍,提供企业级功能如Serverless服务、分钟级开通、高可用性和成本降低30%,助力企业在电商、广告推荐、自动驾驶等场景下加速AI应用构建,显著提升业务价值和稳定性。
|
监控 Linux Shell
Linux命令setsid深度解析
`setsid`是Linux命令,用于创建新会话并运行命令,使其独立于终端,不受用户注销影响。它创建新会话和进程组,进程成为领头进程。常用在后台任务,如数据处理和守护进程。示例:`setsid ping baidu.com`。注意需手动重定向I/O,结合`nohup`使用更佳。适用于长时间运行的服务和脚本管理。
|
人工智能 自然语言处理 机器人
掌握未来沟通的艺术:运用TensorFlow与自然语言处理(NLP)技术,从零开始构建你的专属智能对话机器人,让机器理解你的一言一行
【8月更文挑战第31天】本文详细介绍如何利用TensorFlow与自然语言处理技术开发对话机器人。从准备问答数据集开始,通过预处理、构建Seq2Seq模型、训练及预测等步骤,最终实现了一个简易的聊天机器人。示例代码涵盖数据加载、模型搭建及对话功能,适合希望在实际项目中应用AI技术的开发者参考。
326 0
|
安全 物联网 网络安全
智能家居安全:从风险分析到防护措施的全面指南
随着物联网技术的飞速发展,智能家居系统已逐渐走入千家万户。然而,智能化带来的便捷背后隐藏着不容忽视的安全风险。本文深入探讨了智能家居系统中存在的各类安全威胁,并提出了一套综合性的安全防护措施。文章不仅涵盖了技术层面的解决方案,还强调了用户在提升家居安全中的关键作用。通过案例分析,本文旨在为读者提供一份实用的智能家居安全指南,确保技术便利与个人隐私的双重保障。
|
传感器 存储 供应链
plant simulation物流系统仿真案例
plant simulation物流系统仿真案例
647 0
|
安全 数据处理 Android开发
安卓隐私权政策和Google Play规范更新
【4月更文挑战第14天】谷歌针对安卓平台的隐私权政策和Google Play规范进行重要更新,强化用户隐私保护和安全标准。新政策强调最小化数据收集,要求开发者明确告知用户敏感数据用途,并限制不必要的后台数据处理。Google Play规范更新要求应用详述数据收集方式,增加安全审查机制,确保无恶意代码。开发者面临调整,但有机会提升应用安全标准,赢得用户信任。用户数据安全得到提升,移动生态系统将更健康、可持续。
388 1