Less 概述 1)动态样式语言 CSS 是一门非程序式语言,没有变量、函数、作用域等概念。CSS 被称之为 静态样式语言 ,从而导致样式文件的修改和维护困难。
动态样式语言 是指,在静态样式语言的基础上,添加了一门真正的语言所必需的元素:变量、数据类型、运算、逻辑结构、函数、继承等,从而大大提高样式的可修改和可维护性。
2)什么是 Less Less 是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。
Less 官网:http://www.lesscss.net/
3)如何使用 Less a. 在客户端使用
在 HTML 页面的 <head> 元素内引入 .less 样式文件(**rel**属性值为stylesheet/less)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @base : #f938ab;.box-shadow (@style , @c) when (iscolor(@c)) { box-shadow : @style @c; -webkit-box-shadow : @style @c; -moz-box-shadow : @style @c; } .box-shadow (@style , @alpha : 50% ) when (isnumber(@alpha)) { .box-shadow (@style , rgba(0 , 0 , 0 , @alpha)); } .box { color : saturate (@base, 5% ); border-color : lighten (@base, 30% ); div { .box-shadow (0 0 5px , 30% ) } }
下载 less.js 文件,在 <head> 元素内引入。
值得注意的是: less 样式文件必须在 less.js 文件之前引入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 在客户端使用Less</title > <link rel ="stylesheet/less" type ="text/css" href ="less/css/style.less" > <script src ="less/js/less.js" > </script > </head > <body > <div class ="box" > <h1 > 标题</h1 > <p > 段落</p > </div > </body > </html >
b. 在服务器端使用 在服务器端安装 less 的最简单方式就是通过 npm(node 的包管理器)。
Node.js的安装及验证请参考《Node.js安装教程》
命令行方式将 less 文件编译成 css 文件。 1 lessc style.less > style.css
配置 WebStorm 中的 less
点击“File”->“Setting”,弹出配置窗口。
点击“Tools”->“File Watchers”。
点击左下角的“加号”,选择Less选项。
配置“Program”选项,值为lessc的安装路径。
保存配置后,修改任意less文件,即可以自动生成一个css文件。
**值得注意的是:**此配置只对当前项目有效。如果创建新项目,必须重新进行配置。
Less 语法 1)注释 CSS 形式的注释在 LESS 中是依然保留的:
1 2 .class { color : black }
LESS 同样也支持双斜线的注释, 但是编译成 CSS 的时候自动过滤掉:
1 2 .class { color : white }
2)变量 变量就是一次声明可以多次使用的数据。
1 2 3 @nice-blue: #5B83AD ;#header { color : @ nice-blue; }
输出:
1 #header { color : #5B83AD ; }
**值得注意的是:**LESS 中的变量为完全的‘常量’,所以只能定义一次。
3)混合 在 LESS 中可以定义一些通用的属性集为一个class,然后在另一个class中去调用这些属性。
1 2 3 4 .bordered { border-top : dotted 1px black; border-bottom : solid 2px black; }
如果需要在其他 class 中引入那些通用的属性集,只需要在任何class中像下面这样调用就可以了。
1 2 3 4 5 6 7 8 #menu a { color : #111 ; .bordered ; } .post a { color : red; .bordered ; }
.bordered class里面的属性样式都会在 #menu a 和 .post a中体现出来:
1 2 3 4 5 6 7 8 9 10 #menu a { color : #111 ; border-top : dotted 1px black; border-bottom : solid 2px black; } .post a { color : red; border-top : dotted 1px black; border-bottom : solid 2px black; }
4)带参混合 在 LESS 中,还可以像函数一样定义一个带参数的属性集合:
1 2 3 4 5 .border-radius (@radius ) { border-radius : @radius ; -moz-border-radius : @radius ; -webkit-border-radius : @radius ; }
然后在其他 class 中像这样调用:
1 2 3 4 5 6 #header { .border-radius (4px ); } .button { .border-radius (6px ); }
为参数设置默认值: 1 2 3 4 5 .border-radius (@radius : 5px ) { border-radius : @radius ; -moz-border-radius : @radius ; -webkit-border-radius : @radius ; }
这样调用:
1 2 3 #header { .border-radius ; }
@radius 的值就是 5px。
@arguments 变量 @arguments包含了所有传递进来的参数。
1 2 3 4 5 6 .box-shadow (@x : 0 , @y : 0 , @blur : 1px , @color : #000 ) { box-shadow : @arguments ; -moz-box-shadow : @arguments ; -webkit-box-shadow : @arguments ; } .box-shadow (2px , 5px );
将会输出:
1 2 3 box-shadow : 2px 5px 1px #000 ;-moz-box-shadow : 2px 5px 1px #000 ; -webkit-box-shadow : 2px 5px 1px #000 ;
5)嵌套规则 LESS 可以以嵌套的方式编写层叠样式。例如以下案例:
1 2 3 4 5 6 7 8 9 10 #header { color : black; }#header .navigation { font-size : 12px ; } #header .logo { width : 300px ; } #header .logo :hover { text-decoration : none; }
在 LESS 中就可以这样写:
1 2 3 4 5 6 7 8 9 10 11 #header { color : black; .navigation { font-size : 12px ; } .logo { width : 300px ; & :hover { text-decoration : none } } }
值得注意的是: & 符号的使用
如果想写串联选择器,而不是写后代选择器,就可以用到 & 了。
1 2 3 4 5 6 7 8 .bordered { & .float { float : left; } .top { margin : 5px ; } }
会这样输出:
1 2 3 4 5 6 .bordered .float { float : left; } .bordered .top { margin : 5px ; }
6)运算 任何数字、颜色或者变量都可以参与运算。LESS 中允许的计算有+、-、*、/和%。
1 2 3 4 5 @screen-width: 992px ;.col-md-1 { width : floor (@screen-width /12 ); }
将会输出:
1 2 3 .col-md-1 { width : 82px ; }
7)函数 LESS 内置了几十个函数,用于颜色转换、字符串处理和数学运算等。
a. Color 函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 lighten (@color , 10% ); darken (@color , 10% ); saturate (@color , 10% ); desaturate (@color , 10% ); fadein (@color , 10% ); fadeout (@color , 10% ); fade (@color , 50% ); spin (@color , 10 ); spin (@color , -10 ); mix (@color1 , @color2 );
例如下述案例:
1 2 3 4 5 6 @base: #f04615 ;.class { color : saturate (@base , 5% ); background-color : lighten (spin (@base , 8 ), 25% ); }
将会输出:
1 2 3 4 .class { color : #f6430f ; background-color : #f8b38d ; }
b. Math 函数 1 2 3 round (1.67 ); ceil (2.4 ); floor (2.6 );
8)文件导入 LESS 允许创建一个 main 文件(主要用于引入其他 LESS 文件 )。
.less 后缀可带可不带。
1 2 @import "lib.less" ;@import "lib" ;
**值得注意的是:**最后会生成一个 CSS 文件,而不是多个 CSS 文件。
9)定制 Bootstrap a. 查看 Bootstrap 源码 打开 Bootstrap 源码包中的 less 目录中的 bootstrap.less 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 @import "variables.less" ;@import "mixins.less" ;@import "normalize.less" ;@import "print.less" ;@import "glyphicons.less" ;@import "scaffolding.less" ;@import "type.less" ;@import "code.less" ;@import "grid.less" ;@import "tables.less" ;@import "forms.less" ;@import "buttons.less" ;@import "component-animations.less" ;@import "dropdowns.less" ;@import "button-groups.less" ;@import "input-groups.less" ;@import "navs.less" ;@import "navbar.less" ;@import "breadcrumbs.less" ;@import "pagination.less" ;@import "pager.less" ;@import "labels.less" ;@import "badges.less" ;@import "jumbotron.less" ;@import "thumbnails.less" ;@import "alerts.less" ;@import "progress-bars.less" ;@import "media.less" ;@import "list-group.less" ;@import "panels.less" ;@import "responsive-embed.less" ;@import "wells.less" ;@import "close.less" ;@import "modals.less" ;@import "tooltip.less" ;@import "popovers.less" ;@import "carousel.less" ;@import "utilities.less" ;@import "responsive-utilities.less" ;