Less学习(1)
写在开头的话:
月余前被问起会不会Less,当时就有想学这个css框架的念头,而在昨天,在前端乱炖上看到一篇LessCss的开篇介绍,忽然就有了一股立马去学的冲动,回到家后找了几篇文章看了下,初感觉比较容易入门,变量混合参数的写法都很容易让人接受。至于嵌套,目前而言,我个人并不喜欢这种写法。追梦说谷歌正在用c++写他们自己的Sass(据说类似Less的一种css框架),更加让我坚定了学这个框架的想法。今天只看了文档的小半部分,明天空的话就继续喽。希望以后能在项目中用到吧,不过目前我们公司的话,希望不大,哈哈。
一、变量
定义
@color:#e11921;
使用
a:hover{
color:@color;
}
编译后的结果:
a:hover { color: #e11921;}
注意点:
(1)变量的定义无需提前,也就是说,定义可以放在使用之后。比如:
a:hover{
color:@color;
}
@color:#e11921;
编译后的结果:
a:hover {
color: #e11921;
}
(2)变量的作用域
@bg:#cccccc;
.wrap{
@bg:#e5e5e5;
.box{
background-color:@bg;
}
}
.module{
background-color:@bg
}
编译后的结果为:
.wrap .box {
background-color: #e5e5e5;
}
.module {
background-color: #cccccc;
}
二、混合
我们可以定义一些通用的属性集.class,然后在其他的地方引入这些属性集
.btn{
display:inline-block;
border:1px solid #e5e5e5;
text-align:center;
} .btn-b{
width:62px;
height:22px;
line-height:22px;
.btn;
}
编译后的结果为:
.btn {
display: inline-block;
border: 1px solid #e5e5e5;
text-align: center;
}
.btn-b {
width: 62px;
height: 22px;
line-height: 22px;
display: inline-block;
border: 1px solid #e5e5e5;
text-align: center;
}
注意点:变量也会被混合,带入到新的作用域。(暂)
三、带参数的混合
(我觉得这个功能很适合用于css3,比如渐变啊什么的,浏览器私有前缀是繁琐的存在= =还有就是一组类似的样式了,比如不同尺寸的相似按钮)
继续拿.btn作例子:
.btn(@width:64px,@height:22px){
display:inline-block;
width:@width;
height:@height;
line-height:@height;
text-align:center;
background-color:#f4f4f4;
color:#333;
border:1px solid #ccc;
border-radius:5px;
} #submit{
.btn(80px,28px);
}
编译后的结果为:
#submit {
display: inline-block;
width: 80px;
height: 28px;
line-height: 28px;
text-align: center;
background-color: #f4f4f4;
color: #333;
border: 1px solid #ccc;
border-radius: 5px;
}
如果不想把.btn暴露到css中去,只在Less的混合中使用,可以不要设定参数(这里是我疑惑的地方,上个例子中编译的结果也并没有暴露.btn啊):如
.btn(){
display:inline-block;
width:64px;
height:20px;
line-height:32px;
text-align:center;
background-color:#f4f4f4;
color:#333;
border:1px solid #ccc;
border-radius:5px;
}
#cancel{
.btn;
}
编译后的结果为:
#cancel {
display: inline-block;
width: 64px;
height: 20px;
line-height: 32px;
text-align: center;
background-color: #f4f4f4;
color: #333;
border: 1px solid #ccc;
border-radius: 5px;
}
注意点:
(1)多参数的混合,参数之间除使用逗号分隔外,还可以使用分号(官方推荐),因为分号有双重含义:它既可以表示混合的参数,也可以表示一个参数中一组值的分隔符。当参数分隔符中逗号和分号都存在时,则分号作为分隔符。
(2)同名不同参数的混合,看下面这个例子:
.mixin(@color) {
color-1: @color;
}
.mixin(@color; @padding:2) {
color-2: @color;
padding-2: @padding;
}
.mixin(@color; @padding; @margin: 2) {
color-3: @color;
padding-3: @padding;
margin: @margin @margin @margin @margin;
}
第一个mixin强制要求第一个参数
第二个mixin强制要求第一个参数,第二个参数为可选
第三个mixin强制要求前2个参数,第三个为可选
因此当调用时:
.some .selector div {
.mixin(#008000);
}
编辑结果为:
.some .selector div {
color-1: #008000;
color-2: #008000;
padding-2:;
}
四 @arguments变量
@arguments包含了你传进去的所有变量,所以它会适合用在一些符合的属性,比如border margin padding box-shadow等等。
我们拿border作为例子(因为写的最多)
.border(@width:1px;@style:solid;@color:#e11921){
border:@arguments;
}
#border{
.border(2px,dashed,#f00);
}
编译结果为:
#border {
border: 2px dashed #ff0000;
}
好吧,我发现这个例子有点鸡肋,还是换成box-shadow吧
.box-shadow(@x:1;@y:1;@blur:2;@color:#eee){
box-shadow:@arguments;
-webkit-box-shadow:@arguments;
-moz-box-shadow:@arguments;
-ms-box-shaow:@arguments;
}
#box{
.box-shadow(2px;2px;4px;rgba(0,0,0,0.6));
}
编译结果为:
#box {
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6);
-webkit-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6);
-moz-box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6);
-ms-box-shaow: 2px 2px 4px rgba(0, 0, 0, 0.6);
}
五:参数高级用法:
.mixin (...) { // 接受 0-N 个参数 (...我猜测是任意个数的意思)
.mixin () { // 不接受任何参数
.mixin (@a: 1) { // 接受 0-1 个参数
.mixin (@a: 1, ...) { // 接受 0-N 个参数
.mixin (@a, ...) { // 接受 1-N 个参数(参数a没有默认值,表示强制要求这个参数) .mixin (@a, @rest...) {
// @rest 表示 @a 之后的参数
// @arguments 表示所有参数
}
六:!important
.box{
width:100px;
height:100px;
}
#facebox{
.box !important;
background-color:#edd;
}
编译后的结果为:
.box {
width: 100px;
height: 100px;
}
#facebox {
width: 100px !important;
height: 100px !important;
background-color: #edd;
}
Less学习(1)的更多相关文章
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
随机推荐
- 查看PublicKeyToken和生成PublicKeyToken
http://hi.baidu.com/honfei/item/7777500b20d8ff8a02ce1bd2
- ACM-ICPC 2018 南京赛区网络预赛Sum,线性筛处理积性函数
SUM 题意:f(n)是n可以拆成多少组n=a*b,a和b都是不包含平方因子的方案数目,对于a!=b,n=a*b和n=b*a算两种方案,求∑i=1nf(i) 首先我们可以知道,n=1时f(1)=1, ...
- js off动画事件
每个假期都过得如此快10月一是2017年最后一个假期.不由感叹时间过得真快.我已上个月离职,一直在家休整,今天得空吧前几天学习的知识真理一下. 今天主要整理关于,offset系列的,动画是咱们全都工作 ...
- windos系统下使tomcat按天生成控制台日志catalina.out
windos系统下的tomcat默认不会记录控制台catalina.out日志,只有访问日志,不便于排错 修改启动文件 1.打开bin下面的startup.bat文件,把 call "%EX ...
- 使用 python 编写一个授权登录验证的模块
使用 python 编写一个授权登录验证的模块 我们编写的思路: 1.登录的逻辑:如果用户名和密码正确,就返回 token . 2.生成 token 的逻辑,根据用户名,随机数,当前时间 + 2 小时 ...
- linux 搜索文件夹下的所有文件内容
find . -type f -name "*.*" | xargs grep "博客园"
- 为什么HashMap继承了AbstractMap还要实现Map?
前言 之前看源码一直忽略了这个现象,按理说HashMap的父类AbstractMap已经实现了Map,它为什么还要实现一次呢?遂上网查了一下,背后原因让人大跌眼镜. 原因 这是类库设计者的拼写错误,其 ...
- Kafka消息流处理
- openstack核心组件--cinder存储服务(6)
一.cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系 ...
- Spring-Kafka —— KafkaListener禁止自启动
应用服务启动时,KafkaListener默认会自动启动进行消费,如果想不自动消费,可以设置AutoStartup属性值为false @Override @KafkaListener(id = Con ...