less css 框架介绍

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Document</title></head>

<body id="ibm-com" class="v17" aria-busy="false">

<h2 id="major1">简介</h2><p>CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide Web)中。HTML 主要负责文档结构的定义,CSS 负责文档表现形式或样式的定义。</p><p>作为一门标记性语言,CSS 的语法相对简单,对使用者的要求较低,但同时也带来一些问题:CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码,造成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。</p><div class="ibm-alternate-rule"><hr></div><p class="ibm-ind-link ibm-back-to-top"><a href="http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/#ibm-pcon" class="ibm-anchor-up-link"> </a></p><h2 id="major2">LESS 原理及使用方式</h2><p>本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。下面是一个简单的例子:</p><h5 id="listing1">清单 1. LESS 文件</h5><div class="codesection"><pre class="displaycode"> @color: #4D926F;

#header {  color: @color; } h2 {  color: @color; }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing2">清单 2. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #header {  color: #4D926F; } h2 {  color: #4D926F; }</pre></div><p>从上面的例子可以看出,学习 LESS 非常容易,只要你了解 CSS 基础就可以很容易上手。</p><p>LESS 可以直接在客户端使用,也可以在服务器端使用。在实际项目开发中,我们更推荐使用第三种方式,将 LESS 文件编译生成静态 CSS 文件,并在 HTML 文档中应用。</p><h3 id="minor2.1">客户端</h3><p>我们可以直接在客户端使用 .less(LESS 源文件),只需要从 <a href="http://lesscss.org/">http://lesscss.org</a>下载 less.js 文件,然后在我们需要引入 LESS 源文件的 HTML 中加入如下代码:</p><div class="codesection"><pre class="displaycode">&lt;link rel="stylesheet/less" type="text/css" href="styles.less"&gt;</pre></div><p>LESS 源文件的引入方式与标准 CSS 文件引入方式一样:</p><div class="codesection"><pre class="displaycode">&lt;link rel="stylesheet/less" type="text/css" href="styles.less"&gt;</pre></div><p>需要注意的是:在引入 .less 文件时,rel 属性要设置为“stylesheet/less”。还有更重要的一点需要注意的是:LESS 源文件一定要在 less.js 引入之前引入,这样才能保证 LESS 源文件正确编译解析。</p><h3 id="minor2.2">服务器端</h3><p>LESS 在服务器端的使用主要是借助于 LESS 的编译器,将 LESS 源文件编译生成最终的 CSS 文件,目前常用的方式是利用 node 的包管理器 (npm) 安装 LESS,安装成功后就可以在 node 环境中对 LESS 源文件进行编译。</p><p>在项目开发初期,我们无论采用客户端还是服务器端的用法,我们都需要想办法将我们要用到的 CSS 或 LESS 文件引入到我们的 HTML 页面或是桥接文件中,LESS 提供了一个我们很熟悉的功能— Importing。我们可以通过这个关键字引入我们需要的 .less 或 .css 文件。 如:</p><p>@import “variables.less”;</p><p>.less 文件也可以省略后缀名,像这样:</p><p>@import “variables”;</p><p>引入 CSS 同 LESS 文件一样,只是 .css 后缀名不能省略。</p><h3 id="minor2.3">使用编译生成的静态 CSS 文件</h3><p>我们可以通过 LESS 的编译器,将 LESS 文件编译成为 CSS 文件,在 HTML 文章中引入使用。这里要强调的一点,LESS 是完全兼容 CSS 语法的,也就是说,我们可以将标准的 CSS 文件直接改成 .less 格式,LESS 编译器可以完全识别。</p><div class="ibm-alternate-rule"><hr></div><p class="ibm-ind-link ibm-back-to-top"><a href="http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/#ibm-pcon" class="ibm-anchor-up-link"> </a></p><h2 id="major3">语法</h2><h3 id="minor3.1">变量</h3><p>LESS 允许开发者自定义变量,变量可以在全局样式中使用,变量使得样式修改起来更加简单。</p><p>我们可以从下面的代码了解变量的使用及作用:</p><h5 id="listing3">清单 3 LESS 文件</h5><div class="codesection"><pre class="displaycode"> @border-color : #b5bcc7;

