less
less是一种动态样式语言,属于CSS预处理器的范畴,它扩展了CSS语言,增加了变量,Mixin,函数等特性,使CSS更易维护和扩展。
LESS就可以在客户端上允许,也可以借助Node.js在服务端运行
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
<!--
less 官网:
lesscss.cn
-->
<style type="text/less">
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
.inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: pink;
height: 100px;
width: 100px;
}
}
</style>
<div id="wrap">
<div class="inner"></div>
</div>
</head>
<body></body>
<script src="./less.js-master/dist/less.min.js"></script>
</html>
Less编译工具
koala官网:www.koala-app.com
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
<link rel="stylesheet" href="./css/02.css" />
<div id="wrap">
<div class="inner"></div>
</div>
</head>
<body></body>
</html>
less:
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
.inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: pink;
height: 100px;
width: 100px;
}
}
生成的css
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
}
#wrap .inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: pink;
height: 100px;
width: 100px;
}
less中的注释
以//开头的注释,不会被编译到css文件中
以/**/包裹的注释会被编译到css文件中
less:
/*这是想暴露出去的注释*/
//这是见不得人的注释
生成的css:
/*这是想暴露出去的注释*/
less中的变量
用@来声明一个变量:@pink:pink;
- 作为普通属性值使用:@pink
- 作为选择器和属性名:#@{selector的值}的形式
- 作为URL:@{url}
- 变量的延迟加载
less:
/*这是想暴露出去的注释*/
//这是见不得人的注释
@color:pink;
@m:margin;
@selector:#wrap;
* {
@{m}: 0;
padding: 0;
}
@{selector} {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
.inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: @color;
height: 100px;
width: 100px;
}
}
生成的css:
/*这是想暴露出去的注释*/
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
}
#wrap .inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: #ffc0cb;
height: 100px;
width: 100px;
}
less中的嵌套规则
- 基本嵌套规则(变量的延迟加载)
less:
@var:0;
.class{
@var:1;
.brass{
@var :2;
three:@var;//3
@var:3;
}
one:@var;//1
}
生成的css:
.class {
one: 1;
}
.class .brass {
three: 3;
}
- &的使用
less:
/*这是想暴露出去的注释*/
//这是见不得人的注释
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
.inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: pink;
height: 100px;
width: 100px;
&:hover{
background-color: skyblue;
}
}
}
生成的css:
/*这是想暴露出去的注释*/
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
}
#wrap .inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: pink;
height: 100px;
width: 100px;
}
#wrap .inner:hover {
background-color: skyblue;
}
less中的混合
混合就是将一系列属性从一个规则集引入到另一个规则集的方式
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
<link rel="stylesheet" href="./css/01.css" />
<div id="wrap">
<div class="inner"></div>
<div class="inner2"></div>
</div>
</head>
<body></body>
</html>
- 普通混合
- 不带输出的混合
- 带参数的混合
- 带参数并且有默认值的混合
less:
.juzhong(@w:10px,@h:10px,@c:pink){
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: @c;
height: @h;
width: @w;
}
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
.inner {
.juzhong();
}
.inner2 {
.juzhong(200px,200px,deeppink);
}
}
生产的css:
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
}
#wrap .inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: #ffc0cb;
height: 10px;
width: 10px;
}
#wrap .inner2 {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: #ff1493;
height: 200px;
width: 200px;
}
- 命名参数
less:
.juzhong(@w:10px,@h:10px,@c:pink){
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: @c;
height: @h;
width: @w;
}
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
.inner {
.juzhong(@c:black);
}
.inner2 {
.juzhong(200px,200px,deeppink);
}
}
生成的css
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 400px;
border: 1px solid black;
margin: 0 auto;
}
#wrap .inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: #000000;
height: 10px;
width: 10px;
}
#wrap .inner2 {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
background: #ff1493;
height: 200px;
width: 200px;
}
- 匹配模式
less:
@import "./triangle.less";
//业务代码
#wrap > .sjx {
.triangle(B,40px, yellow)
}
trangle.less:
.triangle(@_,@w,@c){
width: 0px;
height: 0px;
/* 开启haslayout-->windows IE */
overflow: hidden;
}
.triangle(L,@w,@c){
border-width: @w;
border-style: dashed solid dashed dashed;
/* IE6不认识transparent -->画虚线 */
border-color: transparent @c transparent transparent;
}
.triangle(R,@w,@c){
border-width: @w;
border-style: dashed dashed dashed solid;
/* IE6不认识transparent -->画虚线 */
border-color: transparent transparent transparent @c;
}
.triangle(T,@w,@c){
border-width: @w;
border-style: dashed dashed solid dashed;
/* IE6不认识transparent -->画虚线 */
border-color: transparent transparent @c transparent;
}
.triangle(B,@w,@c){
border-width: @w;
border-style: solid dashed dashed dashed;
/* IE6不认识transparent -->画虚线 */
border-color: @c transparent transparent transparent;
}
生成的css:
@import "./triangle.less";
//业务代码
#wrap > .sjx {
.triangle(B,40px, yellow)
}
- arguments变量
less:
.border(@1,@2,@3){
border:@arguments;
}
#wrap .sjx{
.border(1px,solid,black)
}
生成的css:
#wrap .sjx {
border: 1px solid #000000;
}
less运算
在less中可以进行加减乘除的运算
less:
#wrap .sjx{
width: (100+100px);
// less中只需要计算双方的一方带单位就可以了
}
生成的css:
#wrap .sjx {
width: 200px;
}
less继承 继承与混合的区别
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="./css/mixin.css" />
</head>
<body>
<div id="wrap">
<div class="inner">inner1</div>
<div class="inner">inner2</div>
</div>
</body>
</html>
混合:
mixin.less
*{
margin:0;
padding: 0;
}
@import './mixin/juzhong-mixin.less';
#wrap{
position:relative;
width: 300px;
height: 300px;
border: 1px solid;
margin:0 auto;
.inner{
&:nth-child(1){
.juzhong(100px,100px,deeppink);
}
&:nth-child(2){
.juzhong(50px,50px,pink);
}
}
}
生成的mixin.css:
* {
margin: 0;
padding: 0;
}
#wrap {
position: relative;
width: 300px;
height: 300px;
border: 1px solid;
margin: 0 auto;
}
#wrap .inner:nth-child(1) {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
width: 100px;
height: 100px;
background-color: #ff1493;
}
#wrap .inner:nth-child(2) {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
width: 50px;
height: 50px;
background-color: #ffc0cb;
}
juzhong-mixin.less
.juzhong(@w,@h,@c){
position: absolute;
left:0;
right: 0;
top:0;
bottom: 0;//四边定义为0能居中
margin: auto;
width: @w;
height: @h;
background-color: @c;
}
继承:
extend.less
*{
margin:0;
padding: 0;
}
@import './mixin/juzhong-extend.less';
#wrap{
position:relative;
width: 300px;
height: 300px;
border: 1px solid;
margin:0 auto;
.inner{
&:extend(.juzhong all);
&:nth-child(1){
width: 100px;
height: 100px;
background-color: deeppink
}
&:nth-child(2){
width: 50px;
height: 50px;
background-color: pink;
}
}
}
生成的extend.css
* {
margin: 0;
padding: 0;
}
.juzhong,
#wrap .inner {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
}
.juzhong:hover,
#wrap .inner:hover {
background: red!important;
}
#wrap {
position: relative;
width: 300px;
height: 300px;
border: 1px solid;
margin: 0 auto;
}
#wrap .inner:nth-child(1) {
width: 100px;
height: 100px;
background-color: #ff1493;
}
#wrap .inner:nth-child(2) {
width: 50px;
height: 50px;
background-color: pink;
}
juzhong-extend.less
.juzhong{
position: absolute;
left:0;
right: 0;
top:0;
bottom: 0;//四边定义为0能居中
margin: auto;
}
.juzhong:hover{
background: red!important;
}
less避免编译
~“要避免编译的代码”
test.less
*{
margin: 0+10px;
padding: ~"calc(100+100px)";
}
生成的test.css
* {
margin: 10px;
padding: calc(100+100px);
}