解读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 相关文章推荐
直接在JS里创建JSON数据然后遍历使用
Jul 25 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
Oct 20 Javascript
Javascript学习笔记之数组的遍历和 length 属性
Nov 23 Javascript
21个JavaScript事件(Events)属性汇总
Dec 02 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
May 19 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
浅谈js和css内联外联注意事项
Jun 30 Javascript
JavaScript数据结构链表知识详解
Nov 21 Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
May 22 Javascript
jQuery创建折叠式菜单
Jun 15 jQuery
微信小程序前端promise封装代码实例
Aug 24 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
php中用文本文件做数据库的实现方法
2008/03/27 PHP
mailto的使用技巧分享
2012/12/21 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
Javascript获取图片原始宽度和高度的方法详解
2016/09/20 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
JavaScript仿微信打飞机游戏
2020/07/05 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
layui添加动态菜单与选项卡 AJAX请求的例子
2019/09/25 Javascript
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
Python抓包并解析json爬虫的完整实例代码
2020/11/03 Python
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
HTML5中实现拖放效果无须借助javascript
2012/12/26 HTML / CSS
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
高一自我鉴定
2013/12/17 职场文书
毕业生的自我评价
2013/12/30 职场文书
中等生评语大全
2014/05/04 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
2016年大学校运会广播稿件
2015/12/21 职场文书
进行数据处理的6个 Python 代码块分享
2022/04/06 Python
Nginx如何配置根据路径转发详解
2022/07/23 Servers