less 学习笔记

1 什么是less

LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性,less 编译工具koala.exe

2 less语法

less中有很多的语法规则,但个人觉得less中比较常用的也是最重要的就下面几个:

变量、混合规则(mixin)、模式匹配、嵌套,& 指代上一层的选择器

不常用的:arguments 避免编译 !important

1. 先来看下变量的简单用法,less中有变量运算,(参与运算任何一个参数带有单位即可)

//less 重点
//变量
//mixin 混合
//模式匹配
//嵌套规则

@test-width:100px;
@test-size:12px;
.wrap{
    color: red;
    width:(@test-width*3);
    font-size: @test-size*12;
    height: @test-width+12;
}

编译产出物,就是css啦

.wrap {
  color: red;
  width: 300px;
  font-size: 144px;
  height: 112px;
}

2. 混合规则(mixin),相当于定义一个类,在别的类中直接包含进来,看下具体情况吧

@test-width:100px;
@test-size:12px;
.wrap{
    color: red;
    width:(@test-width*3);
    font-size: @test-size*12;
    height: @test-width+12;
    /*下面是mixin进来的default-border的样式*/
    .default-border;
}

.default-border{
    border: solid 1px red;
    box-shadow: 0px 0px;
}

对应的css编译结果为==>

.default-borde会出现在css中,如果是定义成
.default-border(@varName){...}这个不会出现在产出物css中,定义的产出物只会出现在mixin中,看下面的代码-2
.wrap {
  color: red;
  width: 300px;
  font-size: 144px;
  height: 112px;
  /*下面是mixin进来的default-border的样式*/
  border: solid 1px red;
  -webkit-box-shadow: 0px 0px;
  box-shadow: 0px 0px;
}
.default-border {
  border: solid 1px red;
  -webkit-box-shadow: 0px 0px;
  box-shadow: 0px 0px;
}

代码2-

 1 .border01(@b1){
 2     border: solid @b1*10 red;
 3 }
 4
 5 .width-1(@w1:100px;){
 6     font-size:@w1;
 7     border-radius: @w1 - 14;
 8 }
 9
10 .test{
11     .border01(3);
12     .width-1();
13 }

产出物代码2-

1 .test {
2   border: solid 30 #ff0000;
3   font-size: 100px;
4   border-radius: 86px;
5 }

3.模式匹配

预先定义一系列的类,这些都会有不同的参数,不同的参数其内部的样式是不同的,mixin的时候根据传入的参数不同而自动匹配到不同的类

例如:四个不同方向的箭头

 1 //direction bottom:
 2 .tg(bottom){
 3     border-width: @test-width - 70;
 4     border-color: red transparent transparent  transparent ;
 5     border-style: solid dashed dashed dashed ;
 6 }
 7 //direction right:
 8 .tg(right){
 9     border-width: @test-width - 70;
10     border-color:  transparent transparent  transparent red ;
11     border-style:  dashed dashed dashed  solid;
12 }
13 //direction left:
14 .tg(left){
15     border-width: @test-width - 70;
16     border-color:  transparent red transparent  transparent  ;
17     border-style:  dashed solid dashed dashed  ;
18 }
19 //不管匹配到哪一个,这个一定会匹配到的,@_必须这种写法,所有的参数必须保持一致
20 .tg(@_){
21     width: 0;
22     height: 0;
23     overflow: hidden;
24 }
25
26 .sj{
27     .tg(bottom);
28 }

对应产出物==> 所有.tg不出出现在css中,只有.sj会出现在css中

1 .sj {//这就是想下的箭头
2   border-width: 30px;
3   border-color: red transparent transparent  transparent ;
4   border-style: solid dashed dashed dashed ;
5   width: 0;
6   height: 0;
7   overflow: hidden;
8 }

3.嵌套规则和 &

 1 .list{
 2     margin: 0;
 3     padding: 0;
 4     list-style:none;
 5     li{
 6         width: 100px;
 7         height: 50px;
 8     }
 9     a{
10         float: left;
11         border:solid 1px red;
12         //&代表他的上一层选择器符号
13         &:hover{
14             background: red;
15         }
16     }
17 }

产出物==>

 1 .list {
 2   margin: 0;
 3   padding: 0;
 4   list-style: none;
 5 }
 6 .list li {
 7   width: 100px;
 8   height: 50px;
 9 }
10 .list a {
11   float: left;
12   border: solid 1px red;
13 }
14 .list a:hover {
15   background: red;
16 }

4. 其他不重要的

arguments

.t-arguments(@style:solid,@width:1px,@color:#ffddff){
    border: @arguments;
}
.test-arguments{
    .t-arguments(dashed,5px);
}

output==>

.test-arguments {
  border: dashed 5px #ffddff;
}

避免编译

1 /*koala 会吧210px-20px编译,这不是我们想要的,calc是css3的属性,应交给浏览器编译*/
2 .t-comile{
3     width:calc(210px-20px);
4 }
5 /*避免编译*/
6 .t-cancel-compile{
7     width: ~‘calc(210px-20px)‘;
8 }

output==>

1 /*koala 会吧210px-20px编译,这不是我们想要的,calc是css3的属性,应交给浏览器编译*/
2 .t-comile {
3   width: calc(190px);
4 }
5 /*避免编译*/
6 .t-cancel-compile {
7   width: calc(210px-20px);
8 }

!important,会把所有的mixin进来的所有的属性都后缀加上!important

.t-important(@width:200px,@height:200px){
    width: @width;
    height: @height;
}
.test-important{
    .t-important() !important;
}

output==>

.test-important {
  width: 200px !important;
  height: 200px !important;
}
时间: 2024-10-12 20:14:34

less 学习笔记的相关文章

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl

[原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

java/android 设计模式学习笔记(10)---建造者模式

这篇博客我们来介绍一下建造者模式(Builder Pattern),建造者模式又被称为生成器模式,是创造性模式之一,与工厂方法模式和抽象工厂模式不同,后两者的目的是为了实现多态性,而 Builder 模式的目的则是为了将对象的构建与展示分离.Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程.一个复杂的对象有大量的组成部分,比如汽车它有车轮.方向盘.发动机.以及各种各样的小零件,要将这些部件装配成一辆汽车,这个装配过

[原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------