好文章链接:30分钟学会less
自己总结一下这篇文章中的几个关键字:变量、混合、函数、嵌套、@import
下面贴上自己照着上面写的一些代码:
<template>
<div class="main">
<div class="container">1</div>
<div class="container2">2</div>
<div id="container2">3</div>
<div id="header">函数</div>
<button class="button">函数</button>
<div class="sectionBox">函数样式多个参数用分号隔开,且可以为每个参数设置默认值</div>
<div class="class1">函数有默认值,调用时通过变量名称,而不是位置</div>
<div class="class2">函数参数有内置变量@arguments,相当于js函数中的arguments</div>
<div class="parentBox">
我是父元素
<div class="child">我是子元素</div>
</div>
<div class="one">我是one元素,后面是我的伪类</div>
</div>
</template> <script>
export default { }
</script> <style lang="less">
@color: pink;//样式变量
@mainColor:green;//样式变量
@main:main;//类名变量
.whbm(){//用于嵌套
width: auto;
height: 50px;
background-color: @color;
margin-bottom: 5px;
float:left;
} .@{main}{//用变量当类名//不能会用#
background-color: @mainColor;
position:absolute;
top:0;
left:0;
bottom:0;
width:100%;
}
.container{
.whbm();//和.border_radius效果一样
}
.container2{
.whbm();//混合
}
#container2{
.whbm();//混合
} // fun_less
.border-radius(@radius) {//函数样式用于嵌套 @radius是一个参数变量
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
#header{
.whbm();
.border-radius(20px);
}
.button{
.whbm();
.border-radius(50%);
}
// 函数的参数设置默认值:
.border-radius2(@radius: 5px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
// 函数有多个参数时用分号隔开
.mixin(@color:orange; @padding) {
color: @color;
padding: @padding;
}
// 函数如果没有参数,在转译成 css 时就不会被打印出来,详见上面混合中的示例
.wrap() {
text-wrap: wrap;
} .sectionBox{
.whbm();
.border-radius(10px);
.mixin(orange;10px);
} // 函数参数如果有默认,调用时就是通过变量名称,而不是位置
.cmp(@color: black; @margin: 10px; @padding: 20px 0;) {
color: @color;
margin: @margin;
padding: @padding;
}
.class1 {
.whbm();
.cmp(@margin: 20px;@padding:10px 0; @color: #33acfe);
} // 函数参数有个内置变量 @arguments,相当于 js 中的 arguments
.box-shadow(@x: 10px; @y: 10px; @blur: 1px; @color: #000) {
-webkit-box-shadow: @arguments;
-moz-box-shadow: @arguments;
box-shadow: @arguments;
}
.class2{
.whbm();
.box-shadow();
}
// 函数名允许相同,但参数不同,类似于 java 中多态的概念
.mixin1(@color: black) { };
.mixin1(@color: black; @margin: 10px) { }; // 父子元素的写法 (可以嵌套)
.parentBox{
float:left;
width:200px;
height:100px;
background:orangered;
color:black;
position: relative;
.child{
background:blueviolet;
width:100%;
height:30px;
};
&:after{//伪类元素的写法 //用&号代替父元素
content:"我是父元素的伪类元素";
position: absolute;
top:0;
right:-100px;
width:100px;
height:100px;
background:chocolate;
}
} // 神奇 @import (从外部引入less文件,像引入模块一样)
//借机说一下@import引入样式,与link引入样式的区别,link引入样式,先加载css再加载html,不会出现HTML混乱,而@import引入样式,先加载html后加载样式,会引起html先加载时,样式混乱。
// 文件后缀名
// 在less中,@import声明会根据引入的文件的后缀进行相应的解析。 // 如果文件是.css的后缀,该文件将会被解析成css样式,然后@import语句会保持原样。
// 如果文件是其他类型的后缀的话,文件会被解析成less文件,然后进行导入。
// 如果文件没有任何后缀,将会为文件添加.less的后缀,并且当成less文件进行导入。 @import "../less/one";//不指定后缀时,已less格式引入
@import url("../less/two.less");//我会覆盖one的样式 这种带url的语法和不带url的语法无差别 // less提供了数种后缀给css的@import语句,可以更加灵活的去使用外部文件。
// 语法:@import(keyword)"filename";
// 下面是已经实现了的import准则:
// reference:使用less文件到时不将其输出。
// inline:将源文件包含进来但是不进行处理。
// less:无论文件后缀是什么类型,都当成less格式的文件。
// css:无论文件后缀是什么类型,都当成css格式的文件。
// once:只引入文件一次(为默认行为)。
// multiple:引入文件数次。
// optional:当文件没找到时会继续编译。
@import (optional, reference) "foo.less"; </style>