对于一些布局和样式比较复杂的网页,如何构建一个健康、优雅的CSS文件是一个很令人苦恼的问题。在书写静态页面的时候,我总是遇到布局结构累赘和重复样式复用性不高的问题,当然,对于这些问题归根究底还是要多联系和思考,和使用LESS带来好处并没有什么关系,但是使用LESS书写CSS样式能够清楚的看到样式的布置结构,方面观察各个元素之间的联系。

  由于CSS是一门领域专用语言,并且是一门非程序式语言,这就造成了CSS代码书写很容易,但是想要写好、方便维护和管理就需要较强的能力了。除开注释有着不可忽视的作用,一个CSS管理工具也可以带来很大的便利。LESS在最大的好处是在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。

  LESS满足CSS的所有语法,并且在其之上,有着一套自定义语法,用户可以通过自定义语法定义自己的样式规则,并且通过解析器编译成对应的CSS文件。LESS语法包括以下几部分:

  1、注释

  在LESS中,注释有两种书写方式,和JS相似

//这是单行注释,只会在LESS中显示,不会被编译在CSS中

/*
* 这是多行注释,会被编译成CSS的一部分
*/

  2、变量

  LESS通过@来定义和引入变量,同时变量也存在作用域,在引用时会依照作用域链寻找定义变量的样式使用

@width: 20 px;
.homeDiv {
@width: 30 px;
.centerDiv {
width: @width; // 此处应该取最近定义的变量 width 的值 30px
}
}
.leftDiv {
width : @width; // 此处应该取最上面定义的变量 width 的值 20px
}

  3、混入

  混入就是相当于将一个类选择器当做变量来引用,实现样式的多重继承。混入有很多种使用方式,这里只列举简单的两种

.bgc{
background-color: black; //声明一个样式
}
.box{
width:100px;
height: 100px;
.bgc; //将样式加入到元素中
}

  这是最简单的引用方式,引用类选择器的时候还能附加上变量

.boxwidth(@width){   //可以使用@width: 100px 设定默认值,那么使用的时候不传递参数也可以
width: @width;
}
.box{
height: 100px;
.boxwidth(100px);
}

  4、嵌套

  嵌套是针对html结构进行对应的样式设置的方式,并且能够使我们书写代码更加简单快捷

<div class="page">
<div class="wrapper">
<div class="content">
<p>hello</p>
<p>don't say hello</p>
</div>
</div>
</div>

  样式是这样书写的:

.page{
@width: 500px;
height: 500px;
border: 1px solid blue;
overflow: hidden;
.wrapper{
width: @width;
height: 200px;
margin: 20px auto;
background: green;
.contetn{
width: 200px;
float: right;
p{
font-size: 24px;
}
p:last-of-type{
font-style: initial;
}
}
}
}

  经过Koala编译之后:

.page {
height: 500px;
border: 1px solid blue;
overflow: hidden;
}
.page .wrapper {
width: 500px;
height: 200px;
margin: 20px auto;
background: green;
}
.page .wrapper .contetn {
width: 200px;
float: right;
}
.page .wrapper .contetn p {
font-size: 24px;
}
.page .wrapper .contetn p:last-of-type {
font-style: initial;
}

  5、函数和运算

  LESS支持运算,某些时候能够帮助我们自动完成布局

@width: 250px;
@color: #255;
.switchColor {
width: @width * 2;
background: @color - 100;
}

  支持加减乘除四则运算。

LESS的简单介绍的更多相关文章

  1. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  2. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  3. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  4. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  5. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  6. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

  7. iOS-iOS开发简单介绍

    概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...

  8. iOS开发多线程篇—多线程简单介绍

    iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...

  9. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  10. Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍

    一.引言 Android应用开发最重要的一份内容就是界面的开发,无论你程序包含的内容多么优秀,如若没有一个良好的用户交互界面,最终也只是会被用户所遗弃.Android SDK提供了大量功能丰富的UI组 ...

随机推荐

  1. (NO.00002)iOS游戏精灵战争雏形(四)

    在Xcode打开MainScene,添加初始化代码如下: -(void)didLoadFromCCB{ NSAssert(_sprite1, @"_sprite1 must not nil& ...

  2. 常用Map实现类对比

    翻译人员: 铁锚 翻译时间: 2013年12月12日 原文链接: HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap Map 是最常用的数据结构之一 ...

  3. 新手自定义view练习实例之(一) 泡泡弹窗

    转载请注明出处:http://blog.csdn.net/wingichoy/article/details/50455412 本系列是为新手准备的自定义view练习项目(大牛请无视),相信在学习过程 ...

  4. apache tomcat集群

    今天花了大概两个小时完成了tomcat与apache的集群.现记录一下,也希望能帮助后来者. 建议看这篇博客前,先阅读一下鄙人拙作 tomcat整合apache 看完那个后,再进行集群,就很快了. 和 ...

  5. HDFS读写数据过程

    一.文件的打开 1.1.客户端 HDFS打开一个文件,需要在客户端调用DistributedFileSystem.open(Path f, int bufferSize),其实现为: public F ...

  6. Gradle 1.12用户指南翻译——第二十六章. War 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  7. Linux - man page

    使用man date来查看date命令的详细信息. lucifer@lucifer-virtual-machine:~$ man date DATE(1) User Commands DATE(1) ...

  8. Oracle ADF 开发必读

    MARK:http://www.oracle.com/technetwork/cn/articles/adf/index-086064-zhs.html 第 1 部分- 借助 Subversion 进 ...

  9. LeetCode之“字符串”:最短回文子串

    题目链接 题目要求: Given a string S, you are allowed to convert it to a palindrome by adding characters in f ...

  10. 创建Sencha touch第一个应用

    最近学习Sencha touch ,是一个菜鸟级别.废话不多说,让我们来创建Sencha touch的第一应用. 首先,我们下载Sencha touch2.0 sdk 和SDK工具.  SDK工具直接 ...