深入理解bootstrap框架之第二章整体架构


Posted in Javascript onOctober 09, 2016

一. 整体架构

深入理解bootstrap框架之第二章整体架构

1. CSS-12栅格系统

把网页宽度均分为12等分(保留15位精度)——这是bootstrap的核心功能。

2.基础布局组件

包括排版、按钮、表格、布局、表单等等。

3.jQuery

bootstrap插件的基础

4.响应式设计

兼容多个终端。这是bootstrap的终极理念。

5.css插件

提供丰富的样式。

6.js插件

二. 栅格系统

1.基本实现过程

定义容器的大小——跳转边距——媒询

有以下要求:

(1)一行(row)数据必须包含在.container中。

.container默认居中。宽度分为4种,超小屏(100%),小屏(750px),中屏(970px),大屏(1170px)。row的边距(左右margin,下同)是-15px。

(2)有了row,才能搭建列(col)。所有组件必须放在col内,只有col才能作为row的直接子元素。

.col的左右内边距(padding-left,right)为15px。也就是说,最小的col有30px。

(3)在以上基础上快速搭建布局

(4)col之间是木有边距的,应当使用padding来产生col的视觉距离。这样做会导致一个row容不下12个col,这时应当用负的margin来抵消padding的影响。

(5)栅格系统是通过指定1-12的值来设定范围的。对于col的规格,开发者指定了4个不同的屏幕

深入理解bootstrap框架之第二章整体架构

如图,在<body class="container">内包含若干个<div class="col-md-“1-12数字”">col-md-“1-12数字”></div>效果是

深入理解bootstrap框架之第二章整体架构

小结: col组合其实就用了两个属性:float:left和width%。

2. 实现方案

(1)偏移(.col-尺寸大小-offset-*)

把整个col向右边偏移,在源码实现上,.col-尺寸大小-offset-x 就是margin-left:8.33333333333...*x;

情景一:页面主体只占据container的66%,而且居中。

解决方案:col-md-offset-2——向右偏移了2个col。

<div class="col-md-8 col-md-offset-2">col-md8</div>

深入理解bootstrap框架之第二章整体架构

情景二:宽度足够的情况下,我不想所有的col紧紧挨在一起。两个要有1个col的距离。

<div class="col-md-8">col-md8</div>
<div class="col-md-3 col-md-offset-1">col-md3</div>

深入理解bootstrap框架之第二章整体架构

(2)嵌套

栅格系统的col是可以针对父级的row进一步再进行百分比的划分,比如说:

<div class="row">
<div class="col-sm-12">我是整行<br>
<div class="col-sm-6">我是一半
<div class="row">
<div class="col-sm-6">我是6/12*6/12=1/4</div>
</div>
</div>
<div class="col-sm-6"></div>
</div>
</div>

深入理解bootstrap框架之第二章整体架构

(3)排序

强行把当前列向左或者向右推拉

只有两个语句:col-尺寸大小-push-*()和col-尺寸大小-pull-*()

<div class="row">
<div class="col-sm-3 col-sm-push-6" style="background: #abc">col3</div>
</div>

深入理解bootstrap框架之第二章整体架构

col3被强行推了6格。同理<div class="col-sm-3 col-sm-pull-1" style="background: #abc">col3</div>是向左拉了一格。

效果相当于绝对定位。在源码实现上,也是做定位:

.col-md-pull-8 { right: 66.66666666666666%;}

3.响应式栅格若干问题

看起来12列栅格布局实现得很死板,但是组合屏幕尺寸,方案就非常多了

深入理解bootstrap框架之第二章整体架构

(1)跨设备组合

比如我要为自己的网页做一适配小屏和中屏的版本,可以把类叠加到class上。

<div class="col-sm-6 col-md-3" style="background: #abc">col3</div>

在中屏表现是1/4。

深入理解bootstrap框架之第二章整体架构

到了小屏,表现为1/2

深入理解bootstrap框架之第二章整体架构

如果我定义一个

<div class="col-xs-3" style="background: #abc">col3</div>

到了大屏,依然占25%。

结论:屏幕尺寸向大兼容。向小肯定不兼容!

(2)清除浮动

情景:在小屏幕上一行显示4个col3,在超小屏幕上一行显示2个col6,代码如何实现?

代码应该是这样的

<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>
<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>
<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>
<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>

看起来也没问题。

如果把第一个div改为

<div class="col-xs-6 col-sm-3" style="background: #abc">col<br>我胖了</div>

效果不佳。

深入理解bootstrap框架之第二章整体架构

这时应该加一个清除浮动的div到第2/3个div之间第四个就不会飘上去了

<div class="col-xs-6 col-sm-3" style="background: #abc">col<br>我胖了</div>
<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>
<div class="clearfix visible-xs"></div>
<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>
<div class="col-xs-6 col-sm-3" style="background: #abc">col</div>

深入理解bootstrap框架之第二章整体架构

所谓class="clearfix visible-xs",前者表示清除浮动,后者表示在超小屏生效

(3)“强大”的偏移和排序——组合应用的demo

<div class="row">
<div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
<div class="col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0">col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0
</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-5 col-lg-6">.col-sm-6 .col-md-5 .col-lg-6</div>
<div class="col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lgoffset-0">col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lgoffset-0</div>
</div>

布置类似这样的代码,可以很快实现不同设备宽度下的样式。

4.重复代码

作者认为bootstrap的代码重复率相当之高。

三.CSS组件架构的设计思想

作者把 bootstrap的CSS组件内容总结为8类

深入理解bootstrap框架之第二章整体架构

(1)基础样式

包括字体、内外边距,display方式,边框等。

(2)颜色

包括5中最基本的颜色

如果在Bootstrap官方网站看过btn按钮或者alert警告框的样例,你会发现,Bootstrap默认为很多组件都提供了5种颜色的样式,这5种颜色分别是:primary(重点蓝)、success(成功绿)、info(信息蓝)、warning(警告橙)、danger(危险红)。定义规则是:组件名称-颜色类型,如btn-primary、alert-info。以按钮(btn为例)

深入理解bootstrap框架之第二章整体架构

也就是说根据组件特性来定义颜色信息1.

(3)尺寸

一般组件都有对应屏幕的4种尺寸,表示方式为:组件-尺寸,比如btn-lg、well-sm等等

实现方式为padding、圆角,行距及字体大小

(4)状态

涉及到阴影、透明度、虚框等

(5)特殊元素

(6)并列元素

(7)嵌套元素

(8)动画样式

主要用在进度条,在progress样式基础上再加一个active

<div class="progress progress-striped active">
<div class="progress-bar" style="width: 45%">
<span class="sr-only">45% Complete</span>
</div>
</div>

深入理解bootstrap框架之第二章整体架构

定义动画主要是指定animattion和动画时间。

.progress.active .progress-bar {
-webkit-animation: progress-bar-stripes 2s linear infinite;/* 2秒过度40像素,无限循环 */
animation: progress-bar-stripes 2s linear infinite;/* 其他浏览器 */
}

深入理解bootstrap框架之第二章整体架构

最后,需要说明,顺序很重要。否则样式大乱套。

四.插件架构

基本规则

(1)布局规则——基于元素自定义属性

(2)js实现步骤——向jQuery看齐

(3)可以是js声明,也可以是js调用

1.布局规则:

js会检测到html中相应的属性,自动绑定事件,而无需额外的js代码。

比如说

<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
我的书籍 
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">JavaScript编程精解</a></li>
<li><a href="#">JavaScript设计模式</a></li>
<li><a href="#">JavaScript启示录</a></li>
<li class="divider"></li>
<li><a href="#">深入理解Bootstrap3</a></li>
</ul>
</div>
<ul class="nav nav-tabs" id="myTab">
<li class="active"><a data-toggle="tab" href="#home">首页</a></li>
<li class=""><a data-toggle="tab" href="#profile">个人资料</a></li>
<li class="dropdown">
<!-- 单击"我的书籍"时,弹出下拉菜单 -->
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
我的书籍
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a data-toggle="tab" href="#dropdown1">JavaScript编程精解</a></li>
<li><a data-toggle="tab" href="#dropdown2">JavaScript设计模式</a></li>
<li><a data-toggle="tab" href="#dropdown3">JavaScript启示录</a></li>
<li><a data-toggle="tab" href="#dropdown4">深入理解Bootstrap</a></li>
</ul>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div id="home" class="tab-pane fade active in">
<p>单击"首页"时显示该区域</p>
</div>
<div id="profile" class="tab-pane fade">
<p>单击"个人资料"时显示该区域</p>
</div>
<div id="dropdown1" class="tab-pane fade">
<p>单击"JavaScript编程精解"时显示该区域</p>
</div>
<div id="dropdown2" class="tab-pane fade">
<p>单击"JavaScript设计模式"时显示该区域</p>
</div>
<div id="dropdown3" class="tab-pane fade">
<p>单击"JavaScript启示录"时显示该区域</p>
</div>
<div id="dropdown4" class="tab-pane fade"> 
<p>单击"深入理解Bootstrap3"时显示该区域</p>
</div>
</div>

深入理解bootstrap框架之第二章整体架构

2.JavaScript的实现步骤

函数声明后马上调用——面向对象的方法——jQuery的插件改进重构——防止冲突处理——绑定事件

3.通用技术

可以通过禁用命名空间的方式禁用插件的默认行为

五.禁用响应式布局

删除媒询、为.container定宽,用col-xs-*替代sm,md和lg。

以上所述是小编给大家介绍的深入理解bootstrap框架之第二章整体架构,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
Sep 25 Javascript
angularjs学习笔记之完整的项目结构
Sep 26 Javascript
jquery validate demo 基础
Oct 29 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
JavaScript中三种常见的排序方法
Feb 24 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
微信小程序调用PHP后台接口 解析纯html文本
Jun 13 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
Jun 17 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
彻底弄懂 JavaScript 执行机制
Oct 23 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
Feb 11 Vue.js
javascript 判断是否是微信浏览器的方法
Oct 09 #Javascript
深入理解bootstrap框架之入门准备
Oct 09 #Javascript
微信小程序 http请求详细介绍
Oct 09 #Javascript
微信小程序 Flex布局详解
Oct 09 #Javascript
JavaScript实现Java中Map容器的方法
Oct 09 #Javascript
JavaScript基于对象去除数组重复项的方法
Oct 09 #Javascript
JS中this上下文对象使用方式
Oct 09 #Javascript
You might like
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
基于php实现长连接的方法与注意事项的问题
2013/05/10 PHP
php判断表是否存在的方法
2015/06/18 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Python中Continue语句的用法的举例详解
2015/05/14 Python
Python网站验证码识别
2016/01/25 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
在 Jupyter 中重新导入特定的 Python 文件(场景分析)
2019/10/27 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
简单介绍CSS3中Media Query的使用
2015/07/07 HTML / CSS
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
平面设计专业大学生职业规划书
2014/03/12 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python