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表单设计器,开发人员可以通过拖拉实现一个可视化的表单。支持表单常用控件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)