全面解析bootstrap格子布局


Posted in Javascript onMay 22, 2016

一、源码文件

_grid.scss:格子系统类文件
Mixins/_grid.scss:支持格子系统实现的mixin集合
Mixins/_grid-framework.scss:格子系统实现的核心mixin

二、支持的功能

1. 实现按百分比布局

2. 实现格子的定位

3. 实现格子的嵌套

4. 如果只使用格子系统,可以只编码bootstrap-grid.scss文件

三、实现原理

1、 按百分比布局,主要思考的问题如何在不同的设备上平均分配的宽度,bootstrap只是用了简单的百分比,在任何尺寸设备下都是使用相同的百分比。

2、 格子的定位:解决了格子向左移动、向右移动、以格子向右偏移几个单元格的能力

3、 格子的嵌套:实现了格子内容再嵌套格子布局系统。

四、源码分析

1、_grid.scss:格子系统生成的主类,引用了mixins/_grid.scss、mixins/_grid-framework.scss、variables.scss类中的变量及相关方法。
首先:定义两个容器类

     a) container:格子容器,根据不同设备定义不同的宽度,不会充满全屏;

     b) continaer-fluid:格子容器,在任何支持下都会充满全屏
container和container-fluid都使用了make-container(mixins/_grid.scss),make-container只实现了居中、左右内边距、清除浮动等控制;其中container根据不同设备定义了容器的宽度

然后:定义row(行):
调用了make-row(mixins/_grids.scss)实现清除浮动、左右外边距的定义,在4.0中,如果开启了flex布局的支持,就设定容器的display为flex和flex-wrap为wrap,并去掉清浮动。

再则:直接调用make-grid-columns(mixins/_grid-framework.scss)实现单元格的建立

    a) make-grid-columns:单元格生成的入口方法,传递所能支持的格子总数、外边距宽度、所支持的几种尺寸

    b) make-grid-columns引用了mixins/_grid.scss中的许多方法:

    a) 用到了map的map-key函数,用于遍历一个map的key集合;

用到了@extend函数,用于继承,实现所有col左浮动,以及所有col都相对定位。

@for $i from 1 through $columns {
   .col-#{$breakpoint}-#{$i} {
    @extend %grid-column; //extend是继承,将此合并为一个样式集合
    //.col-xs-1,col-xs-2{ positiona:relative; .... }
   }
  }

a) Make-col-span函数,实现col宽度的计算

b) 调用mixins/_grid.scss中的make-col-modifier方法,实现push、pull、offset的样式的生成:

i. Push:向右推几个格子,用的是left

ii. Pull:向左推几个格子,用的是right

iii. Offset:利用的是margin-left实现,向右推向个百分比。

@mixin make-col-offset($size, $columns: $grid-columns) {
 margin-left: percentage($size / $columns);
}

@mixin make-col-push($size, $columns: $grid-columns) {
 left: if($size > 0, percentage($size / $columns), auto);
}

@mixin make-col-pull($size, $columns: $grid-columns) {
 right: if($size > 0, percentage($size / $columns), auto);
}

@mixin make-col-modifier($type, $size, $columns) {
 // Work around the lack of dynamic mixin @include support 
 @if $type == push {
  @include make-col-push($size, $columns);
 } @else if $type == pull {
  @include make-col-pull($size, $columns);
 } @else if $type == offset {
  @include make-col-offset($size, $columns);
 }
}

以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
javascript学习随笔(使用window和frame)的技巧
Mar 08 Javascript
学习ExtJS(二) Button常用方法
Oct 07 Javascript
关于Javascript作用域链的八点总结
Dec 06 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
JS实现方向键切换输入框焦点的方法
Aug 19 Javascript
基于jquery编写的放大镜插件
Mar 23 Javascript
Angular 路由route实例代码
Jul 12 Javascript
require.js中的define函数详解
Jul 10 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 Javascript
JavaScript判断浏览器版本的方法
Nov 03 Javascript
Antd下拉选择,自动匹配功能的实现
Oct 24 Javascript
Bootstrap模块dropdown实现下拉框响应
May 22 #Javascript
基于Bootstrap实现图片轮播效果
May 22 #Javascript
基于Vue.js的表格分页组件
May 22 #Javascript
js正则表达式replace替换变量方法
May 21 #Javascript
深入解析JavaScript中的立即执行函数
May 21 #Javascript
详解JavaScript中Hash Map映射结构的实现
May 21 #Javascript
简单掌握JavaScript中const声明常量与变量的用法
May 21 #Javascript
You might like
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
laravel config文件配置全局变量的例子
2019/10/13 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
js function定义函数使用心得
2010/04/15 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
JQuery中基础过滤选择器用法实例分析
2015/05/18 Javascript
基于Jquery插件实现跨域异步上传文件功能
2016/04/26 Javascript
JavaScript中ES6字符串扩展方法
2016/08/26 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
vue-resource 拦截器interceptors使用详解
2021/01/18 Vue.js
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python实现批量压缩图片
2018/01/25 Python
pandas中的series数据类型详解
2019/07/06 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的
2015/07/23 面试题
竞选班长演讲稿
2013/12/30 职场文书
七年级生物教学反思
2014/01/30 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书
反邪教教育心得体会
2016/01/15 职场文书
golang操作redis的客户端包有多个比如redigo、go-redis
2022/04/14 Golang