.mythemes tableBorder{   border : 1px solid @border-color; }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing4">清单 4. CSS 文件</h5><div class="codesection"><pre class="displaycode"> .mythemes tableBorder {  border: 1px solid #b5bcc7; }</pre></div><p>从上面的代码中我们可以看出,变量是 VALUE(值)级别的复用,可以将相同的值定义成变量统一管理起来。</p><p>该特性适用于定义主题,我们可以将背景颜色、字体颜色、边框属性等常规样式进行统一定义,这样不同的主题只需要定义不同的变量文件就可以了。当然该特性也同样适用于 CSS RESET(重置样式表),在 Web 开发中,我们往往需要屏蔽浏览器默认的样式行为而需要重新定义样式表来覆盖浏览器的默认行为,这里可以使用 LESS 的变量特性,这样就可以在不同的项目间重用样式表,我们仅需要在不同的项目样式表中,根据需求重新给变量赋值即可。</p><p>LESS 中的变量和其他编程语言一样,可以实现值的复用,同样它也有生命周期,也就是 Scope(变量范围,开发人员惯称之为作用域),简单的讲就是局部变量还是全局变量的概念,查找变量的顺序是先在局部定义中找,如果找不到,则查找上级定义,直至全局。下面我们通过一个简单的例子来解释 Scope。</p><h5 id="listing5">清单 5. LESS 文件</h5><div class="codesection"><pre class="displaycode"> @width : 20px; #homeDiv {   @width : 30px;   #centerDiv{       width : @width;// 此处应该取最近定义的变量 width 的值 30px              } } #leftDiv {     width : @width; // 此处应该取最上面定义的变量 width 的值 20px

}</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing6">清单 6. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #homeDiv #centerDiv {  width: 30px; } #leftDiv {  width: 20px; }</pre></div><h3 id="minor3.2">Mixins(混入)</h3><p>Mixins(混入)功能对用开发者来说并不陌生,很多动态语言都支持 Mixins(混入)特性,它是多重继承的一种实现,在 LESS 中,混入是指在一个 CLASS 中引入另外一个已经定义的 CLASS,就像在当前 CLASS 中增加一个属性一样。</p><p>我们先简单看一下 Mixins 在 LESS 中的使用:</p><h5 id="listing7">清单 7. LESS 文件</h5><div class="codesection"><pre class="displaycode">// 定义一个样式选择器 .roundedCorners(@radius:5px) { -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } // 在另外的样式选择器中使用 #header { .roundedCorners; } #footer { .roundedCorners(10px); }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing8">清单 8. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #header { -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; } #footer { -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }</pre></div><p>从上面的代码我们可以看出:Mixins 其实是一种嵌套,它允许将一个类嵌入到另外一个类中使用,被嵌入的类也可以称作变量,简单的讲,Mixins 其实是规则级别的复用。</p><p>Mixins 还有一种形式叫做 Parametric Mixins(混入参数),LESS 也支持这一特性:</p><h5 id="listing9">清单 9. LESS 文件</h5><div class="codesection"><pre class="displaycode">// 定义一个样式选择器 .borderRadius(@radius){ -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } // 使用已定义的样式选择器 #header { .borderRadius(10px); // 把 10px 作为参数传递给样式选择器 } .btn { .borderRadius(3px);// // 把 3px 作为参数传递给样式选择器

}</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing10">清单 10. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #header { -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; } .btn { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }</pre></div><p>我们还可以给 Mixins 的参数定义一人默认值,如</p><h5 id="listing11">清单 11. LESS 文件</h5><div class="codesection"><pre class="displaycode">.borderRadius(@radius:5px){ -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } .btn { .borderRadius; }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing12">清单 12. CSS 文件</h5><div class="codesection"><pre class="displaycode"> .btn { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }</pre></div><p>像 JavaScript 中 <strong>arguments</strong>一样,Mixins 也有这样一个变量:<strong>@arguments</strong>。@arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。</p><h5 id="listing13">清单 13. LESS 文件</h5><div class="codesection"><pre class="displaycode"> .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); }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing14">清单 14. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #header { -moz-box-shadow: 2px 2px 3px #FF36; -webkit-box-shadow: 2px 2px 3px #FF36; box-shadow: 2px 2px 3px #FF36; }</pre></div><p>Mixins 是 LESS 中很重要的特性之一,我们这里也写了很多例子,看到这些例子你是否会有这样的疑问:当我们拥有了大量选择器的时候,特别是团队协同开发时,如何保证选择器之间重名问题?如果你是 java 程序员或 C++ 程序员,我猜你肯定会想到命名空间 Namespaces,LESS 也采用了命名空间的方法来避免重名问题,于是乎 LESS 在 mixins 的基础上扩展了一下,看下面这样一段代码:</p><h5 id="listing15">清单 15. LESS 文件</h5><div class="codesection"><pre class="displaycode"> #mynamespace { .home {...} .user {...} }</pre></div><p>这样我们就定义了一个名为 mynamespace 的命名空间,如果我们要复用 user 这个选择器的时候,我们只需要在需要混入这个选择器的地方这样使用就可以了。#mynamespace &gt; .user。</p><h3 id="minor3.3">嵌套的规则</h3><p>在我们书写标准 CSS 的时候,遇到多层的元素嵌套这种情况时,我们要么采用从外到内的选择器嵌套定义,要么采用给特定元素加 CLASS 或 ID 的方式。在 LESS 中我们可以这样写:</p><h5 id="listing16">清单 16. HTML 片段</h5><div class="codesection"><pre class="displaycode"> &lt;div id="home"&gt; &lt;div id="top"&gt;top&lt;/div&gt; &lt;div id="center"&gt; &lt;div id="left"&gt;left&lt;/div&gt; &lt;div id="right"&gt;right&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;</pre></div><h5 id="listing17">清单 17. LESS 文件</h5><div class="codesection"><pre class="displaycode"> #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%;        }    } }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing18">清单 18. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #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%; }</pre></div><p>从上面的代码中我们可以看出,LESS 的嵌套规则的写法是 HTML 中的 DOM 结构相对应的,这样使我们的样式表书写更加简洁和更好的可读性。同时,嵌套规则使得对伪元素的操作更为方便。</p><h5 id="listing19">清单 19. LESS 文件</h5><div class="codesection"><pre class="displaycode">a { color: red; text-decoration: none; &amp;:hover {// 有 &amp; 时解析的是同一个元素或此元素的伪类,没有 &amp; 解析是后代元素  color: black;  text-decoration: underline; } }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing20">清单 20. CSS 文件</h5><div class="codesection"><pre class="displaycode"> a { color: red; text-decoration: none; } a:hover { color: black; text-decoration: underline; }</pre></div><h3 id="minor3.4">运算及函数</h3><p>在我们的 CSS 中充斥着大量的数值型的 value,比如 color、padding、margin 等,这些数值之间在某些情况下是有着一定关系的,那么我们怎样利用 LESS 来组织我们这些数值之间的关系呢?我们来看这段代码:</p><h5 id="listing21">清单 21 . LESS 文件</h5><div class="codesection"><pre class="displaycode"> @init: #111111; @transition: @init*2; .switchColor { color: @transition; }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="listing22">清单 22. CSS 文件</h5><div class="codesection"><pre class="displaycode"> .switchColor {  color: #222222; }</pre></div><p>上面的例子中使用 LESS 的 operation 是 特性,其实简单的讲,就是对数值型的 value(数字、颜色、变量等)进行加减乘除四则运算。同时 LESS 还有一个专门针对 color 的操作提供一组函数。下面是 LESS 提供的针对颜色操作的函数列表:</p><div class="codesection"><pre class="displaycode"> 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 spin(@color, 10); // return a color with a 10 degree larger in hue than @color spin(@color, -10); // return a color with a 10 degree smaller hue than @color</pre></div><p>PS: 上述代码引自 LESS CSS 官方网站,详情请见 <a href="http://lesscss.org/#-color-functions">http://lesscss.org/#-color-functions</a></p><p>使用这些函数和 JavaScript 中使用函数一样。</p><h5 id="listing23">清单 23 LESS 文件</h5><div class="codesection"><pre class="displaycode">init: #f04615; #body {  background-color: fadein(@init, 10%); }</pre></div><p>经过编译生成的 CSS 文件如下:</p><h5 id="N101AF">清单 24. CSS 文件</h5><div class="codesection"><pre class="displaycode"> #body {  background-color: #f04615; }</pre></div><p>从上面的例子我们可以发现,这组函数像极了 JavaScript 中的函数,它可以被调用和传递参数。这些函数的主要作用是提供颜色变换的功能,先把颜色转换成 HSL 色,然后在此基础上进行操作,LESS 还提供了获取颜色值的方法,在这里就不举例说明了。</p><p>LESS 提供的运算及函数特性适用于实现页面组件特性,比如组件切换时的渐入渐出。</p><h3 id="minor3.5">Comments(注释)</h3><p>适当的注释是保证代码可读性的必要手段,LESS 对注释也提供了支持,主要有两种方式:单行注释和多行注释,这与 JavaScript 中的注释方法一样,我们这里不做详细的说明,只强调一点:LESS 中单行注释 (// 单行注释 ) 是不能显示在编译后的 CSS 中,所以如果你的注释是针对样式说明的请使用多行注释。</p><h3 id="minor3.6">LESS VS SASS</h3><p>同类框架还有 SASS : <a href="http://sass-lang.com/">http://sass-lang.com/</a>, 与 LESS 相比,两者都属于 CSS 预处理器,功能上大同小异,都是使用类似程序式语言的方式书写 CSS, 都具有变量、混入、嵌套、继承等特性,最终目的都是方便 CSS 的书写及维护。</p><p>LESS 和 SASS 互相促进互相影响,相比之下 LESS 更接近 CSS 语法,更多两者之间的比较,请参考这篇帖子:<a href="https://gist.github.com/674726">https://gist.github.com/674726</a>。</p><div class="ibm-alternate-rule"><hr></div><p class="ibm-ind-link ibm-back-to-top"><a href="http://www.ibm.com/developerworks/cn/web/1207_zhaoch_lesscss/#ibm-pcon" class="ibm-anchor-up-link"> </a></p></body></html>
时间: 2024-08-24 06:43:36

