详解less中的变量

变量是less入门基础知识,他适用于定义主题,我们可以将背景颜色、字体颜色、边框属性等常规样式进行统一定义,这样不同的主题只需要定义不同的变量文件就可以了。当然该特性也同样适用于 CSS RESET(重置样式表),在 Web 开发中,我们往往需要屏蔽浏览器默认的样式行为而需要重新定义样式表来覆盖浏览器的默认行为,这里可以使用 LESS 的变量特性,这样就可以在不同的项目间重用样式表,我们仅需要在不同的项目样式表中,根据需求重新给变量赋值即可。

@border-color : #b5bcc7;

.mythemes tableBorder{

border : 1px solid @border-color;

}

.mythemes tableBorder {

border: 1px solid #b5bcc7;

}

生命周期

局部变量还是全局变量
查找变量的顺序是先在局部定义中找,如果找不到,则查找上级定义,直至全局

@width : 20px;

#homeDiv {

@width : 30px;

#centerDiv{

width : @width;// 此处应该取最近定义的变量 width 的值 30px

}

}

#leftDiv {

width : @width; // 此处应该取最上面定义的变量 width 的值 20px

}

#homeDiv #centerDiv {

width: 30px;

}

#leftDiv {

width: 20px;

}

列表类型

@colors: #FFF, #0F0, #F0F;.skin{color: extract(@colors,0);height: 12px*length(@colors);

}

.skin{color: #FFF;height: 36px;

}

mixins

在 LESS 中,混入是指在一个 CLASS 中引入另外一个已经定义的 CLASS,就像在当前 CLASS 中增加一个属性一样

定义一个样式选择器

.roundedCorners(@radius:5px) {

-moz-border-radius: @radius;

-webkit-border-radius: @radius;

border-radius: @radius;

}

在另外的样式选择器中使用

#header {

.roundedCorners;

}

#footer {

.roundedCorners(10px);

}

#header {

-moz-border-radius:5px;

-webkit-border-radius:5px;

border-radius:5px;

}

#footer {

-moz-border-radius:10px;

-webkit-border-radius:10px;

border-radius:10px;

}

Mixins 其实是一种嵌套,它允许将一个类嵌入到另外一个类中使用,被嵌入的类也可以称作变量,简单的讲,Mixins 其实是规则级别的复用。

Mixins 还有一种形式叫做 Parametric Mixins(混入参数),LESS 也支持这一特性

// 定义一个样式选择器

.borderRadius(@radius){

-moz-border-radius: @radius;

-webkit-border-radius: @radius;

border-radius: @radius;

}

// 使用已定义的样式选择器

#header {

.borderRadius(10px); // 把 10px 作为参数传递给样式选择器

}

.btn {

.borderRadius(3px);// // 把 3px 作为参数传递给样式选择器

}

#header {

-moz-border-radius: 10px;

-webkit-border-radius: 10px;

border-radius: 10px;

}

.btn {

-moz-border-radius: 3px;

-webkit-border-radius: 3px;

border-radius: 3px;

}

像 JavaScript 中 arguments一样,Mixins 也有这样一个变量:@arguments。@arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。

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

}

#header {

-moz-box-shadow: 2px 2px 3px #FF36;

-webkit-box-shadow: 2px 2px 3px #FF36;

box-shadow: 2px 2px 3px #FF36;

}

当我们拥有了大量选择器的时候,特别是团队协同开发时,如何保证选择器之间重名问题?

采用了命名空间的方法来避免重名问题

#mynamespace {

.home {...}

.user {...}

}

这样我们就定义了一个名为 mynamespace 的命名空间,如果我们要复用 user 这个选择器的时候,我们只需要在需要混入这个选择器的地方这样使用就可以了。#mynamespace > .user。

#bundle {

.button () {

display: block;

border: 1px solid black;

background-color: grey;

&:hover { background-color: white

}

}

.tab { ... }

.citation { ... }

}

引入.button

#header a {

color: orange;

#bundle > .button;

}

嵌套的规则

<div id="home">

<div id="top">top</div>

<div id="center">

<div id="left">left</div>

<div id="right">right</div>

</div>

</div>

#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%;

}

}

}

#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%;

}

对伪元素

