简介

感觉自己都out了,跟不上web时代的潮流了,前不久才刚接触这玩意,发觉lesscss在某些方面还挺有用的,说白了这东西就是一种动态的样式语言,语法类似于css,可以像java那样进行编译,生成你想要的对应css,并且less css扩展了css的动态行为。如,它可以设置变量(variables)、支持混合书写模式(mixins)、支持嵌套规则(nested rules)、也可像js那样进行属性值的操作(operations)、像js函数那样传递参数(functions)、 也具有变量的作用域(scope)等。

运行环境

lesscss可以在客户端,也可称浏览器端(IE+、Webkit、Firefox)、服务器端(node.js )上运行。

客户端只需引入相关文件即可:如下所示

<link rel="stylesheet/less" type="text/css" href="less/demo.less">
<script src="js/less.js" type="text/javascript"></script>

其中less文件是你自己编写的less文件,强烈推荐使用sublime text3编辑器进行编辑,高亮的语法以及强大的插件支持不得不让人爱不释手,下载地址:sublimetext3官网

less可到官网上下载,当前吧版本是1.4.2:less官网,还要注意这两个文件的引入顺序。

服务器端是通过nodejs的npm管理包来对less进行安装和编译的,具体nodejs这东西怎么用,最近也在探索中,没linux环境,只好在win7环境下装个unix模拟器cygwin来安装nodejs了。又有得搞了,开始node吧。

特性以及使用

一、变量

less中的变量主要用于定义一些通用的样式,变量还具有计算的功能,还可以定义一个变量名为变量,变量只能定义一次,并且会发生覆盖的现象,如下所示:

@color: #ccc; // 定义变量
.demo { // 应用到元素中
color: @color;
} // 变量计算功能
@color: #ccc;
@light-color: @color + #111;
.demo {
color: @light-color;
} // 定义一个变量名为变量
@color: #ccc;
@highlight: "color";
.demo {
color: @@highlight;
} // 在less中的变量实际上就是一个“常量”,因为它们只能被定义一次
@color: #ccc;
@highlight: "color";
@color: #333; // 后面的@color覆盖前面的@color,所以color输出为#333
.demo {
color: @@highlight;
}

具体经编译后生成的css是咋样的,在这就不列出了,不然的话会搞得一大沓东西,有兴趣的童鞋可以自己动手测试下。


二、混合模式

说白了,less的混合模式就是把一个class类作为变量引入到另一个class类中,还可以带参数调用,如下所示:

// 定义一个类
.rounded-corners (@radius: 5px) {
border-radius: @radius;
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
}
// 定义的类应用到另一个类中
#header {
.rounded-corners; //使用默认参数5px
}
#footer {
.rounded-corners(10px);//把10px传递给变量@radius
} // 混合还有一个重要的变量:@arguments,该参数表示引用所以的参数变量
.boxShadow(@x: 0, @y: 0, @blur: 1px, @color: #000) {
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
box-shadow: @arguments;
}
#header {
.boxShadow(2px, 2px, 3px, #f36);
}

:上面的这些less例子是来自官网的,只是自己把它整理了一下。


三、嵌套规则

less中的嵌套就是在一个选择器中嵌套另一个选择器来实现继承,类似于DOM树的层次结构,使代码更简洁,如下所示:

#header {
display: block;
h1 {
font-size: 26px;
font-weight: bold;
a {
text-decoration: none;
color: #f36;
//注意"&"的用法:嵌套中有"&"时解析的是同一个元素或此元素的伪类,没有"&"时解析的是后代元素
&:hover {
text-decoration: underline;
color: #63f;
}
}
}
p {
font-size: 12px;
}
}
// "&"的用法:
#header {
&.fl {
float: left;
}
.ml5 {
margin-left: 5px;
}
}
/*编译生成的css
#header.fl {float: left;}
#header .ml5 {margin-left: 5px;}
*/

四、操作

less也具有操作功能,可针对任何数字、颜色、变量的操作,可以对其进行加、减、、乘、除或者更复杂的综合运算。如下所示:

@the-border: 1px;
@base-color: #111;
@red: #842210;
#header {
color: @base-color * 3;
border: 1px solid desaturate(@red, 100%);
border-width: @the-border @the-border*2 @the-border*3 @the-border;
border-color: desaturate(@red, 100%) @red lighten(@red, 10%) darken(@red, 30%);
}
/*编译后生成的css
#header {
color: #333;
border: 1px solid #4a4a4a;
border-width: 1px 2px 3px 1px;
border-color: #4A4A4A #842210 #B12E16 #000000;
}
*/ @base: 5%;
@filler: @base*2;
@other: @base + @filler;
#header {
color: #888 / 4;
height: 100% / 2 + @filler;
}
/*编译后生成的css
#header {
color: #222222;
height: 60%;
}
*/ // 不同单位的操作
@var: 1px + 5; //Less最终解析的值是“6px”
@size: 20px;
#header {
border: @var solid red;
width: @var + 50 * 2;
height: (@var + 5) * 4;
}
/*编译生成的css
#header {
border: 6px solid red;
height: 120px;
width: 100px;
}
*/

五、函数

less的function功能主要是针对Color funtions,Less提供了多种变换颜色的功能,如下所示:

@base: #f04615;
#header {
color: @base;
background-color: fadein(@base, 10%);
h1 {
color: lighten(@base,20%);
background-color: lighten(fadeout(@base,20%),5%);
a {
color: darken(@base,50%);
background-color: spin(@base,10);
&:hover {
color: saturate(@base,30%);
background-color: fadein(spin(@base,-5),20%);
}
}
}
p {
color: desaturate(@base,60%);
}
}
/*编译后生成的css
#header {
background-color: #F04615;
color: #F04615;
}
#header h1 {
background-color: rgba(242, 89, 45, 0.8);
color: #F69275;
}
#header h1 a {
background-color: #F06B15;
color: #060200;
}
#header h1 a:hover {
background-color: #F03415;
color: #FF3E06;
}
#header p {
color: #A56F60;
}
*/

