LESS--对官方文档的理解
再好的皮囊,不如自立自强
使用less一定要注意是有一定语义的,不能随意修改之前的样式。尤其是你需要对某个样式进行引用时,即使在引用之后在进行修改,也会对之前的引用造成影响。
变量
基本语法:
@width : 10px; //@变量名:值 为变量基本形式
.d {
width: @width;
height: @width + 10;
}
变量不止可以用来规定值,还可以表示其他
表示选择器名称
@my-selector: banner;
.@{my-selector} {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}
表示路径
URL路径
在项目进行过程中,可能会导致资源位置发生变化,使用变量表示路径前半部分可以简化对路径的修改
@images: "../img";
body {
color: #444;
background: url("@{images}/white-sand.png");//注意使用时需要用{}包裹
}
导入语句路径
@themes: "../../src/themes";
@import "@{themes}/tidal-wave.less";//也需要用{}包裹
表示属性名
@property: color;
.widget {
@{property}: #0ee; //注意用{}
background-@{property}: #999;
}
编译后的css为
.widget {
color: #0ee;
background-color: #999;
}
作为变量的属性
使用$prop
语法将属性视为变量
.widget {
color: #efefef;
background-color: $color;
}
父级选择器
使用父级选择器&
- 首先的用途是嵌套伪类选择器时使用
- 其次可以用于生成重复类名
- 值得注意的是&指的不仅仅是最近的父选择器而是所有父选择器
//生成重复类名
.button {
&-ok {
background-image: url("ok.png");
}
&-cancel {
background-image: url("cancel.png");
}
&-custom {
background-image: url("custom.png");
}
}
@import规则
less中@import规则(引入外部样式)不必放在所有规则最前面,任意位置都可以
如果文件有.css
扩展名则视为css文件,有其他扩展名或者没有扩展名都会被视作less文件
导入选项
实现语法:@import (keyword) "filename";
选项名称:reference,inline,less,css,once,multiple,optional
具体内容在官方文档中
继承
混入
可以混合使用类选择器和ID选择器
.a, #b {
color: red;
}
.mixin-class {
.a();
}
.mixin-id {
#b();
}
带括号的混入不会被编译为css输出,这意味着将选择器只作为变量(类似)是可能的
参数混合
.border-radius(@radius) { //定义
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
#header { //使用
.border-radius(4px);
}
.button {
.border-radius(6px);
}
还可以给参数设置默认值
.border-radius(@radius: 5px) { //定义
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
#header { //使用
.border-radius();
}
mixin中的@arguments变量和JavaScript中函数的argument数组类似,包含着mixin的所有参数。
使用...来接受可变数量的参数
.mixin(@a, @rest...)
@rest包含除了a之外的所有变量
模式匹配(Pattern-matching)
根据传入的参数改变混入的行为
//定义mixin
.mixin(dark, @color) {
color: darken(@color, 10%);
}
.mixin(light, @color) {
color: lighten(@color, 10%);
}
.mixin(@_, @color) {
display: block;
}
根据上面定义运行下面代码
@switch: light;
.class {
.mixin(@switch, #888);
}
得到的css如下
/*根据light得到浅色*/
.class {
color: #a2a2a2;
display: block;
}
下面这个例子阐述了另一个用法
.mixin(@a) { //如果只有一个参数匹配这个定义
color: @a;
}
.mixin(@a, @b) { //两个参数匹配这个定义
color: fade(@a, @b);
}
使用混入作为函数
使用[]从混入规则中选择某一个值
.average(@x, @y) {
@result: ((@x + @y) / 2);
}
div {
padding: .average(16px, 50px)[@result];//传参再选择其中一个值
}
递归混入
less简单例子
.loop(@counter) when (@counter > 0) {
.loop((@counter - 1)); // 调用自身
width: (10px * @counter);
}
div {
.loop(5); // 开始递归
}
转换的css代码为
div {
width: 10px;
width: 20px;
width: 30px;
width: 40px;
width: 50px;
}
更高级的例子(很好的说明了如何用循环选中相似选择器)
.generate-columns(4);
.generate-columns(@n, @i: 1) when (@i =< @n) { //传入参数为4,i初始化为1
.column-@{i} { //变量用作选择器名
width: (@i * 100% / @n);
}
.generate-columns(@n, (@i + 1)); //调用自身
}
转换为css
.column-1 {
width: 25%;
}
.column-2 {
width: 50%;
}
.column-3 {
width: 75%;
}
.column-4 {
width: 100%;
}
嵌套(可代替级联)
.d1 {
background-color: #888;
.d1-1 {
width: 5px;
height: 5px;
background-color: #0e7dec;
}
}
清除浮动写法 &代表当前元素选择器父类
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
通过嵌套写@规则
.d2 {
width: 200px;
@media (min-width:800px) {
width: 600px;
@media (min-height:500px) {
background-color: black;
}
}
}
less中的计算操作
计算时结果的单位以最左边出现的单位为准,如果其他单位可以转换则转换,
无法转换则忽视单位只看其数值部分的结果。
/*此注释在编译为css输出时被保留*/
@conversion-1: 5cm + 10mm; // 结果是 6cm
@conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm
// 单位无法转换
@incompatible-units: 2 + 5px - 3cm; // 结果是 4px
// example with variables
@base: 5%;
@filler: @base * 2; // 结果是 10%
@other: @base + @filler; // 结果是 15%
//除法必须要用()包住
background-color: (#FFFFFF / 16); //结果是 #101010
//转义:允许用任何字符串表示属性或变量值
@min768: ~"(min-width: 768px)";
@min768: (min-width: 768px); 现在直接这样写就可以了
.d3 {
@media @min768 {
font-size: 1.2rem;
}
}
//函数:less提供了很多函数,在需要使用的时候查文档即可
#bundle() { //在后面加(),里面的就可以用了
.button {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {
background-color: white;
}
}
.tab { ... }
.citation { ... }
}
#header a {
color: orange;
#bundle.button(); // 在这里使用
}
//映射:多个颜色放在一起,以使用
#colors() {
primary: blue;
secondary: green;
}
.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix