Less学习笔记

图片取自网络
图片取自网络

less是什么

Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。

Less 可以运行在 Node、浏览器和 Rhino 平台上。网上有很多第三方工具帮助你编译 Less 源码。

使用less

Less 可以通过 npm 在命令行上运行;在浏览器上作为脚本文件下载;或者集成在广大的第三方工具内。请参考 多种用法

这里推荐使用的是一款国产的开源预处理语言图形编译工具Koala, 因为是有中文版而且使用起来简单,Koala是一个开源的预处理语言图形编译工具,目前已支持Less、Sass、Compass与CoffeeScript。

Koala官网根据你的系统平台下载对应的版本。Linux系统要求已安装好ruby运行环境。

其他配置使用注意事项等等,去Koala官网查看相关文档, 都有很详细说明, 这里主要记录学习less的语法.

声明文档格式

编写less时, 首先要在在less文件顶部声明文档格式

@charset "utf8";

注释

/* 我是注释 */ 在less文件和css文件中都会显示
// 我是注释 不会在css文件中显示, 在less中显示

变量

less中声明变量必须使用@开头, 例如@变量名: 值;

//less文件
@test_width:300px;
.box {
    width:@test_width;
    }

编译成css文件之后 :

//css文件
.box {
    width: 300px;

混合

我理解为把之前声明过的样式当做变量使用, 可提高代码复用, 提升效率.

//less文件
.box1 {
    width:300px;
    height:300px;
    background:#0f0;
    }
    
.box2 {
    .box;  //代替了类名为box1的全部样式声明
    margin: 10px;
    }

编译成css文件之后 :

//css文件
.box1 {
    width:300px;
    height:300px;
    background:#0f0;
    }
    
.box2 {
    width:300px;
    height:300px;
    background:#0f0;
    margin: 10px;
    }

默认带值:

//less文件
.border(@border_width:10px) { //如声明了10px, 那么没传参数的话默认显示就是10px
    border: solid pink @border_width;
    }
.box1 {
    .border(); //没有传参数
    .border(30px); //传入了参数

编译成css文件之后:

//css文件
.box1 {
    border: solid pink 10px; //显示默认值
    border: solid pink 30px; //显示传入参数的值
    }

举个减少代码量的栗子,一些css3属性要做兼容, 用的多的样式用混合之后就轻松了.

//less文件
.border_radius(@radius:5px){
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    border-radius: @radius;
    }
    
.box1 {
    .border_radius();

编译成css文件之后:

.box1 {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    border-radius: 5px;

其他地方要用到不同的圆角弧度, 只需在.border_radius();中传入需要的值就OK

匹配模式

在使用的时候传入事先定义好声明的值就可以了, 举个栗子, 遇到用css写三角形的情况, 用匹配模式-匹配三角形, 只需传入方向和宽度.

//less文件
    //声明上右下左四个方向的三角
.triangle(top,@w:5px,@c#ccc) {
    border-width: @w;
    border-color: transparent transparent @c transparent;
    border-style: dashed dashed solid dashed;
    }
.triangle(right,@w:5px,@c#ccc) {
    border-width: @w;
    border-color: transparent transparent transparent @c;
    border-style: dashed dashed solid dashed;
    }
.triangle(left,@w:5px,@c#ccc) {
    border-width: @w;
    border-color: transparent @c transparent transparent;
    border-style: dashed solid dashed dashed;
    }

.triangle(bottom,@w:5px,@c#ccc) {
    border-width: @w;
    border-color: @c transparent transparent transparent;
    border-style: solid dashed dashed dashed;
    }
//无论选择上面哪一个, 始终会把下面这个表达式里的声明带上  
.triangle(@_.@w:5px.@c:#ccc){
    width:0;
    height:0;
    overflow:hidden;    

.sanjiao {
    .triangle(bottom, 100px); //匹配传入的参数, 不传参数会显示默认的
    }

编译成css文件之后:

//css文件
.sanjiao {
    border-width:100px;
    border-color: #cccccc transparent transparent transparent;
    border-style: solid dashed dashed dashed;
    width:0;
    height:0;
    overflow: hidden;
    }

匹配模式-定位

一个使用匹配模式, 匹配定位的例子.

//less文件
.pos(r) {
    position: relative;
    }
.pos(a) {
    position: absolute;
    }
.pos(f) {
    position: fixed;
    }
    
.box1 {
    width:300px;
    height:300px;
    background-color: #ccc;
    .pos(r); //传入需要匹配的参数
    }

编译成css文件之后:

.box1 {
    width:300px;
    height:300px;
    background-color: #ccc;
    position: relative;
    }

运算

在less中的运算, 任何数字, 颜色,或者变量都可以参与运算+ - * /, 运算应该包裹在括号中.

//less文件
@test_width:300px;
.box {
    width: (@test_width - 20)*5; //先减后乘
    color: #ccc - 10; //用得少
    }

编译成css文件之后:

.box {
    width: 1400px; //运算后的结果
    color: c2c2c2; //颜色会变淡
    }

嵌套规则

和写HTML代码类似, 直接上代码:

//html文件
<ul class='list'>
    <li><a href="#">这是一段测试文字</a><span>2016-12-06</span></li>
    <li><a href="#">这是一段测试文字</a><span>2016-12-06</span></li>
    <li><a href="#">这是一段测试文字</a><span>2016-12-06</span></li>
    <li><a href="#">这是一段测试文字</a><span>2016-12-06</span></li>
    <li><a href="#">这是一段测试文字</a><span>2016-12-06</span></li>
</ul>
//less文件
.list {
    width:600px;
    margin: 30px auto;
    padding: 0;
    list-style: none;
    
    li {
        height: 30px;
        line-height: 30px;
        background_color: #ccc;
        margin-bottom: 5px;
    }
    a {
        float: left;
        &:hover { //&代表的是父元素
            color: red;
            }
    }
    span {
        float: right;
    }
    }
    

注意其中&代表的是父元素,编译成css文件之后:

.list {
    width:600px;
    margin: 30px auto;
    padding: 0;
    list-style: none;
    }
.list li {
        height: 30px;
        line-height: 30px;
        background_color: #ccc;
        margin-bottom: 5px;
        }
.list a {
        float: left;
        }
.list span {
        float: right;
        }

@arguments

类似于形参, 代替多个值, 编译后的值为传入的实参, 如没有传参,则编译为默认值.

//less文件
.border(@w:30px,@c: yellow,@xx:solid) {
    border: @arguments; //可代替上面括号内三个参数

.box {
    .border(70,red,dashed); //传入你需要的参数用逗号分隔, 不传表示默认
    }

编译成css文件之后:

//css文件
.box {
    border: 70px #ff0000 dashed;
    

避免编译

有时候我们需要输出一些不正确的css语法或者使用一些less不认识的专有语法, 要输出这样的值用''/""包裹, 然后再前面加上~
例如width:~'calc(300px - 30px)';

//less文件
.box {
    width: calc(300px - 30px);
    }

编译成css文件之后:

//css文件
.box {
    width: calc(300px - 30px);
    }

这样不需要编译的时候, 也可以很好的解决.

!important

作用是增加优先级, 一般不用, 影响性能.

//less文件
.border_radius(@radius:5px){
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    border-radius: @radius;
    }
    
.box1 {
    .border_radius() !important; //添加了!important

编译成css文件之后:

.box1 {
    -webkit-border-radius: 5px !important;
    -moz-border-radius: 5px !important;
    border-radius: 5px !important;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 写在前面: 我们都知道写 CSS 是一个蛮痛苦的过程,而且很机械.俗话说的好:哪里有需求,那里就会有东西出来. 呃...
    iplaycodex阅读 461评论 0 3
  • Less作为 CSS 的一种扩展,不仅完全兼容 CSS 语法,而且连新增的特性也是使用 CSS 语法,你可以在任何...
    zhangivon阅读 565评论 0 1
  • 编译器 koala 编译器创建一个 style 文件夹,在其中创建 .less 文件,将文件夹拖入 koala 编...
    _月光临海阅读 301评论 0 0
  • extend这一部分真的看得我不知道要怎么说明好,难怪less中文网这一部分完全没有翻译。看着一部分的时候感觉无从...
    程恺阅读 1,513评论 0 1
  • 本人作为一名今年刚毕业的应届生,目前的工作方向是前端开发,学习前端到现在差不多14个月,有9个月的工作经验。从几个...
    程恺阅读 320评论 1 3