`
DBear
  • 浏览: 231088 次
  • 性别: 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是一种动态样式语言,它扩展了CSS的功能,为开发者提供了变量、嵌套规则、混合(Mixins)、运算以及函数等高级特性。通过这些功能,LESS使样式表更加模块化、可...

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

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

    less简单实践——公交车牌

    首先,Less是一种动态样式语言,它允许我们使用变量、嵌套规则、运算符、函数等高级特性,这些在标准CSS中是不支持的。这使得代码更易于维护,减少了重复,并提高了可读性。 **变量(Variables)**:在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的样式工具库EST.zip

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

    Less学习笔记

    在Web开发领域,Less是一种流行的CSS预处理器,它扩展了CSS语言,引入了许多编程特性,如变量、嵌套规则、运算符、函数等,使得CSS的编写更加简洁、模块化和可维护。这篇笔记将深入探讨Less的基本概念、功能以及如何...

    前端学习笔记-less

    在前端开发领域,LESS(层叠样式表,Low-level Style Sheets)是一种预处理器,它扩展了CSS语言,增加了变量、嵌套规则、运算符、函数等特性,使得CSS编写更加简洁、可维护性更强。本笔记将深入探讨LESS的重要概念、...

    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语法详解之变量与extend

    《深入理解Less动态样式语言:变量与extend》 Less,作为一种动态样式语言,是对CSS的扩展,它在保持与CSS语法兼容性的同时,引入了一系列增强功能。这使得开发者能够更高效地编写和维护样式表。在本文中,我们将...

    less语法小结-源代码+注释.rar

    《Less语法小结——深入解析与实践》 在前端开发领域,Less是一种强大的CSS预处理器,它扩展了CSS的功能,让样式表编写更加简洁、高效。本文将基于“less语法小结-源代码+注释.rar”这个压缩包中的内容,深入探讨...

    less_的介绍

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

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

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

    less_scss_lesssass_

    LESS(层叠样式表扩展)是克里斯·艾普顿(Alexis Sellier)于2009年创建的一种动态样式语言,它引入了变量、嵌套规则、运算符、函数等特性,使得CSS更易维护和扩展。下面是一些LESS的关键知识点: 1. **变量**:...

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

    LESS是一种动态的样式语言,它扩展了CSS的功能,使得编写样式表更加高效和容易。在LESS中,混合属性(Mixin)是一个重要的特性,它允许我们将一组样式属性封装起来,当需要使用这些样式时,通过简单地调用这个“混合...

    Learn More Study Less中文版

    《Learn More Study Less中文版》是一本致力于提高学习效率的书籍,作者基于个人的学习经验以及大量研究,提出了一种高效的学习方法——整体性学习。整体性学习强调将新知识与已有的经验、知识结构相联系,通过多种...

    less.js, less 转 css 工具

    2. **动态特性**: 由于 `less.js` 在客户端运行,它可以动态响应 Less 变量的改变,这意味着用户可以在浏览器中动态调整主题或颜色方案,而无需刷新页面。 3. **简化 CSS 书写**: Less 允许使用变量、嵌套选择器、...

Global site tag (gtag.js) - Google Analytics