这里将直接以实例的方式展示 LESS 的基本语法。

less code 是编译前的代码,css code 是编译后的代码。

本文的内容,同样是引自【http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/】

1.变量

//less code

//定义一个变量
@border-color : #b5bcc7; .mythemes tableBorder{
border : 1px solid @border-color;
}
//css code
.mythemes tableBorder {
border: 1px solid #b5bcc7;
}

变量最常用的情境是定义主题,像字体颜色,背景颜色,边框样式等进行统一定义,统一定义图片资源路径也是一个不错的做法。

LESS 中的变量和其他编程语言一样,可以实现值的复用,同样它也有生命周期,也就是 Scope(变量范围,开发人员惯称之为作用域),简单的讲就是局部变量还是全局变量的概念。

查找变量的顺序是先在局部定义中找,如果找不到,则查找上级定义,直至全局。下面我们通过一个简单的例子来解释 Scope。

//less code

@width : 20px; 

#homeDiv {
@width : 30px;
#centerDiv{
width : @width; //此处应该取最近定义的变量 width 的值 30px
}
} #leftDiv {
width : @width; //此处应该取最上面定义的变量 width 的值 20px
}
//css code

#homeDiv #centerDiv {
width: 30px;
} #leftDiv {
width: 20px;
}

2.混合Mixins

//less code

//定义一个模块
.roundedCorners(@radius:5px) {
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
} #header {
.roundedCorners;
} #footer {
.roundedCorners(10px);
}
//css code

#header {
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
} #footer {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
}

从上面的例子我们可以看出,LESS 的 Mixins 特性支持传参,默认值定义,我个人觉得如果你不是概念强迫症患者的话,完全可以把它当成是样式函数来理解。

除此之外,Mixins 也能像 Javascript 那样使用 arguments 变量,只是有一点点小区别。

在 LESS 里,@arguments 变量表示所有的变量,很多时候通过使用它,我们可以少写很多代码,请看下面例子:

//less code

//定义一个模块
.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);
}
//css code

#header {
-moz-box-shadow: 2px 2px 3px #f36;
-webkit-box-shadow: 2px 2px 3px #f36;
box-shadow: 2px 2px 3px #f36;
}

我们甚至能利用参数生产类名~

.create-color-btn (@color-name, @background-color, @border-color, @font-color) {
.btn-@{color-name} {
background: @background-color;
border: 1px solid @border-color;
color: @font-color;
}
.btn-@{color-name}:hover {
background: @background-color * 1.05;
border-color: @border-color * 1.05;
}
.btn-@{color-name}:active {
background: @background-color * 0.9;
border-color: @border-color * 0.9;
}
}
.create-color-btn(blue, #4bb1cf, #4bb1cf, #ffffff);

/* 生成的CSS这里就不发出来了 */

3.值运算

//less code

@init: #111111; 

@transition: @init*2; 

.switchColor {
color: @transition;
}
//css code

.switchColor {
color: #222222;
}

对于一些数值型的值,LESS 是支持进行加减乘除四则运算的。

此外,LESS 还提供了一组函数,专门针对颜色运算操作。

lighten(@color, 10%); //颜色淡化
darken(@color, 10%); //颜色加深
saturate(@color, 10%); //饱和度增加
desaturate(@color, 10%); //饱和度降低
fadein(@color, 10%); //透明度增加
fadeout(@color, 10%); //透明度降低
spin(@color, 10); //色调调整(+10)
spin(@color, -10); //色调调整(-10)

这组函数直接返回具体的色值,看下面实例:

//less code

@init: #f04615;

#body {
background-color: fadein(@init, 10%);
}
//css code

#body {
background-color: #f04615;
}

4.嵌套规则

<div id="home">
<div id="top">top</div>
<div id="center">
<div id="left">left</div>
<div id="right">right</div>
</div>
</div>
//less code

#home{
color: blue;
width: 600px;
height: 500px;
border: outset;
#top{
border: outset;
width: 90%;
}
#center{
border: outset;
height: 300px;
width: 90%;
#left{
border:outset;
float: left;
width: 40%;
}
#right{
border: outset;
float: left;
width: 40%;
}
}
}
//css code

#home {
color: blue;
width: 600px;
height: 500px;
border: outset;
}
#home #top {
border: outset;
width: 90%;
}
#home #center {
border: outset;
height: 300px;
width: 90%;
}
#home #center #left {
border: outset;
float: left;
width: 40%;
}
#home #center #right {
border: outset;
float: left;
width: 40%;
}

我们平时在编写 css 的时候,经常会遇到多层选择器嵌套的情况。

从上面的例子可以看出,LESS 可以用很简洁的代码来实现,有着更好的可读性。

同时,我们还可以使用 “&” 来进行同一层级的操作,比如组合类和伪类。

//less code

.link{
text-decoration: none;
&.red{
color: #f00;
}
&:hover{
text-decoration: underline;
}
}
//css code
.link{
text-decoration: none;
} .link.red{
color: #f00;
} .link:hover{
text-decoration: underline;
}

5.导入指令(Import)

less样式文件可通过 @import '文件路径'; 引入外部的less文件。

注意:

不带扩展名或带非 .less 的扩展名均被视为 less 文件;

@import 可出现在任何位置,而不像 css 的 @import 那样只能放在文件第一行。

另外 @import 还提供了6个可选配置项(分别为 reference,inline,less,css,once,multiple),用来改变引入文件的特性。

1. @import (reference) "文件路径";

将引入的文件作为样式库使用,因此文件中样式不会被直接编译为 css 样式规则。当前样式文件通过extend和mixins的方式引用样式库的内容。

2. @import (inline) "文件路径";

用于引入与 less 不兼容的 css 文件,通过 inline 配置告知编译器不对引入的文件进行编译处理,直接输出到最终输出。注意:引入的文件和当前文件会被编译为一个样式文件

3.@import (less) "文件路径";

默认使用该配置项,表示引入的文件为 less 文件。

4.@import (css) "文件路径";

表示当前操作为 css 中的 @import 操作。当前文件会输出一个样式文件,而被引入的文件自身为一个独立的样式文件

5.@import (once) "文件路径";

默认使用该配置项,表示对同一个资源仅引入一次。

6.@import (multiple) "文件路径";

表示对同一资源可引入多次。

【LESS系列】基本语法的更多相关文章

  1. 03.从0实现一个JVM语言系列之语法分析器-Parser-03月01日更新

    从0实现JVM语言之语法分析器-Parser 相较于之前有较大更新, 老朋友们可以复盘或者针对bug留言, 我会看到之后答复您! 源码github仓库, 如果这个系列文章对你有帮助, 希望获得你的一个 ...

  2. Rust实战系列-基本语法

    本文是<Rust in action>学习总结系列的第二部分,更多内容请看已发布文章: 一.Rust实战系列-Rust介绍 " 主要介绍 Rust 的语法.基本类型和数据结构,通 ...

  3. [Asp.net MVC]Asp.net MVC5系列——Razor语法

    Razor视图引擎是Asp.net MVC3中新扩展的内容,并且也是它的默认视图引擎.还有另外一种Web Forms视图引擎.通过前面的文章可知在Asp.net mvc5中创建视图,默认使用的是Raz ...

  4. 【SqlServer系列】语法定义符号解析

    1   概述 在数据库函数定义中,经常用到这些符号:<>,::=,[],{},|,..,(),!!   .这篇文章简要概述这些符号. 2   具体内容 2.1  <> < ...

  5. scala系列--基础语法

    Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 区分大小写 -  Scala是大小写敏感的,这意味着标识Hello 和 hello在Scala中会有不同的含义. 类 ...

  6. Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

  7. 我眼中的go的语法特点

    因为基本从c#/javascript/c/c++/python/lua/action script,一路走来,对所有的C系列的语法既熟悉又有好感: 那在看语言的时候肯定会与C系列的东西进行类比,那就总 ...

  8. MVC5系列——布局视图

    MVC5系列——布局视图 目录 系列文章 概述 布局视图 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加 ...

  9. [Asp.net MVC]Asp.net MVC5系列——布局视图

    目录 系列文章 概述 布局视图 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5系列——添加视图 [Asp.net M ...

  10. (转)Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

随机推荐

  1. maven中pom.xml中的scope讲解

    一.compile:编译范围compile是默认的范围:如果没有提供一个范围,编译范围依赖在所有的classpath 中可用,同时它们也会被打包.而且这些dependency会传递到依赖的项目中. 二 ...

  2. linux 权限机制

    系统每个文件都拥有特定的权限,所属用户及所属组,通过这样的机制限制哪些用户.哪些组可以对特定文件进行什么样的操作,一般分为读.写.执行三种权限. 每个进程都是以某个用户的身份运行,所以进程的权限与该用 ...

  3. [LeetCode题解]: Sort Colors

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given an a ...

  4. oracle通过job执行procedure

    1. 先创建一个FUNCTION CREATE OR REPLACE FUNCTION GET_TIMEOUT_PROGRAM(i_customerNo IN TK_CUST_PROG_D.CUSTO ...

  5. vmware之VMware Remote Console (VMRC) SDK(二)

    在上篇文章中,我们用winform结合vmware的api做了一个demo,在vmrc sdk中作为plugin单独打包出来vmware-vmrc-win32-x86.exe,上篇文章的demo只能基 ...

  6. 优化案例--改写IN条件为INNER JOIN

    --====================================== --原始语句 SET STATISTICS IO ON SELECT COUNT(DISTINCT parent_co ...

  7. javascript实现俄罗斯方块游戏

    观摩一下<编程之美>:“程序虽然很难写,却很美妙.要想把程序写好,需要写好一定的基础知识,包括编程语言.数据结构与算法.程序写得好,需要缜密的逻辑思维能力和良好的梳理基础,而且熟悉编程环境 ...

  8. gitlab迁移版本库(保留原版本库的所有内容)

    如果你想从别的 Git 托管服务那里复制一份源代码到新的 Git 托管服务器上的话,可以通过以下步骤来操作. 1) 从原地址克隆一份裸版本库,比如原本托管于 GitHub git clone --ba ...

  9. Shell中反引号和$()的区别

    Shell中可以用来实现变量代换的命令有两种,一种是由反引号括起来的一条命令另一种是由$()括起来一条命令,shell先执行这条命令,然后见输出结果立刻代换到当前命令行中. 例如定义一个变量存放dat ...

  10. Eclipse右键增加在浏览器打开

    https://github.com/samsonw/OpenExplorer/downloads 放在  \eclipse\plugins 下,右键项目就多一个 以后打开项目文件夹就方便了.