动态的样式语言less语法详解之变量与extend

所属分类: 网页制作 / CSS 阅读数: 257
收藏 0 赞 0 分享

作为 CSS 的一种扩展,Less 不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法。这样的设计使得学习 Less 很轻松,而且你可以在任何时候回退到 CSS。less文件是以less作为文件后缀名,HTML引用时可以像css那样引用,如下:

<link rel="stylesheet/less" type="text/css" href="styles.less">

注意:本文描述的一切都是基于1.4.0版本,除非有特殊标明。

变量:
   变量的作用就是把值定义在一个地方,然后在各处使用,这样能让代码更易维护,如下:


复制代码
代码如下:

// Variables
@link-color: #428bca; // sea blue
// 用法
a:link {
color: @link-color;
}
.widget {
color: #fff;
background: @link-color;
}

上面代码将颜色#428bca赋给一个变量@link-color,然后在color属性中使用变量,对应的css如下:


复制代码
代码如下:

a:link {
color: #428bca;
}
.widget {
color: #fff;
background: #428bca;
}

变量不仅可以用在属性值上,也可以用在选择元素名,属性名(1.6.0支持),url和import方法。如下:

选择元素名:


复制代码
代码如下:

// Variables
@mySelector: banner;
// Usage
<a href="mailto:.@{mySelector">.@{mySelector</a>} {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}

编译后为


复制代码
代码如下:

.banner {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}

url:


复制代码
代码如下:

// Variables
@images: "../img";
// 用法
body {
color: #444;
background: url("@{images}/white-sand.png");
}

编译后


复制代码
代码如下:

body {
color: #444;
background: url("../img/white-sand.png");
}
@import:
// Variables
@themes: "../../src/themes";
// Usage
@import "@{themes}/tidal-wave.less";

编译后


复制代码
代码如下:

@import "../../src/themes/tidal-wave.less";

属性名:


复制代码
代码如下:

@property: color;
.widget {
@{property}: #0ee;
<a href="mailto:background-@{property">background-@{property</a>}: #999;
}

编译后


复制代码
代码如下:

.widget {
color: #0ee;
background-color: #999;
}

变量的变量名也可以是变量,如下:

@fnord:  "I am fnord.";
@var:    "fnord";
content: @@var;

编译后

content: "I am fnord.";

延迟加载:
  变量支持延迟加载,所以你可以在变量定义之前使用。如下:


复制代码
代码如下:

.lazy-eval {
width: @var;
}
@var: @a;
@a: 9%;

或者


复制代码
代码如下:

.lazy-eval-scope {
width: @var;
@a: 9%;
}
@var: @a;
@a: 100%;

上面两个都会被编译成如下


复制代码
代码如下:

.lazy-eval-scope {
width: 9%;
}

问什么第二个也会被编译成上面的css,这是因为当一个变量被定义两次时,最后一次定义的生效。就类似于css中,对同一个元素定义不同的css样式,最后定义的生效。再比如下面这个


复制代码
代码如下:

@var: 0;
.class1 {
@var: 1;
.class {
@var: 2;
three: @var;
@var: 3;
}
one: @var;
}

编译后


复制代码
代码如下:

.class1 .class {
three: 3;
}
.class {
one: 1;
}

Extend:
  扩展选择器是less的伪类选择器,他会复制当前选择器,定义新的样式,而原来的不便


复制代码
代码如下:

nav ul {
&:extend(.inline);
background: blue;
}
.inline {
color: red;
}

编译后


复制代码
代码如下:

nav ul {
background: blue;
}
.inline,
nav ul {
color: red;
}

语法:


复制代码
代码如下:

.a:extend(.b) {}
也可以这样使用
.a {
&:extend(.b);
}
.e:extend(.f) {}
.e:extend(.g) {}
// 上面等价于下面
.e:extend(.f, .g) {}

嵌套选择器:


复制代码
代码如下:

.bucket {
tr {
color: blue;
}
}
.some-class:extend(.bucket tr) {}

编译后


复制代码
代码如下:

.bucket tr,
.some-class {
color: blue;
}

精确匹配:


复制代码
代码如下:

.a.class,
.class.a,
.class > .a {
color: blue;
}
.test:extend(.class) {} // 不会匹配任何选择

nth:


复制代码
代码如下:

:nth-child(1n+3) {
color: blue;
}
.child:extend(n+3) {}

编译后


复制代码
代码如下:

:nth-child(1n+3) {
color: blue;
}

注意:1n+3与n+3在css中是等价的,但是在less中不等价。

属性选择器:


复制代码
代码如下:

[title=identifier] {
color: blue;
}
[title='identifier'] {
color: blue;
}
[title="identifier"] {
color: blue;
}
.noQuote:extend([title=identifier]) {}
.singleQuote:extend([title='identifier']) {}
.doubleQuote:extend([title="identifier"]) {}

编译后


复制代码
代码如下:

[title=identifier],
.noQuote,
.singleQuote,
.doubleQuote {
color: blue;
}
[title='identifier'],
.noQuote,
.singleQuote,
.doubleQuote {
color: blue;
}
[title="identifier"],
.noQuote,
.singleQuote,
.doubleQuote {
color: blue;
}

注意:less中不区分单引号双引号

关键字all:


复制代码
代码如下:

.a.b.test,
.test.c {
color: orange;
}
.test {
&:hover {
color: green;
}
}</p> <p>.replacement:extend(.test all) {}