less css 框架介绍的相关文章

7个常见Javascript框架介绍

设计开发中的“框架”指一套包含工具.函数库.约定,以及尝试从常用任务中抽象出可以复用的通用模块,目标是使设计师和开发人员把重点放在任务项目所特有的方面,避免重复开发.通俗的讲,框架就是最常用的javascript框架和Web应用框架,当然,还有CSS框架. 下面我们介绍一些比较常见的Javascript框架,高手跳过,才学JS和ajax的朋友则应该好好了解一下. jQuery jquery是一个快速.简洁的JavaScript框架,帮助你简化查询DOM对象,处理事件,制作动画,和处理Ajax交互

27款经典的CSS框架

利用 CSS 框架,可以简化你的工作,提高工作效率.CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版.网格布局.表单样式.通用规则等代码块.下面给你推荐了27款优秀的CSS框架,你可以选用. 1. 960gs 960 像素的页面宽度似乎成为了一种设计标准,在当前各种分辨率下,能够很好地展现网页内容.提供较为常用的尺寸来简化网页设计过程,使工作简单高效. 2. YUI 2: Grids CSS 芒果曾经介绍过由雅虎开发小组推出的 YUI,而这个 YUI Grids CSS

如何在程序开发项目中选择合适的 JavaScript 框架,节省时间和成本的9款极佳的JavaScript框架介绍

