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

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

yuyutoo 2024-10-11 23:59 1 浏览 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!"; 
}

相关推荐

jQuery VS AngularJS 你更钟爱哪个?

在这一次的Web开发教程中,我会尽力解答有关于jQuery和AngularJS的两个非常常见的问题,即jQuery和AngularJS之间的区别是什么?也就是说jQueryVSAngularJS?...

Jquery实时校验,指定长度的「负小数」,小数位未满末尾补0

在可以输入【负小数】的输入框获取到焦点时,移除千位分隔符,在输入数据时,实时校验输入内容是否正确,失去焦点后,添加千位分隔符格式化数字。同时小数位未满时末尾补0。HTML代码...

如何在pbootCMS前台调用自定义表单?pbootCMS自定义调用代码示例

要在pbootCMS前台调用自定义表单,您需要在后台创建表单并为其添加字段,然后在前台模板文件中添加相关代码,如提交按钮和表单验证代码。您还可以自定义表单数据的存储位置、添加文件上传字段、日期选择器、...

编程技巧:Jquery实时验证,指定长度的「负小数」

为了保障【负小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【负小数】的方法。HTML代码<inputtype="text"class="forc...

一篇文章带你用jquery mobile设计颜色拾取器

【一、项目背景】现实生活中,我们经常会遇到配色的问题,这个时候去百度一下RGB表。而RGB表只提供相对于的颜色的RGB值而没有可以验证的模块。我们可以通过jquerymobile去设计颜色的拾取器...

编程技巧:Jquery实时验证,指定长度的「正小数」

为了保障【正小数】的正确性,做成了通过Jquery,在用户端,实时验证指定长度的【正小数】的方法。HTML做成方法<inputtype="text"class="fo...

jquery.validate检查数组全部验证

问题:html中有多个name[],每个参数都要进行验证是否为空,这个时候直接用required:true话,不能全部验证,只要这个数组中有一个有值就可以通过的。解决方法使用addmethod...

Vue进阶(幺叁肆):npm查看包版本信息

第一种方式npmviewjqueryversions这种方式可以查看npm服务器上所有的...

layui中使用lay-verify进行条件校验

一、layui的校验很简单,主要有以下步骤:1.在form表单内加上class="layui-form"2.在提交按钮上加上lay-submit3.在想要校验的标签,加上lay-...

jQuery是什么?如何使用? jquery是什么功能组件

jQuery于2006年1月由JohnResig在BarCampNYC首次发布。它目前由TimmyWilson领导,并由一组开发人员维护。jQuery是一个JavaScript库,它简化了客户...

django框架的表单form的理解和用法-9

表单呈现...

jquery对上传文件的检测判断 jquery实现文件上传

总体思路:在前端使用jquery对上传文件做部分初步的判断,验证通过的文件利用ajaxFileUpload上传到服务器端,并将文件的存储路径保存到数据库。<asp:FileUploadI...

Nodejs之MEAN栈开发(四)-- form验证及图片上传

这一节增加推荐图书的提交和删除功能,来学习node的form提交以及node的图片上传功能。开始之前需要源码同学可以先在git上fork:https://github.com/stoneniqiu/R...

大数据开发基础之JAVA jquery 大数据java实战

上一篇我们讲解了JAVAscript的基础知识、特点及基本语法以及组成及基本用途,本期就给大家带来了JAVAweb的第二个知识点jquery,大数据开发基础之JAVAjquery,这是本篇文章的主要...

推荐四个开源的jQuery可视化表单设计器

jquery开源在线表单拖拉设计器formBuilder(推荐)jQueryformBuilder是一个开源的WEB在线html表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...

取消回复欢迎 发表评论: