less 是一种样式语言,它将 css 赋予了动态语言的特性,如变量、 继承、 运算、 函数。less 既可以在客户端上运行(支持 ie6+,webkit,firefox),也可以借助 Node.js 或者 Rhino 在服务端运行。

less 做为 css 的一种形式的扩展,它并没有阉割 css 的功能,而是在现有的 css 语法上,添加了很多额外的功能,所以对于前端开发人员来所,学习 less 是一件轻而易举的事情。我们先看下用 less 写的一段 css:

@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 的情况下,我们并不知道这些代码是做啥用的,怎么生成我们所熟悉的 css 代码,以上代码经过 less 编译后:

.box {
color: #fe33ac;
border-color: #fdcdea;
}
.box div {
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
-moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}

下面我们就一起来学习 less 吧。

我们知道如果要使用 jquery 就必须在页面上引进 jquery 库,同样的在使用 less 编写 css 代码时,也要引进 less 库——less.js。点击这里下载 less 库。

下载好后只要在页面中引入就可以了。

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

要注意外部引进样式的方法有所改变,rel 属性值为 stylesheet/less,样式的后缀变为 .less 同时 less 样式文件一定要在 less.js 前先引入。

引入了 less 之后,正式开始学习 less。

less 语法

1、变量

less 的变量充许你在样式中对常用的属性值进行定义,然后应用到样式中,这样只要改变变量的值就可以改变全局的效果。和 javascript 中的全局变量有点类似。

甚至可以用变量名定义为变量。

@color: red;
@foot: 'color'; .head{
color: @color;
} .foot{
color: @@foot;
}

输出:

.head {
color: red;
}
.foot {
color: red;
}

注意 less 中的变量为完全的“常量”,所以只能定义一次。

2、混合

混合就是定义一个 class,然后在其他 class 中调用这个 class。

.common{
color: red;
} .nav{
background: #ccc;
.common;
}

输出:

.common {
  color: red;
}
.nav {
  background: #ccc;
  color: red;
}

Css 中的 class, id 或者元素属性集都可以用同样的方式引入。

3、带参数混合

在 less 中,你可以把 class 当做是函数,而函数是可以带参数的。

.border-radius (@radius) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
} #header {
.border-radius(4px);
}
.button {
.border-radius(6px);
}

最后输出:

#header {
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
}
.button {
border-radius: 6px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;
}

我们还可以给参数设置默认值:

.border-radius (@radius: 5px) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
} #header {
.border-radius;
}

最后输出:

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

也可以定义不带参数属性集合,如果想要隐藏这个属性集合,不让它暴露到CSS中去,但是还想在其他的属性集合中引用,就会发现这个方法非常的好用:

.wrap () {
text-wrap: wrap;
white-space: pre-wrap;
white-space: -moz-pre-wrap;
word-wrap: break-word;
} pre {
.wrap
}

输出:

pre {
text-wrap: wrap;
white-space: pre-wrap;
white-space: -moz-pre-wrap;
word-wrap: break-word;
}

混合还有个重要的变量@arguments。

@arguments 包含了所有传递进来的参数,当你不想处理个别的参数时,这个将很有用。

.border(@width:0,@style:solid,@color:red){
border:@arguments;
} .demo{
.border(2px);
}

输出:

.demo {
border: 2px solid #ff0000;
}

混合还有许多高级的应用,如模式匹配等。在这里就不介绍了,只讲些基础的东西。

4、嵌套规则

less 可以让我们用嵌套的方式来写 css。下面是我们平时写的 css:

#header h1 {
font-size: 26px;
font-weight: bold;
}
#header p {
font-size: 12px;
}
#header p a {
text-decoration: none;
}
#header p a:hover {
border-width: 1px;
}

用 less 我们就可以这样写:

#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p {
font-size: 12px;
a {
text-decoration: none;
&:hover { border-width: 1px }
}
}
}

注意 & 符号的使用—如果你想写串联选择器,而不是写后代选择器,就可以用到 & 了。这点对伪类尤其有用如 :hover。

5、运算

任何数字、颜色或者变量都可以参与运算。

.demo{
color: #888 / 4;
}

输出:

.demo {
color: #222222;
}

less 完全可以进行复杂四则运算,同样的复合运算也没有问题。

6、Color 函数

less 提供了一系列的颜色运算函数。颜色会先被转化成 HSL 色彩空间,然后在通道级别操作。

lighten(@color, 10%);     // return a color which is 10% *lighter* than @color
darken(@color, 10%); // return a color which is 10% *darker* than @color saturate(@color, 10%); // return a color 10% *more* saturated than @color
desaturate(@color, 10%); // return a color 10% *less* saturated than @color fadein(@color, 10%); // return a color 10% *less* transparent than @color
fadeout(@color, 10%); // return a color 10% *more* transparent than @color
fade(@color, 50%); // return @color with 50% transparency spin(@color, 10); // return a color with a 10 degree larger in hue than @color
spin(@color, -10); // return a color with a 10 degree smaller hue than @color mix(@color1, @color2); // return a mix of @color1 and @color2

使用起来相当简单:

@base: #f04615;

.class {
color: saturate(@base, 5%);
background-color: lighten(spin(@base, 8), 25%);
}

还可以提取颜色信息:

hue(@color);        // returns the `hue` channel of @color
saturation(@color); // returns the `saturation` channel of @color
lightness(@color); // returns the 'lightness' channel of @color

例如:

@color: #f36;

#header {
background-color: hsl(hue(@color),45%,90%);
}

输出:

#header {
background-color: #f1dae0;
}

7、Math 函数

less 提供了一组方便的数学函数,你可以使用它们处理一些数字类型的值。

round(1.67); // returns 2
ceil(2.4); // returns 3
floor(2.6); // returns 2

如果你想将一个值转化为百分比,你可以使用 percentage 函数:

percentage(0.5); // returns 50%

8、命名空间

有时候,你可能为了更好组织 css 或者单纯是为了更好的封装,将一些变量或者混合模块打包起来,你可以像下面这样在 #form 中定义一些属性集之后可以重复使用:

#form {
.submit () {
display: block;
border: 1px solid black;
background: gray;
&:hover { background: green }
}
.register { ... }
.login { ... }
}

你只需要在 #myform 中像这样引入 .submit:

#myform {
color: orange;
#form > .submit;
}

9、作用域

和其他编程语言类似,less 变量也有作用域。首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,直到找到为止。

@var: red;

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

10、注释

css 形式的注释在 less 中是依然保留的,同时 less 也支持双斜线的注释,但是编译成 css 的时候自动过滤掉。

动态的 css——less的更多相关文章

  1. JavaScript 动态插入 CSS

    写组件时有时想把一些组件特性相关的 CSS 样式封装在 JS 里,这样更内聚,改起来方便.JS 动态插入 CSS 两个步骤就可以 创建一个 style 对象 使用 stylesheet 的 inser ...

  2. jquery网页换肤+jquery的cookie+动态调用css样式文件,可以的

    比较具有参考性,代码全贴(当然,还需要一张图片需要的留个邮箱,看到就发) 贴在这儿吧,修改一下css的引用位置应该可以用 <%@ page language="java" c ...

  3. js中动态载入css js样式

    js中动态载入css样式,方法如下: //<link rel="stylesheet" type="text/css" href="http:/ ...

  4. ASP.NET中直接用C# 动态修改CSS样式

    ASP.NET中直接用C# 动态修改CSS样式  wonsoft (wonsoft@163.com) 使用JavaScript控制CSS样式有点麻烦,还是觉得直接使用C#操作更方便快捷,本文通过两个B ...

  5. AngularJS动态设置CSS

    使用AngularJS动态设置CSS大致有2种思路: 1.通过动态设置class名称 比如先定义2个样式: .show-true{    display:block;} .show-flase{    ...

  6. 动态修改css 规则

    页面引用了两个样式表: <link href="css/mui.min.css" rel="stylesheet" /> <link href ...

  7. IE8动态创建CSS

    IE8动态创建CSS 最近在项目中用到在页面中动态创建CSS方法,记录一下方便以后查看 一. 在IE下动态创建(网上收集3种方法,最后一个方法未测试成功,具体不知道什么原因) 第一种(此方法很麻烦,需 ...

  8. H5_0010:JS动态创建CSS,并向CSS中传入参数值

    1,在html中定义style 2,js中创建css,并添加进入head标签style中 !function(e, t, i) { n.classList && n.classList ...

  9. JS动态设置css的几种方式

    1. 直接设置style的属性  某些情况用这个设置 !important值无效 如果属性有'-'号,就写成驼峰的形式(如textAlign)  如果想保留 - 号,就中括号的形式  element. ...

  10. 用js动态生成css代码

    有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中.但有些兼容性问题我 ...

随机推荐

  1. gcc和arm-linux-gcc区别

    安装arm-linux-gcc的时候,查了不少资料,总算环境搭好了.于是,想写个程序员的经典程序---hello world. 语法都没错,生成test.c. 命令行运行:arm-linux-gcc ...

  2. 【温故而知新】Tcp/Ip协议——总览

    Tcp/Ip协议 一.概念 “三网”:即电信网络.有线电视网络和计算机网络 标准(Standards) 描述了协议的规定,设定了最简的性能集. 协议(Protocol) 网络设备用于交换信息的系列规则 ...

  3. mysql(5.7)在CentOs7下的安装、配置与应用

    和之前版本的mysql有一些不同,现把完整过程记下来,或许对新手来说有用. 本文描述的安装是采用通用的二进制压缩包(linux - Generic)以解压方式安装,相当于绿色安装了.   一.下载通用 ...

  4. 用maven骨架生成项目速度慢的问题

    最近从IntelliJ Idea 14的Community版本切换到Ultimate. 问题出现 最近从IntelliJ Idea 14的Community版本切换到Ultimate,key是从网络上 ...

  5. Oracle运维服务的四根救命稻草

    企业信息化系统建设按生命周期可分为IT规划阶段.IT建设阶段和IT运维阶段,其中,IT运维阶段的时间最长,IT运维管理关乎着IT运维的质量.成本和速度,更关乎着IT系统的安全.连续和可用.大数据云计算 ...

  6. vim自动补全文章搜集

    引用文章A:http://blog.csdn.net/wendy260310/article/details/18035555 文章介绍:添加C++标准库的tags文件方法.(中文版) 引用文章B:h ...

  7. netty实现消息转发服务

    1.结构图 2.消息服务器 消息服务器(SNS)由Http Netty Server(HNS)和WebSocket Netty Server(WNS)组成.HNS采用Netty Http+XML协议栈 ...

  8. Holding Bin-Laden Captive!(hdoj1085)代码并未完全看懂

    We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But rec ...

  9. Wcf实现IServiceBehavior拓展机制

    IServiceBehavior接口 描述:提供一种在整个服务内修改或插入自定义拓展机制: 命名空间:  System.ServiceModel.Description程序集:  System.Ser ...

  10. SQL Server dbcc shrinkfile 不起作用

    方法 1.重建聚集索引. 方法 2.重建堆表. ---------------------------------------------------------------------------- ...