a {

color: red;

text-decoration: none;

&:hover {// 有 & 时解析的是同一个元素或此元素的伪类,没有 & 解析是后代元素

color: black;

text-decoration: underline;

}

}

a {

color: red;

text-decoration: none;

}

a:hover {

color: black;

text-decoration: underline;

}

原文来自:简书/dadadahui

时间: 2024-11-06 08:20:56

详解less中的变量的相关文章

【Oracle】详解Oracle中NLS_LANG变量的使用

目录结构: contents structure [-] 关于NLS_LANG参数 NSL_LANG常用的值 在MS-DOS模式和Batch模式中设置NLS_LANG 注册表中NLS_LANG和系统环境变量中的NLS_LANG 参考文章 1,关于NLS_LANG参数 Oracle provides Globalization Support that enables users to interact with a database in their own language, as defin

详解Webwork中Action 调用的方法

详解Webwork中Action 调用的方法 从三方面介绍webwork action调用相关知识: 1.Webwork 获取和包装 web 参数 2.这部分框架类关系 3.DefaultActionProxyFactory.DefaultActionProxy.DefaultActionInvocation 终于要开始 webwork 核心业务类的总结,webwork 通过对客户端传递的 web 参数重新包装,进行执行业务 Action 类,并反馈执行结果,本篇源码分析对应下图 WebWork

详解JMeter函数和变量(转载)

详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var3)} 其中,__functionName匹配被调用的函数名称.用圆括号包含函数的形参,例如${__time(YMD)},不同函数要求的参数也不同.有些JMeter函数不要求参数,则可以不使用圆括号,例如${__threadNum}. 如果一个函数的参数中包含逗号,那么必须对逗号进行转义(使用"\&

详解Objective-C中委托和协议

Objective-C委托和协议本没有任何关系,协议如前所述,就是起到C++中纯虚类的作用,对于“委托”则和协议没有关系,只是我们经常利用协议还实现委托的机制,其实不用协议也完全可以实现委托. AD:[活动]Web和APP兼容性实战 Win10训练营免费报名 Objective-C中委托和协议是本文要介绍的内容,委托和协议是两个概念,协议实际上相当于C++中的纯虚类的概念,只定义并只能由其它类来实现.而委托类似于Java中的接口.(Objective-C实现委托这种机制是利用协议来实现的,这种说

详解C中volatile关键字

volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化.). 例如: volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i

详解JMeter函数和变量

详解JMeter函数和变量(1) JMeter函数可以被认为是某种特殊的变量,它们可以被采样器或者其他测试元件所引用.函数调用的语法如下: ${__functionName(var1,var2,var3)} 其中,__functionName匹配被调用的函数名称.用圆括号包含函数的形参,例如${__time(YMD)},不同函数要求的参数也不同.有些JMeter函数不要求参数,则可以不使用圆括号,例如${__threadNum}. 如果一个函数的参数中包含逗号,那么必须对逗号进行转义(使用"\&

【转】详解C#中的反射

原帖链接点这里:详解C#中的反射 反射(Reflection) 2008年01月02日 星期三 11:21 两个现实中的例子: 1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到的呢?B超是B型超声波,它可以透过肚皮通过向你体内发射B型超声波,当超声波遇到内脏壁的时候就会产生一定的“回音”反射,然后把“回音”进行处理就可以显示出内脏的情况了(我不是医生也不是声学专家,不知说得是否准确^_^). 2.地球内部结构:地球的内部结构大体可以分为三层:地壳.地

详解js中typeof、instanceof与constructor

详解js中typeof.instanceof与constructor typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.语法为typeof(data) 或 typeof data instanceof则为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型 语法为 o instanceof A 以下为综合实例: 1<script type

详解Java中代码块和继承

本文发表于个人GitHub主页,原文请移步详解Java中代码块和继承 阅读. 概念 1.代码块 局部代码块 用于限定变量生命周期,及早释放,提高内存利用率 静态代码块 对类的数据进行初始化,仅仅只执行一次. 构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前,首先执行构造代码块. 2.继承 继承是已有的类中派生出新的类,新的类能够吸收已有类的数据属性和行为,并能扩展新的功能. 代码块的执行顺序 public class Test {    public String name