`
DBear
  • 浏览: 228796 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类

LESS —— 动态样式语言 学习纪要

 
阅读更多

学习LESS源于一次分享的要求。之前一直没有使用,是因为使用这种以“敏捷开发”为目标而诞生的语言在一开始总是需要一些时间来变换思维,以及随之而来的“如何让CSS也具有结构性”的思考负担。其实这些思考都是应该有的,只是在项目时间比较紧的时候,往往更希望通过“加快打字速度”来提高效率。。。。

 

言归正传。。。LESS的语法和使用在中国社区已经描述的很清楚了,所以我只从自己学习使用的角度记录些需要注意的问题。

 

客户端使用

 

1. 直接打开html文件,IE下报“SCRIPT5:拒绝访问”的错误

 

按照手册中的说法创建完相应的less、html文件,加载完js,在firefox下直接打开html文件,运行正常;但是在IE下打开,则会报“SCRIPT5: 拒绝访问。   less-1.1.3.min.js ”,这个是跨域错误,file协议的跨域判断和http不一样,而没标准规定各个浏览器的file协议怎么算同域。解决方法就是把文件部署在服务器上,用http访问。。。

 

 

2. 页面顶部出现大大的“参数无效”红色提示

 

好好检查less文件吧,有地方语法写错了。也不知道这种风格的提示好还是不好,虽然够醒目,但是未免太霸气了点儿。。。

 

3. “混合”在浏览器兼容上的应用

 

这个是LESS中我比较喜欢的一个语法。它使得我们可以将一些通用的属性归集到一个class中,然后在不同的地方调用这个class。在我的某个网页中,我用这个语法首先解决的一个问题就是“拥有float属性的元素的margin在IE浏览器下比其它浏览器多2px”的兼容问题。兼容margin代码如下:

 

 

.margin (@top:10px, @right:10px, @bottom:10px, @left:10px) {
    margin: @arguments;
   *margin-top: @top - 2px; /* IE7 and below */ 
   *margin-right: @right - 2px; /* IE7 and below */ 
   *margin-left: @left - 2px; /* IE7 and below */ 
   *margin-bottom: @bottom - 2px; /* IE7 and below */
}
 

 

这样我就不用在每次给元素增加margin属性的时候都需要加一大串的兼容代码。如:

 

 

.red-button {
     background-color: @my_red; 
     .button; 
     .margin();
}

.medium-red-button { 
     background-color: @my_red; 
     .button(100px, 40px, 10px, 5px); 
     .margin(15px, 15px, 15px, 15px);
}

.big-red-button { 
     background-color: @my_red; 
     .button(100px, 40px, 10px, 5px); 
     .margin(15px, 20px);
}

 

 

    写这段的时候出现过一个问题,因为使用@arguments来避免单独处理每一个参数,所以起初是以为可以直接使用.margin;来调用该属性,但是没有生效,后来改成了.margin();就可以了。 但是如果不使用@arguments,则可以直接用.margin; 这种调用方式。

 

    另外我上面的top,right的兼容代码这些都是分开写的,因为我还没在手册里看到如果和表达式罗列的写在一起,比如这样。 

margin: (@top-2px) @right @bottom @left;

 

    翻到后面,发现不是人家没罗列,是我写错了,如果要在复合属性中做计算,运算符号与变量之间要保留一个空格,并用空号包起。即

 

margin: (@top - 2) @right @bottom @left;
 

    切记!!!

 

4. “模式匹配”的惯性思维

 

    第一次看模式匹配的语法,想当然的把switch case的思维惯用上了,写出了如下样子的代码

 

 

.mixin (press, @color) {
  background: darken(@color, 10%);
}
.mixin (hover, @color) {
  background: lighten(@color, 10%);
}
.mixin (@_, @color) {
  background: @color;
}

 
   想象的结果是当按钮是press状态时是加深背景色,hover状态时是淡化背景色,其余情况都是正常背景色。真实结果明眼人都知道了,所有状态都是正常背景色。。。原因很简单,参数匹配成功后,下面的匹配仍然继续进行,且@_接受任何参数,最后背景色就都被这个设置覆盖了。正常的switch case是有break强制停止匹配的,LESS中没有,所以带@_参数的类在LESS语法中应该起到的是一个对公用属性的统一配置的作用。

 

 

5. “嵌套规则”挺好用

 

   写CSS的时候最郁闷的就是为了保证属性不冲突,要从父元素到子元素的写一串儿选择器,“嵌套规则”解决了这个问题

 

 

#header        { color: black;
  .navigation  { font-size: 12px }
  .logo        { width: 300px;
    &:hover    { text-decoration: none }
  }
}

 

 

 

6. 再也不用写一堆url前缀啦~~

 

   LESS的“字符串插值”功能允许将变量插入字符串中,这个最直接的应用当然就是image url的定义了。如果在配合之前的几种语法,那些应用image sprite中图标定义也会简单很多。

 

   汗,我写到这里以后,本来打算写一段实例代码,比如

 

 

@base-url: "http://img.t.sinajs.cn/t4/style/images/common";
@icon-image-url: "ico.png?id=1341302813656";

.icon (@index) {
     background-image: url("@{base-url}/@{icon-image-url}");
     background-position:  0px (0 - (10 * @index));

}

.icon (@_) {
    width: 50px;
    height: 50px;
}


#icon1 {
    .icon (1);
}

#icon2 {
    .icon (2);
}

#icon3 {
    .icon (3);
}

 

 

    结果实际输出的css让我大为“惊喜”

 

 

#icon3 {
    background-image: url("http://localhost:8080/dont_commit/http://img.t.sinajs.cn/t4/style/images/common/ico.png?id=1341302813656");
    background-position: 0 -130px;
    height: 50px;
    width: 50px;
}
 

 

    LESS似乎给我的url前面强行增加了个root,之后我改成../这种相对路径也是这样,我想这应该是less的一个bug吧,一会儿去看看有没有解决方法。

 

 

7. LESS的浏览器兼容性

 

    LESS的js本身目前来看是对各浏览器都兼容的,但是考虑到LESS的本质——就是把一种格式的语言解析正常规CSS,应该算是直译,而没有顺路增加些浏览器的兼容hack代码,因此,如果你的代码里出现了一些只有某些浏览器支持的属性,那出来的CSS代码依然只支持那些浏览器。

 

   比如,LESS提供的色彩函数:fadein(@color, 10%) 这个最后生成的是 rgba格式的色彩,IE6不支持,所以这个函数在IE6下并没有效果。

 

 

8. LESS生成的CSS与一般CSS文件的优先级

 

   实验代码时,在普通CSS文件和LESS文件中同时定义了两个相同的选择器,只是属性各有不同;并把CSS放在LESS之后加载(有两种方式:1. 在LESS的最后@import 2. 在html中直接在LESS之后引用)。但是输出到浏览器上以后,对于使用@import的,此段CSS被自动调到了代码首部;对于html直接引用的,也变成在LESS之前引入。最后的结果就是CSS中的定义被LESS中的覆盖。因此,在这里先冒昧的下个结论:LESS生成的CSS优先级高于一般CSS文件。

 

 

 

 

问题和注意的话暂时我就总结出来这么多,其余的LESS提供的一些自带函数,以及引入javascript表达式也是很便利的功能。另外,我觉得在平时的开发中,最好不要让LESS成为开发思想的包袱,不要写什么都要花一天想想怎么转成LESS代码,LESS就是一个工具,需要的时候用,不需要的时候舍,这样才比较健康。

 

 


分享到:
评论

相关推荐

    LESS 动态样式语言

    LESS 一种动态样式语言

    less简单实践——公交车牌

    less简单实践——公交车牌less简单实践——公交车牌less简单实践——公交车牌less简单实践——公交车牌less简单实践——公交车牌

    LESS « 一种动态样式语言 - LESS中国官网

    LESS « 一种动态样式语言 - LESS中国官网

    Less css框架1.3

    Less,一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。 极大的减少...

    前端学习项目 HTML CSS Less H5 .zip

    前端学习项目 HTML CSS Less H5 前端学习项目 HTML CSS Less H5 前端学习项目 HTML CSS Less H5 前端学习项目 HTML CSS Less H5 前端学习项目 HTML CSS Less H5 前端学习项目 HTML CSS Less H5 前端学习项目 ...

    less.js用于less语言解析

    less.js是前端界面使用less语言时必用的解析工具包,用于对less语言的响应。

    前端学习笔记-less

    前端学习笔记——less

    基于LESS的样式工具库EST.zip

    EST(ECOM Styling Toolkit)是一个基于 LESS 的样式工具库,帮助您更轻松地书写 LESS 代码。EST提供了一系列方便 快捷的 mixin,只在调用时才输出代码。est 不希望提供直接给 HTML 调用的类名,用「样式类...

    CSS高效开发实战——CSS 3、LESS、SASS、Bootstrap、Foundation

    《CSS高效开发实战——CSS 3、LESS、SASS、Bootstrap、Foundation》内容精练、重点突出、实例丰富、讲解通俗,是广大CSS设计人员和前端开发人员必备的参考书,同时也非常适合大中专院校师生学习阅读,也可作为高等...

    lesscss-python 是 Less CSS 的 Python 版本.rar

    LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护。 LESSCSS可以在多种语言、环境中使用,包括浏览器...

    less_的介绍

    LESSCSS是一种动态样式语言,属于CSS预处理语言的一种.它使用类似CSS的语法,为CSS的赋予了动态语言的特性:变量、继承、运算、函数等,更方便CSS的编写和维护。css预处理就是通过编写lesscss通过处理转化成css

    Less.js:更少,动态样式表语言-开源

    这是Less(语言)和Less.js(将您的Less样式转换为CSS样式JavaScript工具)的官方文档。 因为Less看起来就像CSS,所以学习起来很容易。 Less不仅为CSS语言增加了一些方便的补充,这也是可以如此快速地学习它的原因...

    动态的样式语言less语法详解之混合属性

    主要介绍了动态的样式语言less语法详解之混合属性,需要的朋友可以参考下

    reset.less 前端样式常用文件

    前端样式常用的reset

    结合手工注入编写一个SQL盲注脚本——以SQLi-Labs less16为例.doc

    结合手工注入编写一个SQL盲注脚本——以SQLi-Labs less16为例.doc

    Ruby-LessRailsRails资产pipeline的动态样式表语言

    Less Rails - Rails资产pipeline的动态样式表语言

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

    这样的设计使得学习 Less 很轻松,而且你可以在任何时候回退到 CSS。less文件是以less作为文件后缀名,HTML引用时可以像css那样引用,如下: <link rel="stylesheet/less" type="text/css" href="styles.less"&gt...

    LessCss.js

    LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护。 LESSCSS可以在多种语言、环境中使用,包括浏览器...

    less让css具有动态语言的特性

    Less 是一种样式语言,它将 css 赋予了动态语言的特性,如变量、 继承、 运算、 函数。less 既可以在客户端上运行(支持IE 6+, Webkit, Firefox),也可以借助 Node.js 或者 Rhino 在服务端运行。 Less 做为 css 的...

Global site tag (gtag.js) - Google Analytics