解读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 相关文章推荐
HTML上传控件取消选择
Mar 06 Javascript
javascript的数组和常用函数详解
May 09 Javascript
2014 HTML5/CSS3热门动画特效TOP10
Dec 07 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
Sep 27 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 Javascript
SWFUpload多文件上传及文件个数限制的方法
May 31 Javascript
微信小程序 wxapp内容组件 icon详细介绍
Oct 31 Javascript
JS扩展类,克隆对象与混合类实例分析
Nov 26 Javascript
BootStrap 模态框实现刷新网页并关闭功能
Jan 04 Javascript
Node.js之readline模块的使用详解
Mar 25 Javascript
浅谈Layui的eleTree树式选择器使用方法
Sep 25 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性能的21种方法介绍
2013/06/25 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
基于js 字符串indexof与search方法的区别(详解)
2017/12/04 Javascript
原生JS实现$.param() 函数的方法
2018/08/10 Javascript
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
python sort、sorted高级排序技巧
2014/11/21 Python
Python中使用select模块实现非阻塞的IO
2015/02/03 Python
详解python中的Turtle函数库
2018/11/19 Python
python使用writerows写csv文件产生多余空行的处理方法
2019/08/01 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
解决python Jupyter不能导入外部包问题
2020/04/15 Python
树莓派升级python的具体步骤
2020/07/05 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
自荐书封面下载
2013/11/29 职场文书
家长对老师的感言
2014/03/11 职场文书
奠基仪式主持词
2014/03/20 职场文书
参观邀请函范文
2015/02/02 职场文书
公司财务管理制度
2015/08/04 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书
vue3中的组件间通信
2021/03/31 Vue.js
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
python使用shell脚本创建kafka连接器
2022/04/29 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python