2025-03-29 14:35:49 +08:00

343 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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循环次数、@iClass名称后缀&开始数字
.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';
```