less让css具备动态性語言的特点

2021-03-11 15:21 jianzhan
Less 是1种款式語言,它将 css 授予了动态性語言的特点,如自变量、 承继、 运算、 涵数。less 既能够在顾客端上运作(适用IE 6+, Webkit, Firefox),还可以依靠 Node.js 或 Rhino 在服务端运作。
Less 作为 css 的1种方式的拓展,它并沒有阉割 css 的作用,而是在现有的 css 英语的语法上,加上了许多附加的作用,因此针对前端开发开发设计人员来所,学习培训 less 是1件易如反掌的事儿。大家先看下用 less 写的1段 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);
}

下面大家就1起来学习培训 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 款式文档1定要在 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 中的自变量为彻底的“变量定义”,因此只能界定1次。
2、混和
混和便是界定1个 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 彻底能够开展繁杂4则运算,一样的复合型运算也沒有难题。
6、Color 涵数
Less 出示了1系列的色调运算涵数。色调会先被转换成 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, ⑴0); // 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 出示了1组便捷的数学课涵数,你可使用它们解决1些数据种类的值。

拷贝编码
编码以下:

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

假如你想将1个值转换为百分比,你可使用 percentage 涵数:

拷贝编码
编码以下:

percentage(0.5); // returns 50%

8、取名室内空间
有时,你将会以便更好机构 css 或单纯性是以便更好的封裝,将1些自变量或混和控制模块装包起来,你能够像下面这样在 #form 中界定1些特性集以后能够反复应用:

拷贝编码
编码以下:

#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 的情况下全自动过虑掉。
最终 less 也有1些别的的特点就不详细介绍了,大伙儿能够去LESS官方网站看下。