初识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”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...
随机推荐
- exp_tools
#pwntools # github https://github.com/Gallopsled/pwntools 在线帮助文档 https://docs.pwntools.com/en/stable ...
- java socket 多线程通讯
1.目录结构 2.Server.java 代码 package de.bvb.server; import java.net.ServerSocket; import java.net.Socket; ...
- UI图标资源搜索
下面这些网站可以搜索图标资源,方面界面制作: 分享下http://www.tutorialcadet.com/20-user-interface-icon-sets-for-developers/下面 ...
- Linux tcpdump命令详解
tcpdump官网:http://www.tcpdump.org/ 转载于:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.ht ...
- jquery+javaScript完成瀑布流图片页面效果
效果如图: html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> & ...
- 处理session跨域几种的方案
常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态.两种情况:一种9streets.cn和a.9streets.cn之间,另一种是 ...
- js date 火狐不兼容 解决办法 火狐版本25,0
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 对json数据的遍历
json格式变化多样,可嵌套好几层,这里只记录了一些遍历方法,具体数据格式具体分析~ "data1": { "key1": [ {"name" ...
- linux的三种安装软件包的方式(小白的学习之旅)
tar包,整个安装过程可以分为以下几步: 1) 取得应用软件:通过下载.购买光盘的方法获得: 2) 解压缩文件:一般tar包,都会再做一次压缩,如gzip.bz2等,所以你需要先解压.如果是最常见的g ...
- arguments的理解
(function(){ return typeof arguments; })(); 无聊的时候看看网上的面试题.个人认为通过面试题可以对某个知识点能够更加认识,踩过坑才会明白坑是有多大.代码中经常 ...