Less css实战

[1- Less简介]:

css是一个标记语言,毫无逻辑,在语法更新的时候,每当新属性提出的时候,浏览器的兼容问题就是我们的绊脚石。

而Less Sass以及其他css预处理语言的出现很棒的解决了css的短板,我们在less语言中可以使用函数,混合(mixin),变量(varible),继承等,就好比在css中使用js。

在大型的项目中使用less等预处理语言可以方便程序员以更少的代码完成更多的样式。

[2-如何使用Less]:

如果你还没接触过 LESS CSS ,可以阅读下面两篇文章:

[3-10个基础less案例]:(笔者这里的less采取的是在浏览器端解析less的方式)

 1 <link rel="stylesheet/less" href=xxx.less"> 2 <script src="less.min.js"></script> 

[3-01]圆角半径:

CSS3中圆角半径(border-radius)的特效要实现,就需要设置参数(各个方向的圆角半径宽度),当然四个角度的宽度一样的话可以设置为一个参数。

[html]:

1 <div class="father">
2     <div class="box3"></div>
3     <div class="box2"></div>
4     <div class="box1"></div>
5 </div>

[css]:

 1 //mixins
 2 .border-radius-custom(@topleft:5px,@topright:5px,@bottomright:5px,@bottomleft:5px){
 3    -webkit-border-radius: @arguments;
 4   -moz-border-radius: @arguments;
 5   -ms-border-radius:@arguments;
 6 }
 7 @box1:box1;
 8 @box2:box2;
 9 @box3:box3;
10 @3d:perserve-3d;
11 
12 .@{box1} {
13   transform: translateZ(500px) translateY(-350px);
14   -webkit-perspective:0;
15   opacity: 0.7;
16 
17   box-shadow: 2px 2px 10px 2px #000;
18   background-color: #723232;
19   width: 150px;
20   height: 150px;
21   .border-radius-custom();
22 }
23 .@{box2} {
24   transform: translate(-0px,-200px);
25   -webkit-perspective:0;
26   perspective: 0;
27   background-color: #723232;
28   opacity: 0.7;
29   box-shadow: 2px 2px 10px 2px #bbb;
30   width: 200px;
31   height: 200px;
32   .border-radius-custom();
33 }
34 .@{box3} {
35   -webkit-perspective:0;
36   background-color: #723232;
37   opacity: 0.7;
38   box-shadow: 2px 2px 2px #bbb;
39   width: 250px;
40   height: 250px;
41   //.backgroundColor();
42   .border-radius-custom();
43 }
44 .father {
45   transform-style: @3d;
46   width: 400px;
47   height: 250px;
48   margin: 0 auto;
49 }

[最终实现]:

[3-02]方块阴影:

div的阴影也是我们在日常css编辑中常使用的特效,box-shadow需要 x:水平偏移,y:垂直偏移,blur:模糊度,alpha:阴影颜色(可以使用rgba(),也可以直接使用颜色)

[html]:

1 <div class="father">
2     <div class="box1"></div>
3     <div class="box2"></div>
4     <div class="box3"></div>
5 </div>

[less]:

 1 .box-shadow(@x:1px,@y:2px,@blur:3px,@alpha:red){
 2     -webkit-box-shadow: @arguments;
 3     -moz-box-shadow: @arguments;
 4     box-shadow:@arguments
 5 }
 6 @father:father;
 7 @box1:box1;
 8 @box2:box2;
 9 @box3:box3;
10 .@{father} {
11   position: relative;
12   width: 500px;
13   height: 500px;
14   background-color: #ccc;
15   margin:  0 auto;
16 }
17 .@{box1} {
18   position: absolute;
19   top:0;
20   width: 200px;
21   height: 200px;
22   background-color: blue;
23   //border: 1px solid #000;
24   .box-shadow(2px,2px,5px,#000);
25 }
26 .@{box2} {
27   position: absolute;
28   top:0;
29   width: 150px;
30   height: 150px;
31   background-color: green;
32   .box-shadow(2px,2px,10px,#000);
33 
34 }
35 .@{box3} {
36   position: absolute;
37   top:0;
38   width: 100px;
39   height: 100px;
40   background-color: red;
41   .box-shadow(2px,2px,10px,#000);
42 
43 }
View Code

[最终特效]:

[3-02]元素的过渡效果(transition):

初次接触css3的时候就被transition这个属性吸引到了,它可以实现css的过渡,有prop,ease,time等众多参数,简直就是个简易版的动画生成器;

[html]:

1 <div class="test">
2 
3 </div>

[less]:

 1 @test:test;
 2 .transition(@prop:all,@time:1s,@ease:linear) {
 3   -webkit-transition: @arguments;
 4   -moz-transition: @arguments;
 5   -o-transition: @arguments;
 6   transition: @arguments;
 7 }
 8 .@{test} {
 9   width: 500px;
10   height: 500px;
11   background-color: #000;
12   .transition(all,5s,ease-in);
13 }
14 .@{test}:hover{
15   opacity: 0;
16 }

[最终效果]:

[3-04]旋转特效(transform):

transition实现了元素的过渡效果,而transform这个属性就实现了我们css3中的2D转换。比如旋转(rotate),平移(translate),缩放(scale)等;

[html]:

 1 <div class="father"> 2 </div> 

 [less]:

 1 .transform(@rotate:50deg,@scale:1,@skew:1deg,@translate:50px){
 2   transform: rotate(@rotate) scale(@scale) skew(@skew) translate(@translate);
 3 }
 4 .father{
 5   width: 50px;
 6   height: 500px;
 7   background-color: red;
 8 }
 9 .father:hover {
10   .transform();
11 }

[最终效果]:

[3-05]渐变效果(gradients):

css的渐变背景效果也是多参的,所有利用less的mixin实现了多参方法用来实现该效果非常方便;

[html]:

1 <div class="test"></div>
2 </body>

[css]:

 1 .test{
 2   width: 500px;
 3   height: 500px;
 4   .gradient();
 5 }
 6 .gradient(@origin:left,@start:red,@stop:purple) {
 7   background-color:red ;
 8   background: -webkit-linear-gradient(@origin,@start,@stop);
 9   background: -moz-linear-gradient(@origin,@start,@stop);
10   background: -ms-linear-gradient(@origin,@start,@stop);
11   background: -o-linear-gradient(@origin,@start,@stop);
12   background: linear-gradient(@origin,@start,@stop);
13 }

[最终效果]:

[3-06]quick gradient(快速渐变):

只设置两个参数  1 origin    2   alpha  实现单个颜色的(透明度的)渐变

[html]:

 1 <div class="test"></div> 

 [less]:

 1 @test:test;
 2 .quick-gradient(@origin:left,@alpha:0.2) {
 3   background: -webkit-linear-gradient(@origin,rgba(0,0,0,0),rgba(0,0,0,@alpha));
 4   background: -moz-linear-gradient(@origin,rgba(0,0,0,0),rgba(0,0,0,@alpha));
 5   background: -ms-linear-gradient(@origin,rgba(0,0,0,0),rgba(0,0,0,@alpha));
 6   background: -o-linear-gradient(@origin,rgba(0,0,0,0),rgba(0,0,0,@alpha));
 7   background: linear-gradient(@origin,rgba(0,0,0,0),rgba(0,0,0,@alpha));
 8 }
 9 .@{test} {
10   width: 300px;
11   height:300px;
12   background-color: #000;
13   .quick-gradient();
14 }

[3-07-01]图片倒影(box-reflect):

之前学习css3的时候没有太留意这个属性 ,学习的过程中遇到后觉得挺有意思而且也属于常用的属性;其原理类似于使用渐变和对称实现倒影;

[html]:

1     <img src="imgs/1.jpg" alt="" width="500" height="300px">

[less]:

1 .reflect() {
2   -webkit-box-reflect: below 0 linear-gradient(transparent, white);
3 }
4 img {
5   .reflect();
6 }

[最终效果]:

[3-07-02]:倒影(渐变):

[html]:

 1 <div class="test"></div> 

 [less]:

 1 .gradient(@origin: left,@start: red,@stop: purple) {
 2   background: -webkit-linear-gradient(@origin,@start,@stop);
 3 };
 4 .reflect() {
 5   -webkit-box-reflect:below 10px -webkit-linear-gradient(transparent,white 40%,rgba(0,0,0,.8));
 6 }
 7 .test{
 8   width: 400px;
 9   height: 200px;
10   .gradient();
11   .reflect();
12 }

[最终效果]:

 

Color Math 颜色计算:

01 颜色互补方案(Complementary Color Scheme):

Less 和 Sass 最出色的就是多了个颜色计算函数,我们可以使用这种css预处理语言特有的功能实现调色板的特殊效果;

[html]:

1 <div class="test">
2     <div class="son"></div>
3     <div class="son"></div>
4     <div class="son"></div>
5     <div class="son"></div>
6     <div class="son"></div>
7 </div>

[less]:

这里我们创建一个基本颜色(@base)然后通过色彩旋转以及加亮变暗方法扩展到5个色板,为了使用互补色我们使用spin将颜色旋转180deg;

 1 @base: #663333;
 2 @complement1: spin(@base, 180);
 3 @complement2: darken(spin(@base, 180), 5%);
 4 @lighten1: lighten(@base, 15%);
 5 @lighten2: lighten(@base, 30%);
 6 
 7 .son:nth-child(1) {
 8   background-color: @base;
 9 }
10 .son:nth-child(2) {
11   background-color: @complement1;
12 }
13 .son:nth-child(3) {
14   background-color: @complement2;
15 }
16 .son:nth-child(4) {
17   background-color: @lighten1;
18 }
19 .son:nth-child(5) {
20   background-color: @lighten2;
21 }

[最终效果]:

02 颜色微调:Subtle Color Scheme:

互补色很有用,但是在网页设计中另一个更有用的就是颜色微调;

[code]:

 1 /* Mixin */
 2 @base: #663333;
 3 @lighter1: lighten(spin(@base, 5), 10%);
 4 @lighter2: lighten(spin(@base, 10), 20%);
 5 @darker1: darken(spin(@base, -5), 10%);
 6 @darker2: darken(spin(@base, -10), 20%);
 7  
 8 /* Implementation */
 9 .one   {color: @base;}
10 .two   {color: @lighter1;}
11 .three {color: @lighter2;}
12 .four  {color: @darker1;}
13 .five  {color: @darker2;}

[css]:

1 /* Compiled CSS */
2 .one   {color: #663333;}
3 .two   {color: #884a44;}
4 .three {color: #aa6355;}
5 .four  {color: #442225;}
6 .five  {color: #442225;}

[最终效果]:

 

原文链接

 

posted @ 2018-03-24 21:56  Lay-Buddhist  阅读(180)  评论(0)    收藏  举报