动态css语言less,CSS_动态的样式语言less语法详解之变量与extend,作为 CSS 的一种扩展,Less 不仅 - phpStudy...

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

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

注意:本文描述的一切都是基于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

.@{mySelector} {

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;

background-@{property}: #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;

}

}

.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;

}相关阅读:

js改变文章字体大小的实例代码

字段太多jquey快速清空表单内容方法

jQuery实现仿Alipay支付宝首页全屏焦点图切换特效

Android消息处理机制Looper和Handler详解

Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法

jQuery 隐藏和显示 input 默认值示例

(组图)最完美的Win10开始菜单:Classic Shell

.net 添加Cookie的4种方法

.NET 日志系统设计思路及实现代码

解读ASP.NET 5 & MVC6系列教程(14):View Component

IOS实现图片轮播无限循环效果

PHP利用REFERER根居访问来地址进行页面跳转

JS实现文字放大效果的方法

Java 通过JDBC连接Mysql数据库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值