百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

HTML/CSS 备忘录 - 17. Sass 基本语法

yuyutoo 2024-10-11 23:59 6 浏览 0 评论

一、注释

Sass 支持标准的 CSS 多行注释 /* */,以及单行注释 //,前者会被完整输出到编译后的 CSS 文件中,而后者则不会。

二、CSS 功能拓展

1. 嵌套规则

Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器,例如:

#main {
  width: 97%;
  p, div {
    font-size: 2em;
    a { font-weight: bold; }
  }
  pre { font-size: 3em; }
}

// --- 编译后 ---
#main {
  width: 97%;
}
#main p, #main div {
  font-size: 2em;
}
#main p a, #main div a {
  font-weight: bold;
}
#main pre {
  font-size: 3em;
}

嵌套功能避免了重复输入父选择器,而且令复杂的 CSS 结构更易于管理。

2. 父选择器 &

在嵌套 CSS 规则时,有时也需要直接使用嵌套外层的父选择器,例如,当给某个元素设定 hover 样式时,或者当 body 元素有某个 classname 时,可以用 & 代表嵌套规则外层的父选择器。

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;
}

编译后的 CSS 文件中 & 将被替换成嵌套外层的父选择器,如果含有多层嵌套,最外层的父选择器会一层一层向下传递。

3. 属性嵌套

有些 CSS 属性遵循相同的命名空间,比如 font-family, font-size, font-weight 都以 font 作为属性的命名空间。为了便于管理这样的属性,同时也为了避免了重复输入,Sass 允许将属性嵌套在命名空间中,例如:

.funky {
  font: {
    family: fantasy;
    size: 30em;
    weight: bold;
  }
}

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

4. 占位符选择器

Sass 额外提供了一种特殊类型的选择器:占位符选择器。与常用的 id 与 class 选择器写法相似,只是 # 或 . 替换成了 %。必须通过 @extend 指令调用。

三、变量

1. 变量声明与引用

sass 使用 $ 符号来标识变量:

$highlight-color: #F90;
.selected {
  border: 1px solid $highlight-color;
}

// --- 编译后 ---
.selected {
  border: 1px solid #F90;
}

变量支持块级作用域,嵌套规则内定义的变量只能在嵌套规则内使用(局部变量),不在嵌套规则内定义的变量则可在任何地方使用(全局变量)。将局部变量转换为全局变量可以添加 !global 声明:

#main {
  $width: 5em !global;
  width: $width;
}
#sidebar {
  width: $width;
}

// --- 编译后 ---
#main {
  width: 5em;
}
#sidebar {
  width: 5em;
}

2. 插值语句

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

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

3. 变量默认值

可以在变量的结尾添加 !default 给一个未通过 !default 声明赋值的变量赋值,此时,如果变量已经被赋值,不会再被重新赋值,但是如果变量还没有被赋值,则会被赋予新的值。

$content: "First content";
$content: "Second content?" !default;
$new_content: "First time reference" !default;
#main {
  content: $content;
  new-content: $new_content;
}

// --- 编译后 ---
#main {
  content: "First content";
  new-content: "First time reference";
}

四、变量类型

SassScript 支持 6 种主要的数据类型:

  • 数字:1, 2, 13, 10px
  • 字符串:有引号字符串与无引号字符串,"foo", 'bar', baz
  • 颜色:blue, #04a3f9, rgba(255,0,0,0.5)
  • 布尔型:true, false
  • 空值:null
  • 数组 (list):用空格或逗号作分隔符,如 1.5em 1em 2em 与 Helvetica, Arial
  • maps:相当于 JavaScript 的 object,如 (key1: value1, key2: value2)

1. 算术运算

算术运算,如果必要会在不同单位间转换值:

p {
  width: 1in + 8pt;
}
// --- 编译后 ---
p {
  width: 1.111in; 
}

颜色运算:颜色值的运算是分段计算进行的,也就是分别计算 R、G、B 的值:

p {
  color: #010203 + #040506;
}
// --- 编译后 ---
p {
  color: #050709; 
}

在 CSS 中 “/” 通常起到分隔数字的用途,SassScript 同时也赋予了 “/” 除法运算的功能。以下三种情况 “/” 将被视为除法运算符号:

  • 如果值,或值的一部分,是变量或者函数的返回值
  • 如果值被圆括号包裹
  • 如果值是算数表达式的一部分
p {
  font: 10px/8px;             // 分隔符不做除法运算
  $width: 1000px;
  width: $width/2;            // 使用变量,进行除法运算
  width: round(1.5)/2;        // 使用函数,进行除法运算
  height: (500px/2);          // 使用小括号包裹,进行除法运算
  margin-left: 5px + 8px/2px; // 有其他算数表达式,进行除法运算
}

// --- 编译后 ---
p {
  font: 10px/8px;
  width: 500px;
  width: 1;
  height: 250px;
  margin-left: 9px;
}

