标签:意义 avatar sha 显示 插入 function 导致 语法规则 变量
我们平时都称之为 Sass,其实可分成sass和scss, 其中Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),以“.sass”后缀为扩展名;而 SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的语法书写和我们的 CSS 语法书写方式非常类似,较为宽松,以“.scss”后缀为扩展名;二者可以说是一个东西
选择器嵌套
这里的 & 代表 nav a ,理解起来有点 像js中this 的意思
<header>
<nav>
<a href="#">home</a>
<a href="#">page</a>
</nav>
</header>
nav a {
color:red;
}
header nav a {
color:green;
}
nav {
a {
color: red;
header & {
color:green;
}
}
}
属性嵌套(有相同的属性前缀)
如 font, background等,也有可能是 -webkit-
.box {
font-size: 12px;
font-weight: bold;
}
.box {
font: {
size: 12px;
weight: bold;
}
}
伪类嵌套
同上选择器嵌套一样 使用 & 关键字
.clearfix{
&:before,
&:after {
content:"";
display: table;
}
&:after {
clear:both;
overflow: hidden;
}
}
clearfix:before, .clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
overflow: hidden;
}
语法:%placeholder,
用法:占位符不被 @extend 调用不产生任何代码
%bg {
background-color: #FF0;
}
%w {
width: 100px;
}
.box {
@extend %w;
height: 100px;
@extend %bg;
}
允许使用变量 以 $ 开头
$test: #ff9500
div{
color: $test;
}
也可以字符串拼接
$side : left;
.rounded {
border-#{$side}-radius: 5px;
}
也可以加减乘除 简单计算
内容:全局、默认、局部变量
使用:默认变量 在局部中无效,覆盖 默认变量 不分上下顺序
<div class="box1">
<div class="box2">box2</div>
</div>
$backgroundColor: #FF0; // 全局变量
$backgroundColor: #000 !default; // 默认变量
$color: #F0F;
.box1 {
$color: #CCC; // 局部变量
width: 100px;
height: 100px;
background-color: $backgroundColor; // #FF0
.box2 {
color: $color; // #CCC
}
}
混合指令
mixin 技术文档翻译 混合类型
mixing 混合 (mix 的现在分词)
mixin sass官方文档称 混合指令
@mixin 为定义混合指令
@include 为引用楼上定义的混合指令
<div class= "parent">
111
</div>
<div class= "child">
222
</div>
<div class= "test">
333
</div>
.parent {
color: red;
}
.child {
@extend .parent;
font-size: (21px * 3);
}
@minxin auto {
margin: 0 auto;
}
.test {
width: 200px;
@include auto;
}
<div class="demo"></div>
单独使用@if:
当@if 的表达式不是false或者null时, 条件成立, 输出{} 内的代码
.demo{
$fx: bottom;
@if ($fx == top) {
border-color: transparent transparent pink transparent;
border-style: dashed dashed solid dashed;
}
@else if($fx == right){
border-color: transparent transparent transparent pink;
border-style: dashed dashed dashed solid;
}
@else if($fx == bottom){
border-color: pink transparent transparent transparent;
border-style: solid dashed dashed dashed;
}
@else if($fx == left){
border-color: transparent pink transparent transparent;
border-style: dashed solid dashed dashed;
}
width: 0px;
height: 0px;
overflow: hidden;
border-width: 60px;
}
混合指令 + @if 指令
// 画三角形@mixin声明
@mixin sj($fx:top,$size:100px,$color:red){
@if ($fx == top) {
border-color: transparent transparent $color transparent;
border-style: dashed dashed solid dashed;
}
@else if($fx == right){
border-color: transparent transparent transparent $color;
border-style: dashed dashed dashed solid;
}
@else if($fx == bottom){
border-color: $color transparent transparent transparent;
border-style: solid dashed dashed dashed;
}
@else if($fx == left){
border-color: transparent $color transparent transparent;
border-style: dashed solid dashed dashed;
}
width: 0px;
height: 0px;
overflow: hidden;
border-width: $size;
}
//mixin的调用
.demo{
@include sj(left, 66px, pink);
}
less 与sass有个很明显的区别
变量
咱们sass 变量用 $ 开头
less 是以 @ 开头的
@for 指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动;
这个指令包含两种格式:
@for $var from
或者
@for $var from
<ul>
<li class="item-1">至尊魔法师</li>
<li class="item-2">王</li>
<li class="item-3">奇异博士</li>
<li class="item-4">莫度男爵</li>
<li class="item-5">哈姆雷特</li>
<li class="item-6">蜘蛛侠</li>
<li class="item-7">非人哉</li>
</ul>
from ... through
// 当使用 through 时,条件范围包含
// 个人分析: 可以将一个页面,不同div中嵌套的元素设置样式,只要命名符合一定的规律
@for $i from 1 through 7 {
.item-#{$i} {
width: 6em * $i;
background: pink;
margin: 6px 0;
}
}
from ... to
使用 to 时条件范围只包含
的值不包含 的值。另外,$var 可以是任何变量,比如 $i; 和 必须是整数值。
@for $i from 1 to 7 {
.item-#{$i} {
width: 6em * $i;
background: pink;
margin: 6px 0;
}
}
@each $usr in nezha, aolie, xiaoyu, xiaotian {
.#{$usr}-avatar {
background-image: url('/img/#{$usr}.png');
}
}
@each 后面的 $usr 变量用于保存每次遍历到的元素,然后使用差值语法(#{var})来拼接正确的图片路径
//@each 指令同样可以用于循环输出,和 @for 的差别在于,@each 通过遍历 list 或者 map 实现循环输出
// 如果遍历的对象是一个 map,那么我们就可以使用两个变量来存储元素的 key 和 value
$frz: ( usr1:xiaotian, usr2:sanyan, usr3:shancai, usr4:longnv );
@each $key, $usr in $frz {
.#{$usr}-avatar {
background-image: url('/img/#{$usr}.png');
}
}
运算的坑
加号居然可以不需要空格隔开,但必须单位统一
$sidebar-width: 220px;
$content-width: 720px;
$gap-width: 20px;
$other-width: 2em;
.container {
// width: $sidebar-width+$content-width + $gap-width;
width: $sidebar-width + $other-width;
margin: 0 auto;
}
还可以做字符连接
p:before {
content: "bing" + jian;
font-family: sans- + "serif";
}
编译后
p:before {
content: "bingjian";
font-family: sans-serif;
}
减法 - 需要注意空格了,否则就完蛋喽
$full-width: 960px;
$sidebar-width: 200px;
.content {
width: $full-width - $sidebar-width;
}
乘法
能够支持多种单位(比如 em ,px , %);
如果进行乘法运算时,两个值单位相同时,只需要为一个数值提供单位即可(多个乘数中只需要一个乘数提供单位,否则报错)。
.box {
width: 10px * 2;
}
否则
.box {
width: 10px * 6px;
}
error: 60px*px isn‘t a valid CSS value.
除法
众所周知“/”符号在 CSS 中已做为一种符号使用。其在 CSS 中通常起到分隔数字的用途,
因此在 Sass 中做除法运算时,直接使用“/”符号做为除号时,将不会生效,
编译时既得不到我们需要的效果,也不会报错。
需要给运算的外面添加一个小括号()才能执行除法运算
.box {
width: (100px / 2);
}
总结: ”/ ”符号被当作除法运算符时有以下几种情况:
如果数值或它的任意部分是存储在一个变量中或是函数的返回值。
如果数值被圆括号包围。
如果数值是另一个数学表达式的一部分。
p {
font: 10px/8px; // 纯 CSS,不是除法运算
$width: 1000px;
width: $width/2; // 使用了变量,是除法运算
width: round(1.5)/2; // 使用了函数,是除法运算
height: (500px/2); // 使用了圆括号,是除法运算
margin-left: 5px + 8px/2px; // 使用了加(+)号,是除法运算
}
还有一种情况
Sass 的除法运算还有一个情况。先回忆一下,在乘法运算时,如果两个值带有相同单位时,做乘法运算时,出来的结果并不是我们需要的结果。但在除法运算时,如果两个值带有相同的单位值时,除法运算之后会得到一个不带单位的数值。
.box {
width: (1000px / 100px);?
}
颜色运算 - 分段运算
所有算数运算都支持颜色值,并且是分段运算的。也就是说,红、绿和蓝各颜色分段单独进行运算。如:
p {
background-color: #012423 + #120923;
color: #324334 * 2
}
将所有的Mixins、Placeholder、Functions和变量放置在一起。将他们放置一起,可以确认他们可以很快的编写以及将来重复使用。
使用嵌套的黄金规则:
过度的嵌套会导致很多问题的发生,代码变得复杂,而且太过于依赖HTML结构。这样将导致后面的样式需要使用!important来覆盖
标签:意义 avatar sha 显示 插入 function 导致 语法规则 变量
原文地址:https://www.cnblogs.com/yc8930143/p/10662255.html