六、命名空间

less的命名空间类似于js的命名空间,把一些变量或mixins组织起来,并将其封装,用的时候再提取出来,如下所示:

// bundle库
#bundle {
.button() {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {background-color: white;}
}
.tab {
//...
}
.citation {
//...
}
}
// 比如操作header中的a样式(和button类样式一样)
#header a {
color: orange;
#bundle > .button;
}

七、变量作用域(范围)

less中的变量也具有作用域,类似于js中的变量作用域环境,如下所示:

@var: red;
#page {
@var: white;
#header {
color: @var; // white
}
}
#footer {
color: @var; // red
}

另外关于less的注释方式

1、单行注释类似于js的注释,使用"//"分隔符
2、多行注释类似于css的注释,使用"/*...*/"

结语

以上只是对less的主要特性做了个总结,对于"服务器端的使用”,"模式匹配”,“导入文件和变量”,“字符串插值”等一些深入的东西还需慢慢探讨,任重道远。

来认识下less css的更多相关文章

  1. webkit下面的CSS设置滚动条

    webkit下面的CSS设置滚动条 1.主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端 ...

  2. django static 无法正确加载目录下的css

    在static->web目录下添加CSS后该css文件一直报404错误,解决问题: 在setting.py文件添加: STATICFILES_DIRS = [ os.path.join(BASE ...

  3. IE 9 下的 css 陷阱

    IE 9 下的 css 陷阱 今天 Karson 老大的分享. 根据说明 当 css 文件超过一定大小时会被自动截断. http://ju.outofmemory.cn/entry/168599

  4. IE6 7下常见CSS兼容性处理

    以下是一些比较常见的IE6 7下的兼容性问题. 在当下这个时代,其实我们几乎可以不用再去针对IE6做兼容性的处理,除非你的公司还是诡异的要求你兼容到IE6.但是了解一些常见的兼容性问题还是可以帮助我们 ...

  5. YII 使用modules下的css,js,img

    用YII assets 1.assets的作用是方便模块化,插件化的,一般来说出于安全原因不允许通过url访问protected下面的文件,但是我们又希望将module单独出来,所以需要使用发布,即将 ...

  6. 关于WEB-INF目录下无法访问webapp下的css等静态文件

    第一种方法: <!-- 输出为项目根目录,即webapp--> <c:set value="${pageContext.request.contextPath}" ...

  7. PHP Strom 配置less 并设置编译后在远程开发模式下自动上传css文件

    ctrl+alt+s ->File Watchers->add-> 其中Argument中的-x代表最后编译过后的css文件为压缩过的 此时就可以用了,但是编译过后less可以自动上 ...

  8. django引用static目录下的css,js文件304问题

    前提:django1.8 在html页面可以请求道css,js文件并在chrome的开发者工具中查看css,js文件返回状态为200 原因: html页面在头部添加了<!DOCTYPE html ...

  9. 不同浏览器下的CSS HACK

    今天接了个新项目,年底要做完.预祝我顺利完成工作吧.在搭CSS框架的过程中,遇到了一些浏览器兼容性问题.于是就统计一下各个浏览器专用的css hack吧. (粘贴自百科百科) 针对火狐浏览器的CSS ...

随机推荐

  1. EMVTag系列10《发卡行公钥证书》

    Ø  90  发卡行公钥(IPK)证书 L: NCA -C(有条件):如果支持SDA,DDA CA认证过的发卡行公钥.用于脱机数据认证 Ø  9F32    发卡行公钥指数 L: 1 or 3 -C( ...

  2. OpenStack: OVS安装

    > OVS安装:1. Install the Open vSwitch plug-in and its dependencies:# apt-get install \neutron-plugi ...

  3. Swift给每个开发者赢取500万的机会!不看一生后悔。

    [导语] Swift的横空出世,很多有想法的人已经发现其中的蕴含的巨大商机,而很多新手却只是云里雾里,只知道大家最近讨论Swift很欢乐.内行看门道,外行看热闹,说的就是这个理.如果你能把swift用 ...

  4. scjp考试准备 - 3 - 关于Arrays

    判断如下程序的最终输出值: import java.util.*; public class Quest{ public static void main(String[] args){ String ...

  5. Hadoop入门学习随笔

    推荐视频:慕课网http://www.imooc.com/video/8107 ===Hadoop是什么? 开源的.分布式存储+分布式计算平台. http://hadoop.apache.org == ...

  6. MongoDB学习笔记-创建、更新、删除文档

    创建     MongoDB中使用insert方法来向集合插入文档,然后保存到MongoDB中.     db.foo.insert({"hehe":"呵呵"} ...

  7. ListBox mvvm 学习笔记

    1. ListBox  MvvM 例子1. 简单的绑定,ItemsSource 绑定到一个实现了IEnumerable 的类上.一般该绑定都是双向的,所以优先考虑使用 ObservableCollec ...

  8. jQuery插件实例一:年华时代插件Alert对话框

    在工作中使用jQuery插件相信对于程序员来说非常普遍,在网络上也有很多优秀的插件可供大家使用,功能非常强大.在之前用过的一些插件中,有些太过追求功能的强大和可配置性,造成使用的复杂度上升.个人认为与 ...

  9. 第2章 HelloWorld

    ----------------------------------------- 2-2   在设置应用图标的时候,一定要注意添加的图片一定是.ico 的要求格式(32*32像素). 可以在网上下载 ...

  10. 硬件描述语言Verilog设计经验总结

    一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ...