解读Bootstrap v4 sass设计


Posted in Javascript onMay 29, 2016

首先关于bootstrap从v3的less转到v4的sass的十万个为什么,这里暂且不表(计划会另起一篇文章对比less,sass,postcss)。

一起走进bootstrap v4 sass

1、bootstrap的sass文件都放在scss目录,为什么名字是scss而不是sass呢?主要涉及到sass与scss两种语法的区别,scss语法更接近css,所以更受大家喜爱,使用更广泛。具体可参考 sass 语法

2、scss文件分为两种,一种是以下划线开头的如 _variables.scss ,一种是没有下划线的如 bootstrap.scss ,这两个的区别是前者表示被导入的文件,默认不会编译成对应的css文件,而后者会编译对应的css文件。所以如果有两个文件 _a.scss , b.scss 默认编译结果是只有 b.css 文件,如果b要使用 _a.scss 中的样式,那么可以使用导入功能 @import a (导入的文件是可以省略下划线及文件后缀名的)。具体也可参考 sass 语法

3、如果编译整个scss目录,我们可以得到四个css文件,分为是 bootstrap.css , bootstrap-flex.css , bootstrap-reboot.css , bootstrap-grid.css ,这四个css样式分别由下面的四个scss文件生成。

解读Bootstrap v4 sass设计

bootstrap-reboot为重置样式,bootstrap-grid为网格样式,这两个可以看作赠送的单独样式,如果某些场景你不想使用整个bootstrap样式,但是又想用它的重置或网格系统,那么可以直接使用这两个。

bootstrap和bootstrap-flex的区别是前者使用传统的布局方式,后者用的是的是flex方式,所以可以根据自己的实际情况选择使用。从上面图上可以看到 bootstrap-flex.scss 在导入 bootstrap.scss 之前,重置了 $enable-flex: true

4、打开 bootstrap.scss ,可以看到里面导入了各种文件,整体分为6大块,分别为:

variable & mixin:引入变量及mixin文件,其中 _mixin.scss 文件中导入了mixin目录中的所有文件
reset:引入normalize 及 print文件
core:引入基础样式文件,如grid,form,table,button等
component:引入组件文件,如nav,card,breadcrumb等
component js:引入需要js控制的组件文件,如modal,tooltips等
utility:引入一些全站的class文件,里面有些通用的class,如clearfix,center-block等

如何使用并修改bootstrap v4的样式

如果你对sass熟悉的话,可以直接使用其sass;当然如果你不熟悉sass的话,可以到目录dist/css中找到编译好的 bootstrap.css 。

下面我们先说下直接使用css的:

在html中引入 <link href="bootstrap.css" rel="stylesheet" />
如需修改bootstrap样式,可另建一个样式表如 style.css ,覆盖bootstrap样式。不建议直接修改打开 bootstrap.css 样式表修改既然是用sass写的,那当然我们可以选择更高逼格的sass了,同样sass也有两种修改办法,一种是非破坏性的,一种是破坏性的。

对于破坏性的,那就是哪里不合意就修改哪里了,没什么好招。这里说下对于非破坏性的使用修改,我们可以采用如下方法:

把bootstrap的所有scss文件放在bootstrap目录

scss
bootstrap 目录 (原先bootstrap中scss目录所有文件)
bootstrap.scss
...
mixin目录
...
_custom-variables.scss (自定义的变量,或覆盖bootstrap的变量)
_custom-mixin.scss(自定义的mixin)
style.scss

style.scss 代码如下:

@charset "UTF-8";
// 导入文件
@import "custom-variables";
@import "custom-mixin";
@import "bootstrap/bootstrap";

当然如果有代码洁癖的,那对于不用的样式总是想砍掉的,于是重新拿起 bootstrap.scss 审视,把那些不需要的样式,直接去掉import不就好了吗。如果考虑到以后升级什么的,那还是建立个新文件,想要什么就自己按照 bootstrap.scss 中的方法引入就可以了。对于组件样式,需要就引入,不需要就不引入,但是一定要注意core与utility的样式,因为说不定你的组件中就用了这些基础的样式

如何改进bootstrap v4的sass设计

从个人实战的经验角度出发,觉得bootstrap v4有如下几点缺陷:(仅为个人观点)

可以进一步进行目录规划,如把所有的组件文件都放在component目录,utility文件放在utility目录,那样看起来更有组织性,现在有点零散,看上去有点乱
没有 % 设计,个人觉得 % 的设计是一个进步,对于样式的组合申明非常有效,尤其是一些简短的兼容代码什么的。

可提供一个scss文件,整合了variables和mixin的功能,那样就可以方便新起样式文件,直接导入这个整合的文件,variables和mixin随便用组件的变量申明,可以放在各自的组件scss中,因为只有组件会用,而不是统一放在variables文件,这样显得variables文件比较臃肿mixin设计有点太多,连size都有一个mixin文件,感觉有点过。

Javascript 相关文章推荐
extjs 学习笔记 四 带分页的grid
Oct 20 Javascript
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
js二维数组定义和初始化的三种方法总结
Mar 03 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
Oct 31 Javascript
浏览器兼容的JS写法总结
Apr 27 Javascript
什么是JavaScript中的结果值?
Oct 08 Javascript
Bootstrap实现各种进度条样式详解
Apr 13 Javascript
JavaScript编程设计模式之构造器模式实例分析
Oct 25 Javascript
浅谈关于iview表单验证的问题
Sep 29 Javascript
React中Ref 的使用方法详解
Apr 28 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
May 29 #Javascript
深入理解js数组的sort排序
May 28 #Javascript
深入理解js函数的作用域与this指向
May 28 #Javascript
js和C# 时间日期格式转换的简单实例
May 28 #Javascript
JS函数arguments数组获得实际传参数个数的实现方法
May 28 #Javascript
深入理解JS函数的参数(arguments)的使用
May 28 #Javascript
深入理解js中this的用法
May 28 #Javascript
You might like
PHP+DBM的同学录程序(1)
2006/10/09 PHP
php缓存技术介绍
2006/11/25 PHP
PHP insert语法详解
2008/06/07 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
利用vue写todolist单页应用
2016/12/15 Javascript
详解vue之页面缓存问题(基于2.0)
2017/01/10 Javascript
浅谈Vue.js
2017/03/02 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
python发送邮件接收邮件示例分享
2014/01/21 Python
python实现udp数据报传输的方法
2014/09/26 Python
Python回调函数用法实例详解
2015/07/02 Python
python3中str(字符串)的使用教程
2017/03/23 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
使用Python微信库itchat获得好友和群组已撤回的消息
2018/06/24 Python
详解Python用户登录接口的方法
2019/04/17 Python
python中的列表和元组区别分析
2020/12/30 Python
采用怎样的方法保证数据的完整性
2013/12/02 面试题
幼教简历自我评价
2014/01/28 职场文书
四查四看剖析材料
2014/02/14 职场文书
产品开发计划书
2014/04/27 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
中学生国庆节演讲稿2015
2015/07/30 职场文书
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers