less学习
less学习
安知鱼看到 less 老是想起 less is more 这句话,这门语言的确是把原来很繁琐的 css 给包装成一门类似于编程语言的语言,感觉看视频只能学习到一点,关键还是看官方文档
- less 是一个 css 扩展,让 css 变成支持变量,嵌套等操作的 css 语言
- 可以去 Less 官方文档 去学习
- less 是一门 css 的预处理语言
- less 是一个 css 的增强版,通过 less 可以编写更少的代码实现更强大的样式
- 在 less 中添加了许多的新特性:像对变量的支持、对 mixin 的支持… …
- less 的语法大体上和 css 语法一致,但是 less 中增添了许多对 css 的扩展,所以浏览器无法直接执行 less 代码,要执行必须向将 less 转换为 css,然后再由浏览器执行
less 基础
less 可以在浏览器端使用也可以在服务端使用
在浏览器端使用 CDN:
1
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.11.1/less.min.js"></script>
引入
并且需要告诉浏览器我们写的是 less 代码:
1
<style type="less"></style>
但是上面的方法是运行时编译 (也就是运行这个网页时才把 less 文件转化为 css),影响网页加载时间
我们想让我们写好 less 文件之后直接转换成 css 文件,这里 vscode 安装
EasyLESS
插件,写好之后会自动生成语义相同的 css 文件
关于 EasyLESS 扩展的配置
在 settings.json 文件中添加以下代码(注意 json 文件中尽量不要添加中文注释,会报错)
1 | { |
compress
代表压缩 css。sourceMap
代表生成地图(在浏览器控制台可以追踪到 less 文件位置)out
代表输出对应的 css 文件所以一般全部都为 true
当然你也可以这样
1 | "less.compile": { |
‘${workspaceRoot}’ 代表的是根目录;
这样就可以更改生成.css 文件的路径了,但是上面代码配置是我的.css 文件的目录地址,这个自行配置就行;
在 less 中导入文件用 @import
import 用来将其他的 less 引入到当前的 less
可以通过 import 来将其他的 less 引入到当前的 less 中
1 | @import "../test.less"; |
标题
less 注释
less 里面的注释分为在编译之后仍然显示和在编译以后不显示两种
1 | /* 我在编译之后仍然显示 */ css中的注释,内容会被解析到css文件中 // 我在编译之后不显示 |
less 变量
- less 中使用
\@
来定义变量 - less 中的变量是
块级作用域
1 | @color:pink; |
- 选择器和属性名同样可以作为变量 (但是这种形式用的很少)
1 | @m: margin; |
- 变量的延迟加载 (变量提升):less 会等到块级作用域加载完成才会替换里面的变量
1 | div { //可以先使用后定义 z-index: @var; @var: 3; } // z-index 属性值为 3 |
- 变量发生重名时,会优先使用比较近的变量
1 | @d: 200px; |
- 其实 css3 中也支持变量,以两个横线开头定义一个变量
--
1 | html { |
新版本语法$
1 | div { |
less 嵌套规则
- 父标签的样式可以嵌套子标签的样式 (像在 html 里面的结构一样)
1 | #father { |
假如要让 子元素 .inner 添加一个 hover 属性
& 表示父类的名称
1 | #father { |
less 混合
- 混合是为了避免大量重复的样式代码,可以将一部分样式打包成代码块 (长得很像函数)
1 | // 可以传参,即使没有参数也要加括号,加了括号后在 css 文件中不会显示 |
- less 混合支持默认参数,例如:
1 | .template(@w:100px,@h:200px) { |
- less 也支持命名参数,解决了参数不匹配的问题
1 | .template(@w:100px,@h:200px,@c:pink) { |
小知识:haslayout:是 ie6 版本之前的兼容性问题,可以开启 haslayout 来解决兼容性问题 开启的方法:
overflow: hidden
- less 匹配模式:例如想要弄四个方向的三角型,可以在函数的第一个参数上弄一个标识符,然后就可以定义四个混合,这时就可以根据传入的参数来判断想要用的是哪个方向的三角型
1 | // 向左的三角型 |
当混合里面的第一个参数是
@_
时并且也拥有其他形参时,调用同名混合也会把拥有这个参数的混合调用上- arguments 变量:和 js 中的
arguments
是一样的,是包含实参的伪数组
- arguments 变量:和 js 中的
1 | .border() { |
less 计算
- 在 less 中,计算的双方只需要一方带单位就可以了
- 例如:
100 + 100px == 200px
- 为了和 css 保持兼容,less 不会把
calc()
属性计算出来,会留到 css 中计算
在 less 中所有的数值都可以直接进行运算
1 | .box1 { |
less 继承
- 继承同样是为了压缩代码,混合有时候两个类似的功能,他们的 css 代码相差不多,但是里面有很多的重复,这时我们可以使用继承来写这部分代码
- 在继承中不支持参数
- 语法格式:
div:extend(.jicheng)
(实质就是在两个选择器中加了一个逗号)
1 | //:extend() 对当前选择器扩展指定选择器的样式(选择器分组) |
或者我们这样来看更直观
1 | // less 文件 |
- less 编译后
1 | /* css 文件 */ |
- 想要继承类的所有状态需要在 extend 后面加上 all
div:extend(.jicheng all)
1 | .jicheng { |
- 这样就可以继承本身的和 :hover 的了
1 | .jicheng, |
less 小技巧
注释问题
1 | /*编译后会被保留*/ |
适用 !important
1 | .nav{ |
避免编译符号 ~
在字符串前加上一个~即可使用一些 less 不认识的专有语法或者一些不正确的 css 语法。