初识less
1 less 安装使用
安装
sudo npm install node-less
使用
mkdir less
cd /less
lessc demo1.less > test1.css
lessc -x demo1.less > test1.css (压缩)
2
为什么使用less
面向对象思想很重要的是继承和封装,我们也可以使用这种思想考虑css编写。
页面上的css从页面功能上来说,一般分为2类:结构性和装饰性的。
结构性:比如表格,列表,布局,定位。装饰性:比如字体,块内容,背景,边框,方框。
我们在根据设计图构建html结构时,考虑的css首先是结构性,比如布局,定位。我们一般会把整个页面分成几个部分,从设计角度来说就是模块。大模块的布局定位搞定之后,再到深入到模块里面。这个分层分块的思路其实就是封装的概念,每个模块看成一个黒盒子,先不管,把几个大的黑子拍整齐后,在深入大盒子里面。盒子里面也可以这么处理。
但是盒子和盒子之间可能有些相同部分,比如背景,比如字体,比如定位。如果把相同的部分拿出来,就有继承概念了。
使用模块化的方式构建html和css时,会使整个页面结构清晰,样式条理,方便后续的维护,但是有时候我们会遇到这样的情况:
(1) div1包含div2、div3,div2宽度固定,div3宽度=div1宽度-div2的宽度。设计样式时,我们针对每个div设计了样式,我们需要手动计算div3的宽度。如果设计有变更div2的宽度变了,或者div1的宽度变了,于是我们不得不重新计算div3的宽度,于是我们的工作量来了。
(2)
div1包含div2、div3,div2、div3的结构性样式不同,但是有部分修饰性样式相同,比如字体和背景相同,于是们设计了一个类font-Bg加在div2和div3的class上,可以这样的话,你不得不面对这样一种风险,当div2和div3的字体和背景不同时,你要修改div2和div3的class,新增样式。为了减少这种修改,div2和div3各自设计一个class,但是他们之间确实有相同的样式,所以这个css的设计比较纠结,要么维护困难,要么费事费力。
遇到类似以上这些问题,我们有没有好的办法解决呢?
3
怎么使用less
less可以较好的解决上面遇到问题。
less主要的特性:变量及运算,混入(mixin),嵌套。
针对上述中第一个问题,我们使用变量就可以解决。
@div1Width:500;
@div2Width:200px; .div1cls
{
width:@div1Width;
} .div2cls
{
width:@div2Width;
} .div3cls
{
width:(@div1Width)-(@div2Width);
}
如果有div1和div2的width有变动,只需要修改@div1Width或@div2Width就可以了。
编译后:
.div1cls {
width:;
}
.div2cls {
width: 200px;
}
.div3cls {
width: 300px;
}
针对第二个问题,可以使用混入的方法:
.font-bg
{
font-size:12px;
background-image:url('demo.png');
} .div2cls
{
float:left;
.font-bg } .div3cls
{
float:right;
.font-bg }
如果有变动只需要修改css文件,编译就可以,而不需要修改html文件。这个继承的意思。公共样式都可以抽出来,需要的话,直接混入就可以。和extjs上apply类似。
编译后:
.font-bg {
font-size: 12px;
background-image: url('demo.png');
}
.div2cls {
float: left;
font-size: 12px;
background-image: url('demo.png');
}
.div3cls {
float: right;
font-size: 12px;
background-image: url('demo.png');
}
还有一种比较复杂的应用就是嵌套,考虑这样的场景:
div1包含div2、div3,div1背景图片是image1.png, div2背景变为白色,字体变成12px,div3背景为黄色,字体变成8px。当鼠标移动到div1上时,div1背景图片变成image2.png,div2背景变成红色,字体变成16px,div3背景变成绿色,字体变成8px。
我们会这样设计:
.div1{
background-image:url('image1.png');
}
.div1 .div2{
font-size:12px;
background-color:white;
}
.div1 .div3{
font-size:8px;
background-color:yellow;
}
.div1hover{
background-image:url('image2.png');
}
.div1hover .div2{
font-size:16px;
background-color:red;
}
.div1hover .div3{
font-size:8px;
background-color:green;
}
这样看着是不是有点乱,是的,略显得不简洁。我们用less的方法改造一下:
.div1
{
background-image:url('image1.png');
.div2{
font-size:12px;
background-color:white;
}
.div3{
font-size:8px;
background-color:yellow;
}
} .div1hover{
background-image:url('image2.png');
.div2{
font-size:16px;
background-color:red;
}
.div3{
font-size:8px;
background-color:green;
}
}
这样是不是感觉很简洁,嵌套关系很清晰?
less还有其他很多用法,可以帮助你编写更易维护,更清晰的css。大家去探索吧。
初识less的更多相关文章
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
- MongoDB【第一篇】MongodDB初识
NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
随机推荐
- php中环境变量
$_ENV $_ENV是一个包含服务器端环境变量的数组.它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它. $_ENV只是被动的接受服务器端的环境变量并把它们转换为数组元素 ...
- Linux内核USB驱动【转】
本文转载自:http://www.360doc.com/content/12/0321/14/8363527_196286673.shtml 注意,该文件是2.4的内核的驱动源文件,并不保证在2.6内 ...
- libtool: line 990: g++: command not found的解决
yum -y install gcc+ gcc-c++
- 05 技术内幕 T-SQL 查询读书笔记(第四章)
第四章 子查询:在外部查询内嵌套的内部查询(按照期望值的数量分为,标量子查询 scalar subqueries,多值子查询multivalued subqueries)(按照子查询对外部查询的依赖性 ...
- Zabbix3.x安装图解教程
准备知识: Zabbix3.x比较之前的2.0界面有了很大的变化,但是安装部署过程与2.x基本完全一样. 1.Zabbix2.x安装图解教程 http://www.osyunwei.com/archi ...
- IMPORT FROM 表数据导入
Syntax IMPORT FROM [<file_type>] <file_path> [INTO <table_name>] [WITH <import_ ...
- mysql基本命令整理
1.replace into(insert into 的增强版) replace into tbl_name(col_name, ...) values(...)replace into tbl_na ...
- FastDfs
下载fastdfs源码包: ? 1 wget http://fastdfs.googlecode.com/files/FastDFS_v3.05.tar.gz 开始安装: ? 1 2 3 4 tar ...
- Scrum Meeting 11-20151217
任务安排 姓名 今日任务 明日任务 困难 董元财 网络连接框架优化 请假(数据库) 无 胡亚坤 优化商品搜索界面 请假(数据库) 无 刘猛 请假(参加编译测试) 无 马汉虎 请假(参加编译测试) 无 ...
- MongoDB简介与增删改查
一.简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB 将数据存储为一个文档,数据 ...