博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【css】动态的 css——less
阅读量:6222 次
发布时间:2019-06-21

本文共 5751 字,大约阅读时间需要 19 分钟。

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 库。

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

要注意外部引进样式的方法有所改变,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 @colordarken(@color, 10%);      // return a color which is 10% *darker* than @colorsaturate(@color, 10%);    // return a color 10% *more* saturated than @colordesaturate(@color, 10%);  // return a color 10% *less* saturated than @colorfadein(@color, 10%);      // return a color 10% *less* transparent than @colorfadeout(@color, 10%);     // return a color 10% *more* transparent than @colorfade(@color, 50%);        // return @color with 50% transparencyspin(@color, 10);         // return a color with a 10 degree larger in hue than @colorspin(@color, -10);        // return a color with a 10 degree smaller hue than @colormix(@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 @colorsaturation(@color); // returns the `saturation` channel of @colorlightness(@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 2ceil(2.4);   // returns 3floor(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 的时候自动过滤掉。

 

最后 less 还有一些其他的特性就不介绍了,大家可以去上看下。

转载地址:http://jmeja.baihongyu.com/

你可能感兴趣的文章
Journal - 高级架构 Opencart 主题模板 ABC-0016-04
查看>>
vsftpd服务详解
查看>>
Python13_day3
查看>>
UESTC 2014 Summer Training #16 Div.2
查看>>
使用yum工具下载rpm包
查看>>
NIO入门系列之第7章:文件锁定
查看>>
未来的茫然,或是计划
查看>>
我的友情链接
查看>>
kill
查看>>
项目范围管理论文的提纲
查看>>
Linux基础
查看>>
有的放矢,在性能测试中使用的 10 个微观指标
查看>>
如何修改wordpress博客默认管理员用户名称
查看>>
centos7部署phpipam(ip管理系统)
查看>>
c# 基础任务1
查看>>
获取root权限
查看>>
每周一荐:TotalCommand的文件夹同步功能
查看>>
day2-Samba
查看>>
【转向Javascript系列】深入理解Generators
查看>>
大数据概述
查看>>