1.官网地址:sass-lang.com
2.下载安装解压解压完成后是一个 dart-sass 文件
1.解压后放到地盘
D:\dart-sass
2.设置环境变量
计算机 > 右键 > 属性 > 高级系统设置 > 环境变量 > Path点开
把 D:\dart-sass 安装路径放在后面保存
3.测试
windows+r输入cmd
在后台输入sass --version
显示版本号及安装成功
1.Live Sass Compiler
2.点击管理(设置的小符号)
3.点击扩展设置
4.点击 在settings.json中编辑
{
"liveSassCompile.settings.formats": [
{
/*
:nested - 嵌套格式
:expanded - 展开格式
:compact - 紧凑格式
:compressed - 压缩格式
*/
"format": "expanded", //可指定的出口css样式(expanded,compact,compressed,nested)
"extensionName": ".css",
"savePath": "~/../css" //为null 表示当前目录
}
],
// 排除目录
"liveSassCompile.settings.excludeList": [
"**/node_modules/**",
".vscode/**"
],
// 是否生成对应的map
"liveSassCompile.settings.generateMap": true,
// 是否添加兼容前缀 例如:-webkit- -moz- ...等
"liveSassCompile.settings.autoprefix": [
"> 1%",
"last 2 versions"
],
"explorer.confirmDelete": false
}
5.复制上端代码到第四步打开的 settings.json 文件中
CSS经常使用的选择器是后代选择器他的写法是父元素后面跟着子元素子元素后面再跟着子元素这种
.container {
width: 1200px;
margin: 0 auto;
}
.container .header {
height: 90px;
line-height: 90px;
}
.container .header .logo {
width: 100px;
height: 60px;
}
.container .center {
height: 600px;
background-color: #f00;
}
.container .footer {
font-size: 16px;
text-align: center;
}
Sass选择器嵌套它是一层层的父元素里面套着子元素这样有助于我们后期的维护从它的层级关系我们就可以看到
.container {
width: 1200px;
margin: 0 auto;
.header {
height: 90px;
line-height: 90px;
.logo {
width: 100px;
height: 60px;
}
}
.center {
height: 600px;
background-color: #f00;
}
.footer {
font-size: 16px;
text-align: center;
}
}
在嵌套 CSS 规则时,有时也需要直接使用嵌套外层的父选择器,例如,当给某个元素设定 hover 样式时,或者当 body元素有某个 classname 时,可以用 & 代表嵌套规则外层的父选择器。
例如有这么一段样式:
.container{width: 1200px;margin: 0 auto}
.container a{color: #333;}
.container a:hover{text-decoration: underline;color: #f00;}
.container .top{border: 1px #f2f2f2 solid;}
.container .top-left{float: left; width: 200px;}
用Sass编写
带伪类选择器的元素我们可以把它放到它的父类下面,但不能直接放,我们需要在伪类的前面放&。
以下面代码为例 .top 下的 &-left 代表的 .top-left 这是 & 代表 .top
.container {
width: 1200px;
margin: 0 auto;
a {
color: #333;
&:hover {
text-decoration: underline;
color: #f00;
}
.top{
border: 1px #f2f2f2 solid;
&-left{
float:left;
width: 200px;
}
}
}
}
有些CSS属性遵循相同的命名空间(namespace),比如font-family,font-size,font-weight 都以 font 作为属性的命名空间。为了便于管理这样的属性,同时也为了避免了重复输入,Sass允许将属性嵌套在命名空间中
CSS写法:
.container a {
color: #333;
font-size: 14px;
font-family: sans-serif;
font-weight: bold;
}
Sass写法:
.container {
a {
color: #333;
font: {
size: 14px;
family: sans-serif;
weight:bold;
}
}
}
注意font:后面要加一个空格
有时,需要定义一套样式并不是给某个元素用,而是只通过 @extend 指令使用,尤其是在制作Sass 样式库的时候,希望Sass 能够忽略用不到的样式。
定义的样式不使用的情况下不会编译出来的
例如有这样一段样式编译前:
.buttom%base{
display: inline-block;
margin-bottom: 0;
border: 1px solid red;
}
.btn-default{
@extend %base;
color: #faa;
width: 60px;
}
.btn-success{
@extend %base;
color: #faa;
width: 60px;
}
编译后
.buttom.btn-default, .buttom.btn-success {
display: inline-block;
margin-bottom: 0;
border: 1px solid red;
}
.btn-default {
color: #faa;
width: 60px;
}
.btn-success {
color: #faa;
width: 60px;
}
Sass的注释有单行和多行注释跟CSS注释一样
Sass编译后不编译单行注释
// 单行注释
/*
多行注释
*/
CSS是通过 – 定义
定义的变量只能在标签内的标签使用
:root相当于html
:root {
--color: #faa;
}
body {
--border-color: #afa;
}
.header {
--background-color: #aaf;
}
p {
color: var(--background-color);
border-color: var(--border-color);
}
.header {
background-color: var(--border-color);
}
$color: #faa;
$border-color: #afa;
$border-width: 1px;
$color1: #aaf;
.container {
color: $color;
border-color: $border-color;
}
1.变量以美元符号($)开头,后面跟变量名;
2.变量名是不以数字开头的可包含字母、数字、下划线、横线(连接符);
3.写法同css,即变量名和值之间用冒号(:)分隔;
4.变量一定要先定义后使用;
通过连接符与下划线定义的同名变量为同一变量,建议使用连接符
$font-size:14px;
$font_size:16px;
.container{font-size: $font-size;}
定义:在选择器内容定义的变量,只能在选择器范围内使用
.container {
$font-size:14px;
font-size: $font-size;
}
定义后能全局使用的变量
$font-size: 16px;
.container {
font-size: $font-size;
}
.footer {
font-size: $font-size;
}
.container {
$font-size: 16px !global;
font-size: $font-size;
}
.footer {
font-size: $font-size;
}
变量值的类型可以有很多
Sass支持 7 种主要的数据类型
例如
$layer-index: 10; //数字
$border-width: 3px;
$font-base-family: "Open Sans", 'Helvetica', Sans-Serif; //字符串
$top-bg-color: rbga(255, 147, 29, 0.6); //颜色
$blank-mode: true; //布尔
$var: null; //值null是其类型的唯一通道。它表示缺少值,通常由函数返回以指示缺少结果。
$color-map: ( //数组
color1: #fa0000,
color2: #fbe200,
color3: #95d7eb,
);
$fonts: ( //map
serif: "Helvetica Neue",
monospace: "Consolas",
);
使用
.container {
$font-size: 16px !global;
font-size: $font-size;
@if $blank-mode {
background-color: map-get($color-map, color1);
} @else {
background-color: map-get($color-map, color2);
}
content: type-of($var);
content: length($var);
color: map-get($color-map, color3);
}
.footer {
font-size: $font-size;
}
//如果列表中包含空值,则生成的CSS中将忽略该空值。
.wrap {
font: 18px bold map-get($fonts, "sans");
}
$color:#333;
//如果$color之前没定义就使用如下的默认值
$color:#666 !default;
.container {
border-color:$color;
}
Sass 扩展了 @import 的功能,允许其导入 Scss 或 Sass 文件。被导入的文件将合并编译到同一个 CSS 文件中,另外,被导入的文件中所包含的变量或混合指令 (mixin) 都可以再导入的文件中使用。
例如
public.scss
$font-base-color:#333;
在index.scss里面使用
@import "public";
$color:#666;
.container {
border-color: $color;
color:$font-base-color;
}
**注意:**跟我们普通css里面@import的区别
如以下几种方式,都将作为普通的css语句,不会导入任何Sass文件
@import "public.css";
@import url(public);
@import "http://xxx.com/xxx";
@import 'landscape' screen and (orientation:landscape);
Sass文件夹下的Sass文件都会被监听且自动编译,取消编译的方法在文件夹名称前加下划线 (_) ,否则文件会被自动编译。
@import "_public.scss" //导入的时候可以不加下划线和文件后缀 例: @import "public"
把局部的Sass文件嵌套在选择器里面
p {
@import "public";
color:$font-base-color;
}
混合指令 (Mixin) 用于定义可重复使用的样式。混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变量,输入多样化的样式。
@mixin mixin-name() {
/* css 声明 */
}
定义
//定义页面一个区块基本的样式
@mixin block () {
width: 96%;
margin-left: 2%;
border-radius: 8px;
border: 1px #f6f6f6 solid;
}
使用
//使用混入
.container {
.block {
@include block;
}
}
定义
//定义flex布局元素纵轴的排列方式
@mixin flex-align($aitem) {
--webkit-box-align:$aitem;
--webkit-align-items:$aitem;
--ms-flex-align:$aitem;
align-items:$aitem;
}
使用
.container{
@include flex-align(center)
}
定义
//定义flex布局元素纵轴的排列方式
@mixin flex-align($aitem) {
--webkit-box-align:$aitem;
--webkit-align-items:$aitem;
--ms-flex-align:$aitem;
align-items:$aitem;
}
使用
.container{
@include flex-align($aitem:center)
}
定义
//定义块元素内边距
@mixin block-padding($top,$right,$bottom,$left) {
padding-top: $top;
padding-right: $right;
padding-bottom: $bottom;
padding-left: $left;
}
使用
.container{
@include block-padding($top:12px,$right:50px,$bottom:30px,$left:0px)
}
**注意:**参数名和参数的数量要对应参数顺序可调整
定义
@mixin block-padding($top:0,$right:0,$bottom:0,$left:0) {
padding-top: $top;
padding-right: $right;
padding-bottom: $bottom;
padding-left: $left;
}
使用
.container{
@include block-padding($top:12px,$bottom:20px)
}
参数不固定的情况
/**
*定义线性渐变
*@param $direction 方向
*@param $gradients 颜色过渡的值列表
*/
@mixin linear-gradient($direction,$gradients...) {
background-color: nth($gradients, 1);
background-image: linear-gradient($direction,$gradients);
}
使用
.container{
@include linear-gradient(to right, orange, yellow)
}
在设计网页的时候通常遇到这样的情况:一个元素使用的样式与另一个元素完全相同,但又添加了额外的样式。通常会在 HTML 中给元素定义两个 class,一个通用样式,一个特殊样式。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bltXJaK5-1654054527904)(C:\Users\Administrator\Desktop\孙乾坤\SASS整理\images\继承样图.png)]
标记 | 说明 |
---|---|
info | 信息!请注意这个信息。 |
success | 成功!很好地完成了提交 |
warning | 警告!请不要提交。 |
danger | 错误!请进行一些更改。 |
所有警告框的基本样式(风格、字体大小、内边距、边框等…),因为我们通常会定义一个通用alert样式
.alert{
padding:15px;
margin-bottom: 20px;
border:qpx solid transparent;
border-radius: 4px;
font-size:12px;
}
不同警告单独风格
.alert-info {
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success {
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning {
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
.alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.alert-info {
@extend .alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success {
@extend .alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning {
@extend .alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
@extend .alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
定义两个类
.alert{
padding:15px;
margin-bottom: 20px;
border:qpx solid transparent;
border-radius: 4px;
font-size:12px;
}
.important{
font-weight: bold;
font-size: 14px;
}
使用
.alert-danger {
@extend .alert;
@extend .important;
color: #afa;
background-color:#aaf ;
border-color: #faa;
}
一个类可以继承另外一个类,这个类还可以被另外一个类继承
.alert{
padding:15px;
margin-bottom: 20px;
border:qpx solid transparent;
border-radius: 4px;
font-size:12px;
}
.important{
@extend .alert;
font-weight: bold;
font-size: 14px;
}
.alert-danger {
@extend .important;
color: #afa;
background-color:#aaf ;
border-color: #faa;
}
你可能发现被继承的CSS父类并没有被实际应用,也就是说HTML代码中没有使用该类,他的唯一目的就是扩展其他选择器。
对于该类,可能不希望被编译输出到最终的CSS文件中,它只会增加CSS文件的大小,永远不会被使用。
这就是占位符选择器的作用。
占位符选择器类似于类选择器,但是,它们不是以句点(.)开头,而是一百分号(%)开头。
当在Sass文件中使用占位符选择器时,它可以用于扩展其他选择器,但不会编译成最终的CSS。
改写
%alert {
padding: 15px;
margin-bottom: 20px;
border: 1px solid transparent;
border-radius: 4px;
font-size: 12px;
}
.alert-info {
@extend %alert;
color: #31708f;
background-color: #d9edf7;
border-color: #bce8f1;
}
.alert-success {
@extend %alert;
color: #3c763d;
background-color: #dff0d8;
border-color: #d6e9c6;
}
.alert-warning {
@extend %alert;
color: #8a6d3b;
background-color: #fcf8e3;
border-color: #faebcc;
}
.alert-danger {
@extend %alert;
color: #a94442;
background-color: #f2dede;
border-color: #ebccd1;
}
所有数据类型都支持等号运算符:
符号 | 说明 |
---|---|
== | 等于 |
!= | 不等于 |
例1数字比较:
$theme: "1";
.container {
@if $theme== "1" {
background-color: red;
} @else {
background-color: #faa;
}
}
例2字符串比较:
$theme: "red";
.container {
@if $theme!= "red" {
background-color: red;
} @else {
background-color: #faa;
}
}
符号 | 说明 |
---|---|
< (lt) | 小于 |
> (gt) | 大于 |
<= (lte) | 小于等于 |
>= (gte) | 大于等于 |
例
$theme: 3;
.container {
@if $theme >=3 {
background-color: red;
} @else {
background-color: #faa;
}
}
符号 | 说明 |
---|---|
and | 逻辑与 |
or | 逻辑或 |
not | 逻辑非 |
例
$width: 100;
$height: 200;
$last: false;
$index: 10;
.container {
@if $width>=100 and $height<=200 {
font-size: 14px;
} @else {
font-size: 16px;
}
@if $width==100 or $height<=100 {
font-size: 14px;
} @else {
font-size: 16px;
}
@if not ($index>5){
color: #aaf;
}@else{
color: royalblue;
}
@if not $last {
border-color: salmon;
}@else{
border-color: seashell;
}
}
符号 | 说明 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模 |
例
.container {
/* ========== + 运算 ============ */
width: 50 + 20;
width: 50 + 20%;
width: 50% + 20%;
width: 20 + 10px;
width: 20px + 10px;
width: 20px + 10pt; //不同单位会自动的转换
// width: 20% + 10px; 不同符号不能转换
}
.container {
/* ========== - 运算 ============ */
width: 90 - 20;
width: 90 - 20%;
width: 90% - 20%;
width: 40 - 10px;
width: 40px - 10px;
width: 50px - 10pt;
// width: 20% + 10px; 不能出现两个符号
}
.container {
/* ========== * 运算 ============ */
width: 90 * 20;
width: 5 * 10%;
width: 40 * 10px;
// width: 90% * 20%; 同时出现了两个百分号
// width: 40px * 10px; 同时出现了两个单位
// width: 20% + 10px; 不能出现两个符号
}
.container {
/* ========== % 运算 ============ */
width: 50 % 6;
width: 50 % 20%;
width: 50% % 20%;
width: 50% % 7;
width: 20 % 10px;
width: 20px % 10px;
width: 20px % 10pt;
// width: 20% % 10px; 不能出现两个符号
}
注意:
数字类型包括:纯数字、百分号、css部分单位(px、pt、in…)
% 与 单位不能一起运算
纯数字与百分号或单位运算时会自动转换成相应的百分号与单位值
以下三种情况/将被视为除法运算符号:
例
/* ========== / 运算 ============ */
$width: 100px;
div{
font: 16px/30px Arial,Helvetica, sans-serif; //不运算
width: (10/5); // 使用了小括号
width: $width / 10; //使用变量与括号
width: round(50) /2; //使用了函数
width: 50px / 10 + 50px; // 使用了 + 表达式
}
如果需要使用变量,同时又要确保/不做除法运算而是完整的编译到 CSS 文件中,只需要用 #{} 插值语句将变量包裹。
+ 可用于连接字符串
**注意:**如果有引用字符串(位于 + 左侧)连接无引号字符串,运算结果是由引号的,相反,无引号,字符串(位于左侧)连接有引号字符串,运算结果则没有引号。
有问题??? 如果有一个值是函数返回的,情况可能不一样
例如
.container{
content: "Foo " +Bar;
font-family: sans- + "serif";
}
引入之前的案例发出一个问题
例如
p{
font: 16px/30px Arial,Helvetia,sans-serif;
}
如果需要使用变量,同时又要确保 / 不做除法运算而是完整的编译到 CSS 文件中,只需要用 #{} 插值语句将变量包裹。
使用插值语法:
$font-size: 16px;
$height: 30px;
p{
font: #{$font-size}/#{$height};
}
常见函数简介,更多函数列表可看:https://sass-lang.com/documentation/modules
Sass包含很多操作颜色的函数。例如:lighten() 与 darken()函数可用于调亮或调暗颜色,opacify()函数使颜色透明度减少,transparent()函数使颜色透明度增加,mix()函数可用来混合两种颜色。
例如:
p {
height: 30px;
}
.p0 {
background-color: #5c7a29;
}
.p1{
/*
让颜色变量
lighten($color, $amount)
$amount 的取值在0% - 100% 之间
*/
background-color: lighten(#5c7a29 , 30%);
}
.p2{
// 让颜色变暗 通常使用color.scale()代替该方案
background-color: darken($color: #5c7a29, $amount: 15%);
}
.p3{
// 降低颜色透明度 通常使用color.scale(5c7a29)代替该方案
// background-color:opacify(#5c7a29,0.5);
background-color: opacify(rgba(#5c7a29, 0.1), 0.5); //里面小数相加不能 >=1 否则无效
}
使用
<p class="p0">p>
<p class="p1">p>
<p class="p2">p>
<p class="p3">p>
Sass有许多处理字符串的函数,比如向字符串添加引号的quote()、获取字符串长度的string-length()和将内容插入字符串给定位置的string-insert().
例:
p{
&:after{
//添加引号
content: quote(这是里面的内容);
}
//去除引号
background-color: unquote($string: "#faa");
//获取字符串长度
z-index: str-length($string: "sass学习");
}
数值函数处理数值计算,例如:percentage()将无单元的数值转换为百分比,round()将数字四舍五入为最接近的整数,min()和max()获取几个数字中的最小值或最大值,random()返回一个随机数。
例如
p{
z-index: abs($number: -16); //取整 16
z-index: max(6,12,8,35); //最大值 35
z-index: ceil(6.8); //向上取整7
opacity: random(); //随机数 0-1
}
List函数操作List,length()返回列表长度,nth()返回列表中的特定项,join()将两个列表连接在一起,append()在列表末尾添加一个值。
例如
p {
z-index: length(12px); //1
z-index: length(12px 5px 8px); //3
z-index: index(a b c d, c); //3
padding: append(10px 20px, 30px); //10px 20px 30px
color: nth($list: red blue green, $n: 2); //blue
}
Map函数操作Map,map-get()根据键值获取map中的对应值,map-merge()来讲两个map合并成一个新的map,map-values()映射中的所有值。
例如
$font-size: (
"small": 12px,
"normal": 18px,
"large": 24px,
);
$padding: (
top: 10px,
right: 20px,
bottom: 10px,
left: 30px,
);
p {
font-size: map-get($font-size, "normal"); //18px
@if map-has-key($padding, "right") {
padding-right: map-get($padding, "right");
}
&:after {
content: map-keys($font-size) + " " + map-values($padding) + "";
}
}
选择符相关函数可对CSS选择进行一些相应的操作,例如:selector-append()可以把一个选择符附加到另一个选择符,selector-unify()将两组选择器合成一个复合选择器。
例如
.header {
background-color: #000;
content: '' + selector-append(".a",".b",".c");
content: selector-unify("a",".disabled") + '';
}
自检相关函数,例如:feature-exists()检查当前Sass版本是否存在某个特性,variable-exists()检查当前作用域中是否存在某个变量,mixin-exists()检查某个mixin是否存在。
例如:
$color:#f00;
@mixin padding($left:0,$top:0,$right:0,$bottom:0) {
padding:$top $right $bottom $left;
}
.container{
@if variable-exists(color){
color:$color;
}
@else{
content: "$color不存在";
}
@if mixin-exists(padding) {
@include padding($left:10px,$right:10px)
}
}
自检函数通常用在代码的调试上
@if()函数允许您根据条件进行分支,并仅返回两种可能结果中的一种。
语法方式同js的if…else if …else
代码形式:
.container{
// 第一种
@if(/* 条件 */){
// ...
}
//第二种
@if(/* 条件 */){
// ...
}@else{
// ...
}
//第三种
@if(/* 条件 */){
// ...
}@else if(/* 条件 */){
// ...
}@else{
// ...
}
}
例如:
%triangle{
width: 0px;
height: 0px;
display: inline-block;
}
@mixin triangle($direction: top, $size: 30px, $border-color: black) {
border-width: $size;
border-#{$direction}-width: 0;
@if ($direction==top) {
border-color: transparent transparent $border-color transparent;
border-style: dashed dashed solid dashed;
} @else if ($direction==right) {
border-color: transparent transparent transparent $border-color;
border-style: dashed dashed dashed solid;
} @else if ($direction==bottom) {
border-color: $border-color transparent transparent transparent;
border-style: solid dashed dashed dashed;
} @else if ($direction==left) {
border-color: transparent $border-color transparent transparent;
border-style: dashed solid dashed dashed;
}
}
.p0 {
@extend %triangle; // 继承
@include triangle(right,30px,#aff); // 混入
}
.p1 {
@extend %triangle;
@include triangle(bottom,30px,#afa);
}
.p2 {
@extend %triangle;
@include triangle(left,30px,#faa);
}
.p3 {
@extend %triangle;
@include triangle(right,30px,#aaf);
}
使用
<p class="p0">p>
<p class="p1">p>
<p class="p2">p>
<p class="p3">p>
@for 指令可以在限制的范围内重复输出格式,每次按照要求(变量的值)对输出结果做出变动。这个指令包含两种格式:@for $from through ,或者 @for $var from to
区别在于 through 与 to 的含义:
例1
@for $i from 1 to 4 {
.p#{$i} {
width: 10 * $i;
height: 30px;
background-color: red;
}
}
@for $i from 1 through 3 {
.p#{$i} {
width: 10 * $i;
height: 30px;
background-color: red;
}
}
使用
例2
@keyframes loading {
0%{
opacity: 0.3;
transform: translateY(0px);
}
50%{
opacity: 1;
transform: translateY(-20px);
background: green;
}
100%{
opacity: 0.3;
transform: translateY(0px);
}
}
#loading {
position: fixed;
top: 200px;
left: 46%;
}
#loading span{
position: absolute;
width: 20px;
height: 20px;
background: #3498db;
opacity: 0.5;
border-radius: 50%;
animation: loading 1s infinite ease-in-out;
}
@for $i from 1 to 6 {
#loading span:nth-child(#{$i}){
left: 20 * ($i - 1) + px;
// animation-delay: 20 * ($i - 1) / 100 + s;
animation-delay: unquote($string: "0." + ($i - 1) * 2 + s);
}
}
使用
@each 指令的格式是 v a r i n < l i s t > , var in ,
varin<list>,var 可以是任何变量名,比如 $length 或者 $name,而 是一连串的值,也就是值列表。
例如做如下效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZM6THaK-1654054527905)(\images\each-img.png)]
普通CSS的写法
p {
width: 10px;
height: 10px;
display: inline-block;
margin: 10px;
z-index: 5;
}
.p0 {
background-color: red;
}
.p1 {
background-color: green;
}
.p2 {
background-color: blue;
}
.p3 {
background-color: turquoise;
}
.p4 {
background-color: darkmagenta;
}
Sass的写法:
$var: 10;
p {
width: 10px;
height: 10px;
display: inline-block;
margin: 10px;
z-index: $var - 5;
}
$color-list: red green blue turquoise darkmagenta;
@each $color in $color-list {
$index: index($color-list, $color);
.p#{$index - 1} {
background-color: $color;
}
}
@while 指令重复输出格式直到表达式返回结果为 false。这样可以实现比 @for 更复杂的循环。
用sass实现bootstrap中css的这么一段代码
http://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.css
.col-sm-12 {
width: 100%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-1 {
width: 8.33333333%;
}
用@while实现
$column:12;
@while $column>0 {
.col-sm-#{$column} {
width: $column / 12 * 100%;
// width: $column / 12 * 100 + %; 会标红
width: $column / 12 * 100#{"%"};
width: unquote($string: $column / 12 * 100 + "%");
}
$column:$column - 1;
}
527905)]
普通CSS的写法
p {
width: 10px;
height: 10px;
display: inline-block;
margin: 10px;
z-index: 5;
}
.p0 {
background-color: red;
}
.p1 {
background-color: green;
}
.p2 {
background-color: blue;
}
.p3 {
background-color: turquoise;
}
.p4 {
background-color: darkmagenta;
}
Sass的写法:
$var: 10;
p {
width: 10px;
height: 10px;
display: inline-block;
margin: 10px;
z-index: $var - 5;
}
$color-list: red green blue turquoise darkmagenta;
@each $color in $color-list {
$index: index($color-list, $color);
.p#{$index - 1} {
background-color: $color;
}
}
@while 指令重复输出格式直到表达式返回结果为 false。这样可以实现比 @for 更复杂的循环。
用sass实现bootstrap中css的这么一段代码
http://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.css
.col-sm-12 {
width: 100%;
}
.col-sm-11 {
width: 91.66666667%;
}
.col-sm-10 {
width: 83.33333333%;
}
.col-sm-9 {
width: 75%;
}
.col-sm-8 {
width: 66.66666667%;
}
.col-sm-7 {
width: 58.33333333%;
}
.col-sm-6 {
width: 50%;
}
.col-sm-5 {
width: 41.66666667%;
}
.col-sm-4 {
width: 33.33333333%;
}
.col-sm-3 {
width: 25%;
}
.col-sm-2 {
width: 16.66666667%;
}
.col-sm-1 {
width: 8.33333333%;
}
用@while实现
$column:12;
@while $column>0 {
.col-sm-#{$column} {
width: $column / 12 * 100%;
// width: $column / 12 * 100 + %; 会标红
width: $column / 12 * 100#{"%"};
width: unquote($string: $column / 12 * 100 + "%");
}
$column:$column - 1;
}