初学Less
Less在CSS语法的基础上进行了扩展,主要包含:
- Variables(变量)
- Mixins(混合书写)
- Nested Rules(嵌套规则)
- Functions & Operations(功能和操作)
- Client-side usage(客户端使用)
- Server-side usage(服务端使用)
使用Less
Server-side usage
npm安装
npm install -g less
命令行使用
输出到stdout,直接在控制台显示
lessc styles.less
保存为文件
lessc styles.less styles.css
如果需要压缩,要先安装clean-css插件,然后执行命令
lessc --clean-css styles.less styles.min.css
在代码中使用
var less = require('less');
less.render('.class { width: (1 + 1) }', function (e, output) {
console.log(output.css);
});
Client-side usage
link中的rel设置成stylesheet/less
先引入less文件,再引入less.js脚本
<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="less.js" type="text/javascript"></script>
下载less.js
需要注意的是,在浏览器中使用Less虽然入门简单、开发便捷,但在实际项目中因为要考虑性能问题,一般推荐在服务端用node.js或其他第三方工具使用
语言特性
Variables
定义变量
@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;
#header {
color: @light-blue;
}
输出
#header {
color: #6c94be;
}
注意,Less中变量相当于“常量”,因为它们只能被定义一次
变量也可以用在选择器、属性名和字符串拼接中,用@{变量名}形式
/*注意:如果定义成@dialog: .dialog-class;这种有连字符 - 的变量值
*要写成@dialog: dialog-class;
*然后这样使用:
*.@{dialog}
*否则编译会报错 NameError: variable @dialog is undefined
*然而使用下划线 _ 则没有这个问题,这是个坑
*/
@dialog: .dialogClass;
@{dialog}{
width: 200px;
}
结果
.dialogClass {
width: 200px;
}
Mixins
一个规则集合应用到另一个规则集合中,例如
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
我们想要将这些属性应用到别的规则集合中,直接用类名(也可以是id)代替这些属性就行了
#menu a {
color: #111;
.bordered;
}
.post a {
color: red;
.bordered;
}
可以定义不带参数或带参数的Mixin,供调用,不输出css
//不带参数
.animal(){
color: #000000;
}
//带参数
.dog(@h;@t){ //也可以用,进行分隔,但css中如background、border等样式属性支持属性值组,而,则作为属性值组元素分隔符,因此推荐使用;作为参数分隔符
height: @h;
border: @t;
}
#doge{
.animal();
.dog(5px;1px);
}
输出:
#doge {
color: #000000;
height: 5px;
border: 1px;
}
Mixin中内置了两个特殊的对象,@arguments和@rest
@arguments与JavaScript中函数的arguments对象类似,表示传入的所有参数
@rest则表示…参数
.dog(@h;@rest...){
height: @h;
border: @rest;
}
.cat(@t;@s@c){
border: @arguments;
}
#doge{
.dog(5px;1px;solid;yellow);
}
#meow{
.cat(1px;solid;white);
}
输出:
#doge {
height: 5px;
border: 1px solid yellow;
}
#meow {
border: 1px solid white;
}
Nested Rules
#header {
color: black;
}
#header .navigation {
font-size: 12px;
}
#header .logo {
width: 300px;
}
在Less中可以写成
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}
我们也可以在混合书写模式中使用伪选择器,用&表示当前选择器的父选择器
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
Operations
加减乘除算术运算可以在任何数字、颜色和变量上操作,如果可能,数学操作将会考虑单位,在操作前会进行换算,运算结果以最左边有定义的单位为准
如果单位无法换算或无意义,则会忽略单位
// numbers are converted into the same units
@conversion-1: 5cm + 10mm; // result is 6cm
@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm
// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // result is 4px
// example with variables
@base: 5%;
@filler: @base * 2; // result is 10%
@other: @base + @filler; // result is 15%
注意,乘法与除法在运算时不进行单位换算,因为在大多数情况下这两种操作是无意义的
比如:一个长度乘以另一个长度等于一个面,而css中不支持对这样的面操作,因此只会对数字进行运算,然后分配最左边有定义的单位
(好像很有道理,比如2cm * 3mm,如果进行单位换算,最终结果将是0.6cm2,而这个单位在css中暂时并没有卵用)
@base: 2cm * 3mm; // result is 6cm
颜色的运算会分为rgba来运算,并且总会输出一个合法的颜色值,如果颜色值大于ff或小于00,都会被四舍五入成ff或00,对于alpha也是一样,总在1.0-0.0之间
注意:alpha值的运算未定义,因为在对颜色的数学操作的意义上没有达成一致,所以如果对alpha进行运算,可能达不到想要的结果,后期也可能会改变
@color: #224488 / 2; //results in #112244
background-color: #112244 + #111; // result is #223355
Escaping
可以用任意字符串作为属性或变量的值,~"任意字符串"或~'任意字符串'将不会改变,主要用在css hack中
.weird-element {
content: ~"^//* some horrible but needed css hack";
}
结果:
.weird-element {
content: ^//* some horrible but needed css hack;
}
Functions
Less提供了许多对颜色、字符串和数学操作的功能,使用方式十分直白(前提是你英语好)
具体可以在Function Reference中查询
@base: #f04615;
@width: 0.5;
.class {
width: percentage(@width); // returns `50%`
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}
Namespaces and Accessors
可以在命名空间中定义一些属性供以后使用或分发
#bundle {
.button {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {
background-color: white
}
}
.tab { ... }
.citation { ... }
}
使用:
#header a {
color: orange;
#bundle > .button;
}
注:在namespace中定义的变量不能通过#namespace > @var访问到
Scope
Less中的作用域与其他编程语言类似,现在本地作用域中寻找变量或Mixin,若没找到,再到上一级作用域中寻找
Comments
两种注释方法
- //行内
- /*
块级
*/
Importing
import 可以导入其他文件,如果是.less文件,可以不写后缀
@import "library"; // library.less
@import "typo.css";
参考
初学Less的更多相关文章
- DDD初学指南
去年就打算总结一下,结果新换的工作特别忙,就迟迟没有认真动手.主要内容是很多初学DDD甚至于学习很长时间的同学没有弄明白DDD是什么,适合什么情况.这世界上没有银弹,抛开了适合的场景孤立的去研究DDD ...
- gulp初学
原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js 配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- 初学Vue2.0--基础篇
概述: 鉴于本人初学,使用的编译器是webStorm,需添加对VUE的支持,添加方法可以参考 http://www.jianshu.com/p/142dae4f8b51. 起步: 1. 扎实的 Jav ...
- 初学Python
初学Python 1.Python初识 life is short you need python--龟叔名言 Python是一种简洁优美语法接近自然语言的一种全栈开发语言,由"龟叔&quo ...
- Javascript初学篇章_5(对象)
对象 Javascript是一种面向对象的语言,因此可以使用面向对象的思想来进行javascript程序设计对象就是由一些彼此相关的属性和方法集合在一起而构成的一个数据实体.举个例子,一只猫是个对象, ...
- 初学Objective-C语言需要了解的星星点点
其实大多数开发初学者都有一些相同的特点,可以说是一种“职业病”.Most有其他平台开发基础的初学者,看到Xcode就想摩拳擦掌:看到Interface Builder就想跃跃欲试:而 ...
- matlab初学之句柄
文章出处:http://www.cnblogs.com/CBDoctor/archive/2012/04/06/2434072.html 在matlab中,每一个对象都有一个数字来标识,叫做句柄.当每 ...
- 初学HTML5、初入前端
学习HTML5是一个漫长的过程,当中会遇到很多技术与心态上的变化.刚开始学习,我们不能发力过猛,需要一个相对稳定的状态去面对.多关注一些自己感兴趣的网站和技术知识,建立自己的信心与好奇心,为以后的学习 ...
- Python初学的易犯错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在 if , elif , else , for , ...
随机推荐
- Html限制input输入框只能输入数字
限制输入框只能输入数字, onafterpaste防止用户从其它地方copy内容粘贴到输入框: <input type="text" onkeyup="this.v ...
- codevs1183 泥泞的道路
题目描述 Description CS有n个小区,并且任意小区之间都有两条单向道路(a到b,b到a)相连.因为最近下了很多暴雨,很多道路都被淹了,不同的道路泥泞程度不同.小A经过对近期天气和地形的科学 ...
- IntelliJ IDEA 14.x 快捷键/个性化设置
常用快捷键设置(设置成跟Eclipse差不多) 按照路径:File -> Settings -> Appearance & Behavior -> Keymap -> ...
- 《征服 C 指针》摘录5:函数形参 和 空的下标运算符[]
一.函数的形参的声明 C 语言可以像下面这样声明函数的形参: void func(int a[]) { // ... } 对于这种写法,无论怎么看都好像要向函数的参数传递数组. 可是,在 C ...
- Linux C 中 fork() 函数详解
一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork() 函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同 ...
- vue2.0学习(二)
1.关于模板渲染,当需要渲染多个元素时可以 <ul> <template v-for="item in items"> <li>{{ item. ...
- PYTHON 写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者
def a2(arg): if len(arg) > 2: del arg[2:] li = [12,13,14,15] a2(li) print(li)
- 关于 Mybatis 的Invalid bound statement (not found):错误
今天遇到一个特别奇怪的问题,最后发现是自己对mybatis的学习还有待提高 返回类型可以用resultType,也可以用resultMap resultType是直接表示返回类型的,而resultMa ...
- java 跨域
jsonp做前端跨域需要服务器的支持的,造成json字符串前缀 var a=...或者 a[].... 实在有点麻烦,故还是后台跨域取数据好了 package com.pro.domain; impo ...
- Python 开发轻量级爬虫06
Python 开发轻量级爬虫 (imooc总结06--网页解析器) 介绍网页解析器 将互联网的网页获取到本地以后,我们需要对它们进行解析才能够提取出我们需要的内容. 也就是说网页解析器是从网页中提取有 ...