编译后


复制代码
代码如下:

.a.b.test,
.test.c,
.a.b.replacement,
.replacement.c {
color: orange;
}
.test:hover,
.replacement:hover {
color: green;
}

变量选择器:


复制代码
代码如下:

@variable: .bucket;
@{variable} { // interpolated selector
color: blue;
}
.some-class:extend(.bucket) {}// 不会匹配任何选择元素
.bucket {
color: blue;
}
.some-class:extend(@{variable}) {} // 不会匹配任何元素
@variable: .bucket;

注意:extend不匹配变量。

@media:


复制代码
代码如下:

@media print {
.screenClass:extend(.selector) {} // extend inside media
.selector {
color: black;
}
}
.selector {
color: red;
}
@media screen {
.selector {
color: blue;
}
}

编译后


复制代码
代码如下:

@media print {
.selector,
.screenClass {
color: black;
}
}
.selector {
color: red;
}
@media screen {
.selector {
color: blue;
}
}

注意:extend只能匹配@media中前面定义的,在后面定义的将忽略。

使用extend重写样式:
在开发中我们会定义一些通用样式,然后单独样式在添加class,使用css的后面覆盖前面的原理来实现样式。extend也可以实现这种效果,如下:


复制代码
代码如下:

.animal {
background-color: black;
color: white;
}
.bear {
&:extend(.animal);
background-color: brown;
}

减少css代码:


复制代码
代码如下:

.my-inline-block() {
display: inline-block;
font-size: 0;
}
.thing1 {
.my-inline-block;
}
.thing2 {
.my-inline-block;
}

编译后:


复制代码
代码如下:

.thing1 {
display: inline-block;
font-size: 0;
}
.thing2 {
display: inline-block;
font-size: 0;
}

使用extend


复制代码
代码如下:

.my-inline-block {
display: inline-block;
font-size: 0;
}
.thing1 {
&:extend(.my-inline-block);
}
.thing2 {
&:extend(.my-inline-block);
}

编译后


复制代码
代码如下:

.my-inline-block,
.thing1,
.thing2 {
display: inline-block;
font-size: 0;
}

更多精彩内容其他人还在看

Opera中国的WEB标准课程

网页制作Webjx文章简介:在这篇文章里,我要向大家介绍我和其他很多人花费数月时间开发的一个课程——Web标准课程,该课程旨在向大家提供Web设计和开发的坚实基础,无论读者是谁,此教程完全免费、可访问,并且不需要预备知识。当然,我主要还
收藏 0 赞 0 分享

CSS样式表渐进增强的基本概念

网页制作Webjx文章简介:如果你挠着头想弄清楚优雅降级和渐进增强的区别,我告诉你,这是视角问题。优雅降级和渐进增强都考虑网站在各种设备的各种浏览器上如何良好运转。两者区别的关键在于它们各自关注的焦点,以及这种关注对工作流程的影响
收藏 0 赞 0 分享

简单介绍Web Developer插件制作网页

网页制作Webjx文章简介:Firefox浏览器是一个良好支持W3C标准的开放源代码的浏览器,拥有Linux/Windows/Mac版本。因为Firefox浏览器良好支持W3C标准,所以使用Firefox来调试网页是非常好的。 Firefox浏览器是
收藏 0 赞 0 分享

CSS布局带来的巨大影响:CSS display属性值

网页制作Webjx文章简介:网页元素应用上那些与表格相关的display属性值后,能够模仿出与表格相同的特性。我将会在该文中给大家演示这种方法给CSS布局带来的巨大影响。 应原书编辑要求,先在文章顶部给出链接:《Everything You
收藏 0 赞 0 分享

用div css模拟表格对角线

这只是探讨一种CSS模拟表格对角线的用法,实际在工作中可能觉得这样做有点小题大作,这不是本主题讨论的重点。如果对此深以为然的朋友,请一笑过之 首先声明: 这只是探讨一种CSS模拟表格对角线的
收藏 0 赞 0 分享

IE Firefox在css中的差别 (部分)

1、单位问题 问题:任何距离的数值ie可以不加单位,ff必须要求写单位(0除外) 解决:写全单位如padding:0px; 2、水平居中 问题:div里的内容,ie默认为center,而ff默认left 解决:mairgin:0px auto; 3、高度问题
收藏 0 赞 0 分享

不用js可以实现信息提示效果

[code] <style> body { font:verdena; font-size:14px; color:#000 } h1{ font:verdena; font-size:22px; color:#000 } h2{ font:verdena;
收藏 0 赞 0 分享

CSS解决未知高度的垂直水平居中自适应问题

今天有人问起,晚上试着写出来,供参考; 以下代码兼容主流浏览器IE6、IE7、Firefox、Opera。 从最简单的开始………… 一、如何让一个DIV水平居中? 这个简单不作过多说明! [code] <st
收藏 0 赞 0 分享

CSS cursor 属性 -- 鼠标指针样式效果

取值: [ [<uri> ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize |
收藏 0 赞 0 分享

css 简单区别ie6,ie7,firefox的写法

同一样式里可以这样 [code] margin:17px; FF +margin:17px; IE6 IE7 _margin:17px; IE6 [/code] 按这个顺序,刚好区分开三个浏览器
收藏 0 赞 0 分享
查看更多