通过bootstrap全面学习less


Posted in Javascript onNovember 09, 2016

        很早之前就听说过less了,但是一直拖着没去学习。最近抽空看了less,其实语法很简单,看一遍基本就知道怎么用了。但是问题又来了,那我在什么时候用less呢。平时自己写页面用less的话,感觉是方便了些,但是难道好处就只是这样?

刚好最近也在学习bootstrap,发现其源文件就是用less写的,看了之后,我才深深体会的less的强大,对less也有了更深一层的理解。

1、Less是什么?

LESS CSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护。

有些人可能没有接触过less,那我们就先可以简单的看看less的一些特性。

2、语言特性快速预览:

变量:
变量允许我们单独定义一系列通用的样式,然后在需要的时候去调用。所以在做全局样式调整的时候我们可能只需要修改几行代码就可以了。

LESS源码:

@color: #4D926F;

#header {
 color: @color;
}
h2 {
 color: @color;
}

编译后的CSS:

#header {
 color: #4D926F;
}
h2 {
 color: #4D926F;
}

混合(Mixins)
混合可以将一个定义好的class A轻松的引入到另一个class B中,从而简单实现class B继承class A中的所有属性。我们还可以带参数地调用,就像使用函数一样。

LESS源码:

.rounded-corners (@radius: 5px) {
 -webkit-border-radius: @radius;
 -moz-border-radius: @radius;
 -ms-border-radius: @radius;
 -o-border-radius: @radius;
 border-radius: @radius;
}

#header {
 .rounded-corners;
}
#footer {
 .rounded-corners(10px);
}

编译后的CSS:

#header {
 -webkit-border-radius: 5px;
 -moz-border-radius: 5px;
 -ms-border-radius: 5px;
 -o-border-radius: 5px;
 border-radius: 5px;
}
#footer {
 -webkit-border-radius: 10px;
 -moz-border-radius: 10px;
 -ms-border-radius: 10px;
 -o-border-radius: 10px;
 border-radius: 10px;
}

嵌套
我们可以在一个选择器中嵌套另一个选择器来实现继承,这样很大程度减少了代码量,并且代码看起来更加的清晰。

LESS源码:

#header {
 h1 {
 font-size: 26px;
 font-weight: bold;
 }
 p {
 font-size: 12px;
 a {
 text-decoration: none;
 &:hover {
 border-width: 1px
 }
 }
 }
}

编译后的CSS:

#header h1 {
 font-size: 26px;
 font-weight: bold;
}
#header p {
 font-size: 12px;
}
#header p a {
 text-decoration: none;
}
#header p a:hover {
 border-width: 1px;
}

函数和运算

运算提供了加,减,乘,除操作;我们可以做属性值和颜色的运算,这样就可以实现属性值之间的复杂关系。LESS中的函数一一映射了JavaScript代码,如果你愿意的话可以操作属性值。

LESS源码:

@the-border: 1px;
@base-color: #111;
@red: #842210;

#header {
 color: (@base-color * 3);
 border-left: @the-border;
 border-right: (@the-border * 2);
}
#footer {
 color: (@base-color + #003300);
 border-color: desaturate(@red, 10%);
}

编译后的CSS:

#header {
 color: #333;
 border-left: 1px;
 border-right: 2px;
}
#footer {
 color: #114411;
 border-color: #7d2717;
}

想具体学习less,可以访问 http://www.1024i.com/demo/less/document.html

3、bootstrap中less的使用

下载 Bootstrap,解压缩文件。Bootstrap 的 Less 组件位于less目录下,其中包含至少20多个less文件,那为什么要分成这么多个呢?主要是方便开发,后期也便于维护,另外就是便于用户修改样式。

开发人员在编写样式的时候,首先对页面的元素和作用效果进行分离,比如form,button,responsive,tables等等。然后分别编写,虽然是独立编写,但是有些样式是全局要用的,比如提醒的颜色,页面的背景色都是同一种。但是less文件很可能是多个人同时编写的,那怎么来确保样式的统一呢。这时候,less的作用就显现出来了。

我们可以看看 variables.less 文件里的内容,下面节选了一部分:

// Grays
// -------------------------
@black:  #000;
@grayDarker: #222;
@grayDark: #333;
@gray:  #555;
@grayLight: #999;
@grayLighter: #eee;
@white:  #fff;

/*
.........省略部分.....................
*/

// Typography
// -------------------------
@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif;
@serifFontFamily: Georgia, "Times New Roman", Times, serif;
@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace;

@baseFontSize: 14px;
@baseFontFamily: @sansFontFamily;
@baseLineHeight: 20px;
@altFontFamily: @serifFontFamily;

@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily
@headingsFontWeight: bold; // instead of browser default, bold
@headingsColor: inherit; // empty to use BS default, @textColor

从上面可以看出,开发人员已经为一些常用的样式变成变量的形式。并且每一个变量的名字都很具体,只要一看就知道这是要设置什么。那具体是怎样用的呢?我们来看看buttons.less文件,同样是节选部分:

// Base styles
// --------------------------------------------------

