手摸手教你bootstrap定制
老实说我一直不太喜欢使用bootstrap,bootstrap样式组件虽然丰富但实际开发使用到的不多;栅格系统虽然好用,满屏div也是看的头疼;所以当经理说要用bootstrap开发新项目的时候,我内心是抵触的,在讨论上,我也提出了如下几个问题:
1.栅格化布局不支持小数点。(若UI设计的不合理,算出来可能就是col-md-7.5,但bootstrap不支持小数点)
2.bootstrap核心优势是响应式布局,目前需求是PC适配,有点大材小用。(事实上是组长需求弄错了,项目要求是多端适配响应式布局...)
3.样式组件丰富但存在很多使用不到的样式。(class很多,用来用去的不多,更多还是得后期样式实现)
4.dom层数嵌套较高,自带槽宽比较浪费空间。(html文件满屏的div可读性差,自带左右15px padding的槽宽很浪费页面空间)
5.针对自适应,当下存在更轻量的插件。(vw,rem,%布局等等)
然后经理就说了,需求是要做响应式布局,针对bootstrap这些问题解决方案肯定还是有的,在被组长乱说的需求坑了之后,问题还是得解决啊,于是发现了bootstrap的定制功能(针对V3版本),不得不承认自己对于bootstrap的使用层面还是太表面了。
那么站在定制的角度我大致从两方面入手:文件减量,把不需要的样式表过滤掉;样式重置,把必要的但不太符合心意的样式给重置掉(比如贼浪费空间的槽宽)。

贰 ❀ 文件减量
点开bootstrap定制,可以看到文件选择框和很多属性定制输入框;文件选择就是把你需要的文件打钩,在下载bootstrap时会帮你打包进去,不打钩的文件不会包含,这样就很人性了。
在定之前bootstrap希望你阅读文档中的全局CSS样式,组件,JavaScript插件这三块,再根据自己项目需求决定需要哪些文件,这里我已经完整阅读过了。
我将这些文件大致分为:必要(一定需要),可用(用了省事,不使用就自己定义),非必要(一般用不上)三类。
1.关于通用 CSS
Print media styles:必要,用于设备检测,在不同宽度启用不同的样式表,比如电脑上应用md,平板应用sm,手机应用xs等。
Typography:必要,包括根字体大小,字体类型,h1-h6大小,默认行高以及ul去除默认list-style等属性,支持定制,使用起来还是比较方便的。
Code:非必要,对<kbd>标签进行了样式定制,用处不大。
Grid system:必要,栅格系统。
Tables:非必要,我这边明确规定不允许使用table布局,这个就不考虑了。
Forms:可用,表单组,注册登录少不了。
Buttons:可用,按钮组,通过后期定制按钮颜色用起来也比较方便。
Responsive utilities:可用,用于控制dom显示应用,比如PC的导航栏在移动端得替换成下拉式的菜单栏,会使用到。
2.关于样式组件
bootstrap中的样式组件就是官方提前封装好的样式组,比如给一个按钮添加btn btn-default两个class就能实现一个灰色风格的按钮,我们一样能通过定制修改部分组件风格。
Glyphicons:非必要,字体图标全家桶,不支持个别下载,我这边是UI制作,就不使用了
Button groups:可用,与通用css中的Button结合使用。
Input groups:可用,与Forms结合使用,用于定义表单样式。
Navs,Navbar:非必要,导航相关,bootstrap的导航为了保证功能丰富性,封装了样式与JS逻辑,比较复杂,如果自身功能不算复杂,还是建议自己实现。
Breadcrumbs:非必要,面包屑导航,根据项目需求决定是否需要。
Pagination,Pager:可用,页码相关,提供页面数量展示,跳转相关功能。

Labels:非必要,文字标签,类似与按钮组的配色。

Badges:非必要,类似与未读信息数字显示效果。

Jumbotron:非必要,巨幕,特大的文字效果。

Thumbnails:可用,缩略图效果,正常项目开发总有地方可以使用。
Alerts,Close icon:可用,弹窗与关闭,我这边使用的是sweetAlert插件,相对更好用一点,这里就不使用了。
Progress bars:可用,进度条效果,可添加百分比数字,修改颜色动画效果,根据需求决定是否需要。

Media items:非必要,类似于博客评论,左边头像,右边是本文信息。

List groups:非必要,这个是真的没啥特点,类似于为每个li添加了高度与边框效果。

Panels:非必要,设置基本的边框(border)和内补(padding)来包含内容。

Responsive embed:非必要,用于嵌套标签自适应,例如 <iframe>,<video>类。
well:非必要,与Panels类似,只是多了个圆角效果。
3.关于JavaScript组件/JQ插件
js组件这款我这边都没使用,很多组件并不能完全满足需求,所以这里就只做简单介绍。
Component animations:如果使用bootstrap js组件,建议勾选此项,提供组件动画过渡效果。
Dropdown:下拉组件,点击展示下拉框,一般在导航条展示更多信息会使用。

Tooltip:小提示框,类似title属性的效果。

