同步操作将从 deepinwiki/wiki 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
css 是对 html 网页的外形进行控制的定义语言。但 css 定义上有比较大的重复性,所以有人创造了扩展版 css,通过预编译起,可以将扩展css 转换为原始的css,但是又可以使用更高层次的语法。
这就是 SASS。 SCSS 是 SASS 的新版本语法。旧版采用缩进方式,而新版采用花括号方式,注意他们的工具还是称为 SASS。
scss 和 css 大体上很类似,但 scss 对前缀有优化,避免对统一前缀的多个对象重复书写前缀。具体看选择器章节。
cd 项目
yarn add --dev sass
格式:
变量定义在转换的时候是会消失。除非你在文档某处使用它。它的值会被替换上去。
变量是有定义范围的,如果在某一个层级定义,它只能在该层级和内层使用。
css 通过选择器来定义标签的样式,选择器有五大类:
<h1>
中的 h1
<h2 class="ariticle">
中的 .ariticle
<h3 id="content">
中的 #content
<h4 data-x="aaa">
中 [data-x]
[data-x="aaa"]
: 匹配指定值如何表示层次关系呢?即某个标签内的标签的样式呢?通过组合选择器:
/* 表示标签 id 为 content 的内层有个标签class 为 ariticle 的标签的内层 <h1> 的样式为红色*/
/* 例: <div id="content"><div class="ariticle"><h1>红色样式... */
#cotent .ariticle h1 {color:red}
#cotent .ariticle h2 {color:blue}
这看上去很简洁,但是同一层次的 h2{color:blue} 又要重复写一遍前缀。这种累赘的描述方式,就是 scss 想改进的地方:
#content{
.ariticle{
h1 {color:red}
h2 {color:blue}
}
}
不仅简洁,关键易读。
#content{
a{
&:hover {color:red}
}
.ie & {color:blue}
}
产生:
#content a:hover {color:red}
.ie #content {color:blue}
& 就是父选择器的占位符,改变默认生成 css 的方式。(默认类似 a{b{c}} --> a b c
)。
css 表示对一组选择器使用样式:
h1, h2 {color:red}
/* 等价于 */
h1 {color:red}
h2 {color:red}
scss 同样支持这个语法。并且支持嵌套:
#content{
h1,h2 {color:red}
}
/* 等价于 */
#content h1, #content h2 {color:red}
css 支持选择器组合的方式:
>
: 表示子层邻接的选择器+
: 同层邻接的选择器~
: 同层后续选择器即对应一下关系:
<div>
<span>子层邻接</span>
<div>
<div> 同层邻接(也是同层后续) </div>
<div> 同层后续 </div>
scss 同样支持在嵌套中使用该语法:
div {
+ div {color:red}
~ div {font-size:20px}
> div {color:blue}
span >{
h1 {color:red}
h2 {color:blue}
}
}
产生:
div + div {color:red}
div ~ div {font-size:20px}
div > div {color:blue}
div span > h1 {color:red}
div span > h2 {color:blue}
css 有很多属性是嵌套定义的:
div {
border-style:solid;
border-width:1px;
border-color:red;
}
scss 支持这类属性改写成嵌套模式:
div {
border: {
style:solid;
width:1px;
color:red;
}
}
稍微简化了书写。
将样式分隔到不同文件,这些是工程做法。
@import "colors"; /* 导入colors.scss */
@import "themes/night-sky"; /* 导入 themes/_night-sky.scss */
$aaa:red !default; /* 默认变量,当没有被定义时为 red */
.bule-theme {
@import "blue"; /* 内容会导入和父级而产生嵌套组合 */
}
mixin 将内容倒腾到指定位置,和导入样式文件有点类似,但它是片段。
@content
@include
简写 +@mixin
简写 =@mixin redfont($size:12) {
color: red;
@content;
font-size: $size px;
}
div {
@include redfont($size:20) { background-color:black};
border: 2px solid blue;
}
产生:
div {
color: red;
background-color: black;
font-size: 20px;
border: 2px solid blue;
}
导入文件,mixin 混入,都是不错的重用方式,但是编程语言界有个大杀器,那就是继承。scss 做到了。
.father {color:red}
.father a {color:blue}
.son {
@extend .father; /* 继承父类的所有 */
font-size:20px;
}
类似效果:
.father {color:red}
.father a {color:blue}
.son {
color:red;
font-size:20px;
}
.son a {color:blue}
即将.father 出现的地方,添加相同的.son:
.father, .son {color:red}
.father a, .son a {color:blue}
.son {font-size:20px}
高级用法:
@extend a
@extend .aaa.bbb
等于继承:
(#aaa .bbb) @extend .x
,只有完全匹配组合#aaa .bbb
才继承样式,#aaa
和 .bbb 不会受影响。(不建议使用,因为会产生很多组合),如对于 p a .x {}
样式,编译器会生成:
p a #aaa .bbb {}
#aaa p a .bbb {}
@extend (#aaa .bbb)
类似编程语言中的接口,或者虚类,它本身不会产生代码,除非有继承者。
使用占位符 % 来定义:
a%parent {color:red}
.notice { @extend %parent }
编译为:
a.notice {color:red}
数据类型:
#04a3f9
, rgba(255,0,0,0.5)算式:
+
: 字符串相连,根据左侧决定是否带引号@import
: 导入文件
@media
: 嵌套自动添加 and@extend
: 继承
%
:纯继承选择器占位符!optional
: 可选@media
嵌套外的选择器@at-root
: 在外层生成选择器
@at-root(without:指令)
: 用在指令嵌套中排除,如@media
@debug
: 调试输出
@warn
:警告@error
: 报错@if @else if @else
: 条件选择@for $i from 1 through 3
: 循环@each $item in puma
: 枚举@while $i > 0
: 循环@mixin
: 混入@function
: 函数此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。