如果需要使用变量,同时又要确保 / 不做除法运算而是完整地编译到 CSS 文件中,只需要用 #{} 插值语句将变量包裹。

2. 字符串与字符串运算

SassScript 支持 CSS 的两种字符串类型:有引号字符串与无引号字符串,在编译 CSS 文件时不会改变其类型。只有一种情况例外,使用 #{}时,有引号字符串将被编译为无引号字符串:

$selector: ".header";
#{$selector}:before {
  content: "Hi, Firefox users!";
}

// --- 编译后 ---
.header:before {
  content: "Hi, Firefox users!";
}

字符串运算:

// 字符串连接
p {
  cursor: e + -resize;
}
// --- 编译后 ---
p {
  cursor: e-resize; 
}

// 有引号字符串与无引号字符串链接,
// 以 + 前的字符串确定是否有引号
p:before {
  content: "Foo " + Bar;
  font-family: sans- + "serif";
}
// --- 编译后 ---
p:before {
  content: "Foo Bar";
  font-family: sans-serif; 
}

// 运算表达式与其他值连用时,用空格做连接符:
p {
  margin: 3px + 4px auto;
}
// --- 编译后 ---
p {
  margin: 7px auto; 
}

// 在有引号的文本字符串中使用 #{} 插值语句可以添加动态的值
p:before {
  content: "I ate #{5 + 10} pies!";
}
// --- 编译后 ---
p:before {
  content: "I ate 15 pies!"; 
}

相关推荐

YAML配置文件简介及使用(yaml 配置)

简介YAML是"YAMLAin'taMarkupLanguage"(YAML不是一种标记语言)的缩写。相比JSON格式的方便。...

教你如何解决最常见的58种网络故障排除方法

1.故障现象:网络适配器(网卡)设置与计算机资源有冲突。分析、排除:通过调整网卡资源中的IRQ和I/O值来避开与计算机其它资源的冲突。有些情况还需要通过设置主板的跳线来调整与其它资源的冲突。2.故障现...

一分钟带你了解服务器网卡(服务器网卡怎么用)

今天小编和大家聊一下服务器的网卡。什么是网卡?简单说网卡就是计算机与局域网互连的设备。计算机主要通过网卡接入网络。网卡又称为网络适配器或网络接口卡NIC(NetworkinterfaceCard)...

linux文件之ssh配置文件的含义与作用

ssh远程登录命令是操作系统(包括linux和window系统)下常用的操作命令,可以帮助用户,远程登录服务器系统,查看,操作系统相关信息。linux系统对于ssh命令有专门保存其相关配置的目录和文件...

Cilium 官方文档翻译 - IPAM(二)Kubernetes Host模式

KubernetesHostScopeciliumIPAM的kuberneteshost-scope模式通过选项ipam:kubernetes开启,将集群IP地址分配委托给每个独立的节点,并...

域名劫持跳转,域名劫持跳转的解决办法只需5步

简单来说,域名劫持就是把原本准备访问某网站的用户,在不知不觉中,劫持到仿冒的网站上,例如用户准备访问某家知名品牌的网上商店,黑客就可以通过域名劫持的手段,把其带到假的网上商店,同时收集用户的ID信息和...

Linux基本命令(linux基本命令总结)

...

Linux 磁盘和文件系统管理(linux磁盘管理fdisk)

1检测并确认新硬盘...

windows host文件怎么恢复?局域网访问全靠这些!

windowshost文件怎么恢复?windowshost文件是常用网址域名及其相应IP地址建立一个关联文件,通过这个host文件配置域名和IP的映射关系,以提高域名解析的速度,方便局域网用户使用...

Nginx配置文件详解与优化建议(nginx 配置详解)

1、概述今天来详解一下Nginx的配置文件,以及给出一些配置建议,希望能对大家有所帮助。...

Mac电脑hosts文件锁定,如何修改hosts文件权限

有时候我们需要修改hosts文件,但是网上很多教程都行不通,使用sudo命令也不行。其实有一个很简单的方法。打开终端命令行,使用如下命令即可:sudochflags-hvnoschg/etc/...

windows电脑如何修改hosts文件?(windows 修改hosts文件)

先来简单说下电脑host的作用hosts文件的作用:hosts文件是一个用于储存计算机网络中各节点信息的计算机文件;作用是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中...

Vigilante恶意软件行为怪异:修改Hosts文件以阻止受害者访问盗版网站

Sophos刚刚报道了一款名叫Vigilante的恶意软件,但其行为却让许多受害者感到不解。与其它专注于偷密码、搞破坏、或勒索赎金的恶意软件不同,Vigilante会通过修改Hosts文件...

hosts文件无法修改几种现象和解决方法

第一种、hosts文件修改完不是直接保存而是弹出另存为窗口解决:1、右击hosts文件——属性——把“只读”前面勾去掉。第二种、打开hosts文件时提示“你没有权限打开该文件,请向文件的所有者或管理员...

hosts文件位置在哪里,教你hosts文件位置在哪里

Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的I...

取消回复欢迎 发表评论: