css预处理
css是标记语言,不是编程语言,所以不具备编程语言的特点(编程语言的特点:变量存储、判断和循环的逻辑操作、函数的封装继承和多态...),如果具备以上编程语言的特点,开发css的时候将会非常的方便 css预处理编译语言的宗旨就是把css变为编程语言来开发,提高开发效率,实现组件化的封装 lesssassstylus…之所以叫做预编译语言是因为:我们使用上述语言编写完成的样式代码,浏览器不能识别,我们需要把代码编译成为正常能识别的css代码才可以,所以叫做预编译
less的使用
Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。
Less 可以运行在 Node、浏览器和 Rhino 平台上。网上有很多第三方工具帮助你编译 Less 源码。
安装less
npm install -g less
Less 编译器
lessc styles.less > styles.css若要输出压缩过的 CSS,只需添加 -x 选项lessc styles.less > styles.min.css -x
//less也是来写样式的跟css一样都是实现样式的写法,只不过语法不同,它涵盖了一些JS的思想 //变量//在JS中var color="#ff6700";//在less中变量前面加上@@color:#ff6700;.box1{color: @color;}//还可以 以变量的名定义定义为变量@word:"I love you";@c:#ff5700;@var:"word";//定义了一个变量var赋值为一个变量名word@col:"c";//定义了一个变量var赋值为一个变量名c#p1:after{//content: @word;content: @@var;//@(@var)->@word->"I love you"color: @@col;} //混合类.class1{font-size: 20px;width: 200px;height: 50px;border: 1px solid red;}.box1{.class1;background-color: #0000FF;} //带参数混合//在less中可以像JS函数一样定义一个带参数的属性集合 .radius(@rad){border-radius: @rad;-webkit-border-radius: @rad;-moz-border-radius: @rad;-ms-border-radius: @rad;-o-border-radius: @rad;}.box1{.radius(10px);//@rad=10px;border: 1px solid #0000FF;} //给参数赋默认值.font(@size:18px){font-size:@size ;}.menu li{.font();} //@arguments:包含了所有传进来的参数.bor(@x,@y,@z){border: @arguments;}.wh(@w:100px,@h:30px){width: @w;height: @h;}.menu li{.wh(200px);.bor(3px ,solid ,green);}.box-shadow(@x:0,@y:0,@blur:4px,@color:#ccc){box-shadow: @arguments;color: @color;border-radius: @blur;}span{display: block;.box-shadow(5px,5px);.wh(150px,45px);} //匹配模式和引导表达式.min(drak,@color){color: darken(@color,20%);//将颜色加深20%}.min(light,@color){color: lighten(@color,20%);//将颜色变浅20%}.min(@_,@color){display: block;}@switch1:drak;@switch2:light; span{//.min(@switch1,#ddd);//.min(drak,#ddd);@color:#ddd//.min(@switch2,#ddd);//@_,接受任意值,你传什么值他都会执行;.min(@word,#ccc);} //注释/* 注释* color函数* 1. lighten(@color,10%):* 意思:return a color which is 10% lighter than @color* 2. darken(@color,10%);* 意思:return a color which is 10% draker than @color* 3. statuate(@color,10%);//增加饱和度* 意思:return a color which is 10% statuated than @color* 4. destatuste(@color,10%);//减少饱和度,褪色* 5. fadein(@color,10%)* 6. fadeout(@color,10%)* 7. fade(@color,50%)* 8. spin(@color,10)* 9. spin(@color,-10)* 10. mix(@color1,@color2);混合*** 提取颜色信息* hue(@color):返回当前颜色的色调* staturation(@color):返回当前颜色的饱和度* lightness(@color):返回当前颜色的亮度(浅的度数)* */div{width: 100px;}
.wh(@w:100px,@h:50px){width: @w;height: @h;}//when.mixin(@a) when(lightness(@a)>=50%){background-color: black;}.mixin(@a) when(lightness(@a)<50%){background-color: whitesmoke;}.box1{.wh();.mixin(#ddd);} .mn(@w,@h) when(@w>@h){width: @w;height: @h;}.mn(@w,@h) when(@w<=@h){width: @h;height: @w;}.box1{//.mn(100px,200px);.mn(200px,50px)} .m(@x) when(@x=red){color: @x;}.m(@x) when(@x=green){color: @x;}p{//.m(green).m(whitesmoke);//没有满足条件的根本不会执行}/* 注意:*在less中比较运算:* > < >= <= =* *///基于值类型的判断进行匹配,可以使用JS函数判断/* * isnumber* iscolor* isstring* isurl* iskeyword* 判断单位* ispixel px* ispercentage pt* isem em* */ .n(@a) when(iscolor(@a)){color: @a;}.n1(@b) when(isstring(@b)){content: @b;}.n2(@c) when(ispixel(@c)){width: @c;}.box2 span{.n(red);}.box2:before{//.n1(red).n1("哈哈哈哈哈")} .box2{.n2(100px);}
//嵌套规则//1.直接嵌套表示的是后代关系//2.如果想表达都是当前选择器加一个&来表示(一般都是伪元素伪类用的比较多).wh(@w:100px,@h:100px){width: @w;height: @h;}div{.wh();p{.wh(100px,20px);}}.box{.wh();&:hover{background-color: wheat;}} span{display: block;.wh(50px,20px);&#span1{.wh();background-color: #87CEEB;}} //计算功能:任何颜色,变量都可以参与运算@base:5%;@filter:@base*2;//10%@other:@base*4+@filter;//30%.box{color: #FFFF00;background-color: @filter+#111;height: 100%/2+@other;} @var:10px + 5;#box1{width: (@var + 20)*2;height: (@var - 5)*3;p{height: (@var + 5)/2;background-color: #101010+#000111;border: @var - 5 solid #0000ff;}} //less也支持部分Math函数//round(1.67)->2//ceil(2.1)->3//floor(2.9)->2//peercentage(0.5)->50%转为百分数的函数#s{width: 100px;height: 100px;border-radius: percentage(0.5);} //命名空间#box1{.p1{width: 100px;height: 30px;border: 1px solid red;&:hover{color: #FF0000;}}}.p2{color: #ccc;#box1>.p1;} //可以使用一些简单的JS语句@w:`"helloWord".toUpperCase()+"1"`;.p2:after{content: @w;}