Popover:大提示框,也是用于提示信息。

Modal:模态框,也就是弹窗效果。

Carousel:轮播图。
所以我最终勾选的文件大概就是这样:

叁 ❀ 样式定制
聊完文件过滤,简单说下bootstrap样式定制的问题,定制其实有两种手段,一是直接通过定义reset样式表进行覆盖,二是通过bootstrap自带的定制功能进行定制。
支持定制的属性其实对应了上面介绍的css组件以及通用css文件,属性较多也没办法一一介绍,这里就介绍几个常用的。
1.解决槽宽问题
找到Grid system下的@grid-gutter-width属性,修改为0后,槽宽将全部变成0,你甚至还能修改栅格系统的分栏数,默认是12,当然不推荐修改栏数。
2.重置常用标签的默认padding、margin为0
找到Typography下的@line-height-computed属性,修改为0,这样bootstrap为很多元素添加的padding与margin就都没有了。
Typography中你还能定义默认字号,字体类型,h1-h6大小等。
3.通用颜色
bootstrap的按钮组,以及在样式组件中介绍的Labels组,它们使用的颜色都是提前定义好的,也是支持定制的。
找到color下的brand-primary此类变量,这些变量对应了btn不同风格的颜色,比如成功,警告,可根据喜好执行定制。
4.a标签颜色与文字颜色
找到Scaffolding,@text-color变量对应了文本颜色,而后面@link-color变量对应了a标签的颜色,a标签hover状态颜色,是否有下划线等。
大概定制这些后,点击下载,你会发现bootstrap文件小了很多,毕竟少了很多非必要文件,我们再看看风格,注意标签之间的margin、槽宽、按钮颜色都得到了改变。


在点击下载时,页头会给出一个错误提示,它告诉你定制配置部分保存失败,也就是目前的定制功能是有问题的。

比如我在定制时,原以为修改color的颜色变量就能修改button颜色,事实上还得修改button定制区域的颜色,部分定制可能并不如你所想。
我专门去查了下相关问题,bootstrap作者也说了bootstrap3在未来可能会取消掉定制功能。