从技术上来看,iOS,Android 和 Windows Phone 上的移动应用是使用不同的程序语言开发的,iOS 应用使用 Objective-C,Android 应用使用 Java,而 Windows Phone 应用使用 .NET. .随着 JavaScript,CSS 和 HTML 知识技能的提升,相信你也可以构建一个超赞的移动应用.在这篇博客里,我们将会介绍一些极好的 JavaScript 移动应用程序开发框架. 说到网络开发,就不得不说 JavaScript,这是一款很有前途的程序

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

你应该知道的9个优秀的CSS框架

前端开发是一项非常繁琐的工作,你不仅需要拥有和别人不一样的审美观和设计观,而且需要了解诸如HTML.CSS.JavaScript等错综复杂的技术,因此选择一些优秀的CSS框架或许可以帮助你大大提高工作效率.本文向你推荐了9个还不错的CSS框架,希望对你有所帮助. 1.Twitter开源杰作 – Bootstrap Bootstrap是一款由Twitter推出的开源CSS框架,它的核心是由一系列用于Web前端开发的工具包组成.Bootstrap基于HTML.CSS和JavaScript,是一款非常

胡说css框架

在学习CSS框架之前,为了在页面得到想要的样式,总是要不厌其烦的去写css,尤其在写一些在样式中大部分都相同,只有微小差别的CSS时,就会显得代码过于拥挤,而且在修改的时候也会比较容易别混乱的结构所困扰.当然为了解决这些问题,同时提高代码编写速度和效率,那么CSS中比较实用的三个框架就是很好的选择.1.首先是960grid框架.他完善了HTML+CSS在不同浏览器不兼容的问题,它是无论在哪个浏览器中,都让其网页占据正中的960px的位置.    1)在使用960grid框架时要注意引入两个960

960网格布局框架(前端css框架)的使用方法

960框架总宽960px CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够先进,还有人说这些框架大大的节省了他们的开发时间.在此,我们将不再讨论这个问题. 前段时间,我了解到了CSS框架.经过对Malo.BluePrint和960做了实验对比后,我得出一个结论:我最喜欢960CSS框架. 本教程将解释这个框架的基本原理,这样你就可以用960来快速进入开发. 基本原理 你必须知道一些基本原理来“学习这个框架是如何工作的”.你可以通过实验(或者是用fir

如何编写轻量级 CSS 框架

Github 地址: https://github.com/nzbin/snack Demo 演示: https://nzbin.github.io/snack/ 前言 这篇文章我已经酝酿了半年之久,或者说拖沓了这么久吧.想说的东西很多,却又无从说起.如今轻量级框架如雨后春笋,层出不穷.我想每个人都应该归纳总结工作中的常见需求,编写一套适合自己的 CSS 框架.在之前的文章中,我提到了面向对象的 CSS(比如 BEM.OOCSS.SMACSS,详见 http://vanseodesign.com