教你使用Less快速开发CSS
俗话说,工欲善其事,必先利其器。好的工具不仅能有效提高工作效率,还能让你的工作完成得更好。而在前台开发领域就有很多很好用的工具,比方各种JS框架和库,以及少量预编译工具,就比方本文要讲到的Less,当然Sass同理,不再赘述。
本文不讲Less语法,重点要讲的是能利用它有效提高开发效率的思维方法,相关语法可以直接前往 Less官网 查看。
在大多数编程语言中,变量、循环、函数、类等特性能有效地减少重复代码的产生,从而提高工作效率。然而,CSS并不能算是严格意义上的编程语言,它并不具有这些特性(CSS变量除外,但个人觉得并不好用),而很多CSS属性又是我们经常需要书写的,因而即可能造成许多重复的代码,项目越大,重复工作就越多。
因而,Less闪亮登场,让你的代码写得less!
1. 初阶用法——封装属性
举个简单的例子,当我们要给一段文字设置样式时经常需要设置边距、字体、行高、颜色等样式,而写完这段文字样式,下一段文字又同样要写这些样式属性,只不过属性值可能不一样而已。那么,这些需要经常反复书写的属性名,能否可以进行封装简化呢?
答案当然是一定的,只要要使用Less中的 混合 功能即可以了。
例如,使用Less前的样式可以是这样的:
.p1{ margin-top: 10px; font-size: 24px; line-height: 1.5; color: #666;}.p2{ margin-top: 20px; font-size: 20px; line-height: 1; color: #fff; background-color: #000;}
而使用Less后……
// lib.less.mt(@top: 0){ margin-top: @top;}.fs(@size: 0){ font-size: @size;}.lh(@len: 1){ line-height: @len;}.c(@color: #fff){ color: @color;}.bgc(@color: #fff){ color: @color;}
@import 'lib.less'.p1{.mt(10px); .fs(24px); .lh(1.5); .c(#666);}.p2{.mt(20px); .fs(20px); .lh(); .c(); .bgc(#000);}
看到了吗?只要要一开始封装好一个Less库,而后引入这个库之后的代码即可以简短很多。CSS属性名大大简化,写得多了,你肯定会爱上这种写法的!
2. 进阶用法——封装样式块
有些时候我们为了实现一个效果,经常需要好几个样式属性共同实现,那么这时我们即可以把它们都封装到一起,而后只传入需要的属性值即可以了。
比方一个经典的横纵向居中的样式,有很多种实现方式,具体可以看看我之前总结的一篇文章《纯CSS七大居中方法》。我们就拿其中的 “Flexbox居中法” 来说吧,封装起来非常简单,甚至都不需要传任何参数:
.flex-center(){ display: flex; justify-content: center; align-items: center; }
假如你觉得这个名字还有点长,没关系,再缩下就好了,甚至可以只要要两个字母,只需你看到这个名字第一反应知道它是什么就行。比方这样:
.fc(){ display: flex; justify-content: center; align-items: center; }
再比方一个元素的宽高:
.wh(@w, @h){ width: @w; height: @w; }
调用也非常简单:
.wh(100px, 100px);
3. 高阶用法——封装单位
其实在写CSS时,我们写得最多的并不是CSS属性名,而是CSS属性值中的单位,就比方我们最常用单位px和rem,他们真的是无处不在,几乎每写一行CSS都得带上它,太烦了,能不能把它也一并封装起来呢?
答案当然也是一定的,下面我们就来看看这种神奇的用法。
同样拿上面举的段落样式的例子,继续封装简化后如下:
// lib.less@unit: 1px;.mt(@top: 0){ margin-top: @top * @unit;}.fs(@size: 0){ font-size: @size * @unit;}.lh(@len: 1){ line-height: @len;}.c(@color: #fff){ color: @color;}.bgc(@color: #fff){ color: @color;}
@import 'lib.less'.p1{.mt(10); .fs(24); .lh(1.5); .c(#666);}.p2{.mt(20); .fs(20); .lh(); .c(); .bgc(#000);}
而后你会惊奇地发现,所有单位都没有了,开心!
可是问题又来了,有些时候我们又得使用带单位的,那又该如何解决呢?
就比方字体大小font-size
,原本正常像上面那样写是没什么问题的,但是哪天我要是忽然要用em
单位呢?那么像这种必需使用非纯数字属性值时,上面那种纯数字使用方式就有问题了,这时我们即可以运用Less中的类型函数(判断值类型)和逻辑函数(根据不同值类型输出不同值)来处理这个问题。
还是以上面例子,我们稍加改动:
// lib.less@unit: 1px;.mt(@top: 0){ margin-top: if(isunit(@top,''),@top * @unit,@top);}.fs(@size: 0){ font-size: if(isunit(@size,''),@size * @unit,@size);}.lh(@len: 1){ line-height: @len;}.c(@color: #fff){ color: @color;}.bgc(@color: #fff){ color: @color;}
其中if()
是逻辑判断函数,而isunit()
是判断数值单位函数。
每次去判断数值单位也挺麻烦的,我们最好也把它封装一下:
// lib.less@unit: 1px;/* CSS键值对 */.css(@key, @val){ @{key}: if(isunit(@val,''),@val * @unit,@val);}.mt(@top: 0){ .css(margin-top,@top);}.fs(@size: 0){ .css(font-size,@size);}.lh(@len: 1){ line-height: @len;}.c(@color: #fff){ color: @color;}.bgc(@color: #fff){ color: @color;}
Nice!大功告成!接下来即可以“为所欲为”地使用它们了~
@import 'lib.less'.p1{.mt(10px); .fs(24); .lh(1.5); .c(#666);}.p2{.mt(20%); .fs(1em); .lh(); .c(); .bgc(#000);}
当不传单位时默认单位就是px
,当然这个默认单位你是可以根据使用情况来修改的,只要要更改最上面定义的那个@unit
值就可。
结束语
本人根据本文详情的方法自己组建了一个Less库(lib.less),现已开源,源码请戳→https://gitee.com/chchlsh/less-library,欢迎大家补充和完善!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 教你使用Less快速开发CSS