所以还是推荐第二种做法,自定义reset样式表去覆盖bootstrap部分默认样式,这里我写了一个最基本的reset表,只重置了槽宽和标签padding margin,你可以以此文件为基础新增部分重置样式。
/* 此文件为bootstrap样式重置文件 */ /* 重置bootstrap槽宽 */
.col-xs-1,
.col-sm-1,
.col-md-1,
.col-lg-1,
.col-xs-2,
.col-sm-2,
.col-md-2,
.col-lg-2,
.col-xs-3,
.col-sm-3,
.col-md-3,
.col-lg-3,
.col-xs-4,
.col-sm-4,
.col-md-4,
.col-lg-4,
.col-xs-5,
.col-sm-5,
.col-md-5,
.col-lg-5,
.col-xs-6,
.col-sm-6,
.col-md-6,
.col-lg-6,
.col-xs-7,
.col-sm-7,
.col-md-7,
.col-lg-7,
.col-xs-8,
.col-sm-8,
.col-md-8,
.col-lg-8,
.col-xs-9,
.col-sm-9,
.col-md-9,
.col-lg-9,
.col-xs-10,
.col-sm-10,
.col-md-10,
.col-lg-10,
.col-xs-11,
.col-sm-11,
.col-md-11,
.col-lg-11,
.col-xs-12,
.col-sm-12,
.col-md-12,
.col-lg-12,
.container-fluid,
.container {
padding-right:;
padding-left:;
} .row {
margin-right:;
margin-left:;
} /* 重置标题h1-h6上下外边距与行高 */
h1,
.h1,
h2,
.h2,
h3,
.h3,
h4,
.h4,
h5,
.h5,
h6,
.h6 {
margin-top:;
margin-bottom:;
} /* 重置列表下外边距 */
ul,
ol {
margin-bottom:;
} /* 重置p标签外边距 */
p {
margin:;
} /* 重置按钮组宽高与内边距 */
.btn {
padding:;
width: 150px;
height: 40px;
line-height: 40px;
} /* 重置表单输入框样式内边距 */
.form-group {
margin-bottom:;
} label {
margin-bottom:;
} .form-control {
padding: 0 0 0 5px;
}
肆 ❀ 总
那么到这里对于bootstrap文件过滤与样式定制介绍完毕,顺便聊聊开头我提出的问题。
关于设计图折算为栅格栏存在小数点问题,这个问题其实属于UI设计的问题,其实在制作原型图时就应该按栅格化系统来设计稿纸,布局占栅格化几栏就是几栏,严格意义上不应该存在栏数还有小数点的情况。
关于槽宽和样式使用不多问题,这里通过定制已经可以做到满足需求;而对于dom层数嵌套过多问题,这个真的得开发者把控,bootstrap开发确实存在满屏div标签的问题。
那么就写到这里了,希望这篇文章对你有所帮助。
手摸手教你bootstrap定制的更多相关文章
- iOS动画进阶 - 手摸手教你写 Slack 的 Loading 动画
如果移动端访问不佳,可以访问我的个人博客 前几天看了一篇关于动画的博客叫手摸手教你写 Slack 的 Loading 动画,看着挺炫,但是是安卓版的,寻思的着仿造着写一篇iOS版的,下面是我写这个动画 ...
- 手摸手教你如何在 Python 编码中做到小细节大优化
手摸手教你如何在 Python 编码中做到小细节大优化 在列表里计数 """ 在列表里计数,使用 Python 原生函数计数要快很多,所以尽量使用原生函数来计算. &qu ...
- 手摸手教你微信小程序开发之自定义组件
前言 相信大家在开发小程序时会遇到某个功能多次使用的情况,比如弹出框.这个时候大家首先想到的是组件化开发,就是把弹出框封装成一个组件,然后哪里使用哪里就调用,对,看来大家都是有思路的人,但是要怎样实现 ...
- 手摸手教你让Laravel开发Api更得心应手
https://www.guaosi.com/2019/02/26/laravel-api-initialization-preparation/ 1. 起因 随着前后端完全分离,PHP也基本告别了v ...
- 【转】手摸手,带你用vue撸后台 系列三(实战篇)
前言 在前面两篇文章中已经把基础工作环境构建完成,也已经把后台核心的登录和权限完成了,现在手摸手,一起进入实操. Element 去年十月份开始用vue做管理后台的时候毫不犹豫的就选择了Elemen, ...
- 【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不 ...
- 【转】手摸手,带你用vue撸后台 系列一
前言 说好的教程终于来了,第一篇文章主要来说一说在开始写业务代码前的一些准备工作吧,但这里不会教你webpack的基础配置,热更新怎么做,webpack速度优化等等,有需求的请自行google. 目录 ...
- 手摸手带你用Hexo撸博客(一)
原文地址 手摸手带你用Hexo撸博客(一) 环境搭建 安装 node 狂点下一步 命令行输入此条命令 如果能看到版本号则安装成功 node -v 安装Git (同上) 实在不会的小伙伴百度一下,教程很 ...
- 手摸手,和你一起学习 UiPath Studio
学习 RPA 的路上坑比较多,让我们手摸手,一起走…… 以下是一些学习 UiPath 和 RPA 的资源, 拿走不用谢! UiPath Studio 中文文档 机器人流程自动化其实是很好的概念和技术, ...
- 【转】手摸手,带你用vue撸后台 系列二(登录权限篇)
前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自己是一个业务猿,每天被我司的产品虐的死去活来,之前又病了一下休息了几天,大家见谅. 进入正题,做后台项目区别于做其它的项目,权限验证与安全性是非常 ...
随机推荐
- Python基础语法-List
列表的操作方法 列表中存放的数据是可以进行修改的,比如"增"."删"."改"" 添加元素("增" append ...
- [C]链接和生存周期
链接和生存周期的区别: 链接是标识符的属性: 生存周期是对象的属性: 链接可以是外部(external),内部(internal)或没有(none): 生存周期可以是自动的.静态的,或已分配的(all ...
- Registering current configuration as safe fallback point
14:28:23,255 |-INFO in ch.qos.logback.core.joran.spi.ConfigurationWatchList@f5f2bb7 - URL [jar:file: ...
- Codeforces 1238 D. AB-string
思维题 这次cf思维题好多啊 定义了good string 指一个串,其中每一个字符都属于一个长度>=2 的回文串的一部分.叫你求一个串中有几个good substring. 显然ab串 goo ...
- Delphi xe 10.3.2-快递接口封装-【快递鸟(即时查询和单号识别)】
编译环境:Windows 7 +Delphi xe 10.3.2 封装了快递鸟接口,注意的坑:MD5要转为小写. function TKDniaoAPI.StrtoMd5(const str: str ...
- SpringBoot2.0 整合 FastDFS 中间件,实现文件分布式管理
本文源码:GitHub·点这里 || GitEE·点这里 一.FastDFS简介 1.FastDFS作用 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步 ...
- Postman安装出错.NET Framework 4.5 failed to install
正常情况下安装Postman不会出错,联网下载即可,这里的异常是因为环境不允许升级.NET4.5 解决方法:找到Postman的安装文件夹,将postman.exe启动发现可以使用 若没有安装过的文件 ...
- Mysql - 开发技巧(二)
本文中的涉及到的表在https://github.com/YangBaohust/my_sql中 本文衔接Mysql - 巧用join来优化sql(https://www.cnblogs.com/dd ...
- Hbase数据结构和shell操作
Hbase的数据结构 基本要素:命名空间.表.行.列.单元格,region,时间戳. 1.命名空间:NameSpaces的作用 Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果 ...
- 关于如何获取项目所部署的本机IP和端口的问题
关于如何获取项目所部署的本机IP和端口的问题 今天在写一个需求的时候碰到一个不常见的问题,在没有继承或者实现服务器提供的接口或者实现类的时候,比如说部署在tomacat上,某个类不去继承servelt ...