// Core
.btn {
 display: inline-block;
 .ie7-inline-block();
 padding: 4px 12px;
 margin-bottom: 0; // For input.btn
 font-size: @baseFontSize;
 line-height: @baseLineHeight;
 text-align: center;
 vertical-align: middle;
 cursor: pointer;
 .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75));
 border: 1px solid @btnBorder;
 *border: 0; // Remove the border to prevent IE7's black border on input:focus
 border-bottom-color: darken(@btnBorder, 10%);
 .border-radius(@baseBorderRadius);
 .ie7-restore-left-whitespace(); // Give IE7 some love
 .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)");

怎么样,是不是很方便。妈妈再也不用担心我傻傻写错样式了。上面只是列举了了变量这一特性是使用,当然你还可以在其他文件上发现其他特性的使用。

4、合并编译less文件

文件都写好了,那怎么把它变成bootstrap.css呢。这里有个文件很重要,那就是bootstrap.less。最后只需要编译该文件就可以得到css文件了。我们来看看里面到底写了啥:

// Core variables and mixins
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
@import "mixins.less";

// CSS Reset
@import "reset.less";

// Grid system and page structure
@import "scaffolding.less";
@import "grid.less";
@import "layouts.less";

// Base CSS
@import "type.less";
@import "code.less";
@import "forms.less";
@import "tables.less";

// Components: common
@import "sprites.less";
@import "dropdowns.less";
@import "wells.less";
@import "component-animations.less";
@import "close.less";

// Components: Buttons & Alerts
@import "buttons.less";
@import "button-groups.less";
@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less

// Components: Nav
@import "navs.less";
@import "navbar.less";
@import "breadcrumbs.less";
@import "pagination.less";
@import "pager.less";

// Components: Popovers
@import "modals.less";
@import "tooltip.less";
@import "popovers.less";

// Components: Misc
@import "thumbnails.less";
@import "media.less";
@import "labels-badges.less";
@import "progress-bars.less";
@import "accordion.less";
@import "carousel.less";
@import "hero-unit.less";

// Utility classes
@import "utilities.less"; // Has to be last to override when necessary

bootstrap.less作用是将其他less文件全部引入,但是引入的顺序还是有要求的。比如先引入 variables.less 和 mixins.less,是因为后面的less文件用到的less特性都是来自于这两个文件的,如果不先引入,就会出现编译错误的问题。然后再引入 reset.less 重置原有的样式。接着引入网格系统的相关文件,这是整个网格系统建立的关键所在。然后引入一些公用的组件,特定组件,最后就是一些无家可归但是比较有用的样式样式文件:utilities.less。

最后要做的就是编译bootstrap.less生成bootstrap.css文件。

编译方法:

如果你用的编辑器是 sublime text 安装less2css插件,使用需要nodejs环境,还有一个less的插件(这个你在使用的时候会提醒你缺少某个插件,然后安装就可以了)。
用前面说的gulp工具,已经给出教程了

总结:

通过对bootstrap源码文件的分析,既了解到了less的作用,也明白预处理器流行的原因。其中有很多思想是值得我们学习的。比如编写一个样式框架要考虑哪些因素,如何分工合作等等。

如果你写的页面,样式比较少,不推荐使用less,有点麻烦。当然如果你配置好相关环境了(比如工作中使用gulp或webpack来实现自动化)也就不用在乎了。

如果你要写的样式比较多,推荐使用less。

另外bootstrap官网提供样式定制,如果变动比较小的话,推荐直接修改bootstrap源文件,重新编译就好。

如果大家还想深入学习,可以点击这里进行学习,再为大家附3个精彩的专题:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
我也种棵OO树JXTree[js+css+xml]
Apr 02 Javascript
pjblog中的UBBCode.js
Apr 25 Javascript
Javascript中arguments对象详解
Oct 22 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
Feb 02 Javascript
js实现透明度渐变效果的方法
Apr 10 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
Dec 26 Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 Javascript
详解Vue路由开启keep-alive时的注意点
Jun 20 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
Dec 22 Javascript
详解Vue的列表渲染
Nov 20 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
Nov 09 #Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 #Javascript
jQuery之动画效果大全
Nov 09 #Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 #Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 #Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
Nov 09 #Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 #Javascript
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php whois查询API制作方法
2011/06/23 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP实现合并discuz用户
2015/08/05 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
深入理解JS中的变量及作用域、undefined与null
2014/03/04 Javascript
nodejs批量修改文件编码格式
2015/01/22 NodeJs
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
浅析Vue 中的 render 函数
2020/02/28 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python的dict,set,list,tuple应用详解
2014/07/24 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python机器学习包mlxtend的安装和配置详解
2019/08/21 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
HTML5拖放功能_动力节点Java学院整理
2017/07/13 HTML / CSS
Skyscanner新西兰:全球领先的旅游搜索网站
2019/08/26 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
保护环境倡议书500字
2014/05/19 职场文书
宣传口号大全
2014/06/16 职场文书
课外活动总结范文
2014/07/09 职场文书
公证委托书标准格式
2014/09/11 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
党员评议自我评价
2015/03/03 职场文书
成人成长感言如何写?
2019/08/16 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers