343 lines
5.9 KiB
Markdown
343 lines
5.9 KiB
Markdown
# less sass
|
||
|
||
==scss和less有很多相似之处,最大的区别就在于声明变量的方式,less采用的是`@变量名`, 而scss采用的`$变量名`==
|
||
|
||
## less
|
||
|
||
> css 预处理器, 有嵌套, 变量, 混入, 运算, 函数等功能
|
||
|
||
http://lesscss.cn/
|
||
|
||
### vscode 插件
|
||
|
||
`easy less`
|
||
|
||
### 变量
|
||
|
||
* 必须有@为前缀
|
||
* 不能包含特殊字符
|
||
* 不能以数字开头
|
||
* 大小写敏感
|
||
|
||
```less
|
||
/* 定义变量 */
|
||
@color: pink;
|
||
@font14: 14px;
|
||
/*变量的使用*/
|
||
body {
|
||
background-color: @color;
|
||
}
|
||
|
||
|
||
// 不会编译注释
|
||
/** 会保留注释 */
|
||
|
||
// 不想编译某些子段, ~'' 包裹住
|
||
height: ~'calc(300px - 30px)';
|
||
// 让浏览器计算,不是让less计算
|
||
```
|
||
|
||
### 嵌套
|
||
|
||
```less
|
||
// 将css改为less
|
||
#header .logo {
|
||
width: 300px;
|
||
}
|
||
|
||
#header {
|
||
.logo {
|
||
width: 300px;
|
||
}
|
||
}
|
||
```
|
||
|
||
### & 连接符号
|
||
|
||
如果遇见 (交集|伪类|伪元素选择器) ,利用&进行连接
|
||
|
||
```less
|
||
a:hover{
|
||
color:red;
|
||
}
|
||
a{
|
||
&:hover{
|
||
color:red;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 运算
|
||
|
||
* `+ - * /`, 左右两边要有空格
|
||
* 数字, 颜色, 变量
|
||
* 两个不同单位的值运算, 结果取第一个值的单位; 一个单位, 则用它
|
||
|
||
```less
|
||
/*Less 里面写*/
|
||
@witdh: 10px + 5;
|
||
div {
|
||
border: @witdh solid red;
|
||
}
|
||
/*生成的css*/
|
||
div {
|
||
border: 15px solid red;
|
||
}
|
||
/*Less 甚至还可以这样 */
|
||
width: (@width + 5) * 2;
|
||
```
|
||
|
||
### 导入 @import
|
||
|
||
```less
|
||
//在index.less中导入common.less文件
|
||
@import "common";
|
||
```
|
||
|
||
### unit
|
||
|
||
重置单位
|
||
|
||
```css
|
||
@num: 10px;
|
||
|
||
div {
|
||
height: unit(@num, rem);
|
||
}
|
||
|
||
/** height用了unit,把设置好的变量@num的10px,变成10rem */
|
||
```
|
||
|
||
### 循环
|
||
|
||
https://zhuanlan.zhihu.com/p/192364861
|
||
|
||
````less
|
||
例如循环输出四个 padding 属性:
|
||
|
||
.loop(@i) when (@i > 0) {
|
||
.loop((@i - 1)); // 递归调用自身
|
||
padding: (10px + 5 * @i);
|
||
}
|
||
|
||
.call{
|
||
.loop(4); // 调用循环
|
||
}
|
||
编译成 CSS 代码:
|
||
|
||
.call {
|
||
padding: 15px;
|
||
padding: 20px;
|
||
padding: 25px;
|
||
padding: 30px;
|
||
}
|
||
````
|
||
|
||
````less
|
||
.generate-space(32);
|
||
.generate-space(@n, @i: 4) when(@i =< @n) {
|
||
.generate-space(@n, @i + 4);
|
||
.f-@{i} {
|
||
font-size: unit(@i,px);
|
||
}
|
||
.m-@{i} {
|
||
margin: unit(@i,px);
|
||
}
|
||
.m-h-@{i} {
|
||
margin-left: unit(@i,px);
|
||
margin-right: unit(@i,px);
|
||
}
|
||
.m-v-@{i} {
|
||
margin-top: unit(@i,px);
|
||
margin-bottom: unit(@i,px);
|
||
}
|
||
.m-t-@{i} {
|
||
margin-top: unit(@i,px);
|
||
}
|
||
.m-b-@{i} {
|
||
margin-bottom: unit(@i,px);
|
||
}
|
||
.m-r-@{i} {
|
||
margin-right: unit(@i,px);
|
||
}
|
||
.m-l-@{i} {
|
||
margin-left: unit(@i,px);
|
||
}
|
||
.p-@{i} {
|
||
padding: unit(@i,px);
|
||
}
|
||
.p-h-@{i} {
|
||
padding-left: unit(@i,px);
|
||
padding-right: unit(@i,px);
|
||
}
|
||
.p-v-@{i} {
|
||
padding-top: unit(@i,px);
|
||
padding-bottom: unit(@i,px);
|
||
}
|
||
.p-r-@{i} {
|
||
padding-right: unit(@i,px);
|
||
}
|
||
.p-l-@{i} {
|
||
padding-left: unit(@i,px);
|
||
}
|
||
.p-t-@{i} {
|
||
padding-top: unit(@i,px);
|
||
}
|
||
.p-b-@{i} {
|
||
padding-bottom: unit(@i,px);
|
||
}
|
||
.f-s-@{i} {
|
||
font-size: @i*1px;
|
||
}
|
||
}
|
||
````
|
||
|
||
### 递归
|
||
|
||
生成原子样式
|
||
|
||
```less
|
||
generate-space(32); //调用函数
|
||
// 变量说明 @n:循环次数、@i:Class名称后缀&开始数字
|
||
.generate-space(@n, @i: 4) when(@i =< @n) {
|
||
.generate-space(@n, @i + 4);
|
||
.f-@{i} {
|
||
font-size: unit(@i,px);
|
||
}
|
||
.m-@{i} {
|
||
margin: unit(@i,px);
|
||
}
|
||
.m-h-@{i} {
|
||
margin-left: unit(@i,px);
|
||
margin-right: unit(@i,px);
|
||
}
|
||
.m-v-@{i} {
|
||
margin-top: unit(@i,px);
|
||
margin-bottom: unit(@i,px);
|
||
}
|
||
.m-t-@{i} {
|
||
margin-top: unit(@i,px);
|
||
}
|
||
.m-b-@{i} {
|
||
margin-bottom: unit(@i,px);
|
||
}
|
||
.m-r-@{i} {
|
||
margin-right: unit(@i,px);
|
||
}
|
||
.m-l-@{i} {
|
||
margin-left: unit(@i,px);
|
||
}
|
||
.p-@{i} {
|
||
padding: unit(@i,px);
|
||
}
|
||
.p-h-@{i} {
|
||
padding-left: unit(@i,px);
|
||
padding-right: unit(@i,px);
|
||
}
|
||
.p-v-@{i} {
|
||
padding-top: unit(@i,px);
|
||
padding-bottom: unit(@i,px);
|
||
}
|
||
.p-r-@{i} {
|
||
padding-right: unit(@i,px);
|
||
}
|
||
.p-l-@{i} {
|
||
padding-left: unit(@i,px);
|
||
}
|
||
.p-t-@{i} {
|
||
padding-top: unit(@i,px);
|
||
}
|
||
.p-b-@{i} {
|
||
padding-bottom: unit(@i,px);
|
||
}
|
||
.f-s-@{i} {
|
||
font-size: @i*1px;
|
||
}
|
||
}
|
||
```
|
||
|
||
## scss
|
||
|
||
> Scss 是 Sass 3 引入新的语法,是Sassy CSS的简写,是CSS3语法的超集.
|
||
>
|
||
> Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 Scss 的语法书写和我们的CSS 语法书写方式非常类似
|
||
|
||
### 变量
|
||
|
||
`sass`使用`$`符号来标识变量
|
||
|
||
```bash
|
||
$highlight-color: #f90
|
||
```
|
||
|
||
上面我们声明了一个 名为`$highlight-color`的变量, 我们可以把该变量用在任何位置
|
||
|
||
```bash
|
||
#app {尊敬
|
||
background-color: $highlight-color;
|
||
}
|
||
```
|
||
|
||
### 变量范围
|
||
|
||
与`CSS`属性不同,变量可以在`css`规则块定义之外存在。当变量定义在`css`规则块内,那么该变量只能在此规则块内使用。如果它们出现在任何形式的`{...}`块中(如`@media`或者`@font-face`块),情况也是如此:
|
||
|
||
```bash
|
||
$nav-color: #F90;
|
||
nav {
|
||
$width: 100px;
|
||
width: $width;
|
||
color: $nav-color;
|
||
background-color: black
|
||
}
|
||
|
||
# 编译后
|
||
|
||
nav {
|
||
width: 100px;
|
||
color: #F90;
|
||
background-color: black;
|
||
}
|
||
```
|
||
|
||
在这段代码中,`$nav-color`这个变量定义在了规则块外边,所以在这个样式表中都可以像 `nav`规则块那样引用它。`$width`这个变量定义在了`nav`的`{ }`规则块内,所以它只能在`nav`规则块 内使用。这意味着是你可以在样式表的其他地方定义和使用`$width`变量,不会对这里造成影响。
|
||
|
||
### 嵌套语法
|
||
|
||
和less一样,scss同样支持**`嵌套型`**的语法
|
||
|
||
```scss
|
||
#content {
|
||
article {
|
||
h1 { color: #1dc08a }
|
||
p { font-style: italic; }
|
||
}
|
||
aside { background-color: #f90 }
|
||
}
|
||
```
|
||
|
||
### &父选择器
|
||
|
||
假如你想针对某个特定子元素 进行设置
|
||
|
||
比如
|
||
|
||
```scss
|
||
#content {
|
||
article {
|
||
h1 { color: #1dc08a }
|
||
p { font-style: italic; }
|
||
a {
|
||
color: blue;
|
||
&:hover { color: red }
|
||
}
|
||
}
|
||
aside { background-color: #f90 }
|
||
}
|
||
```
|
||
|
||
### 导入
|
||
|
||
```scss
|
||
@import './variables.scss';
|
||
``` |