全面解析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通过prototype给对象定义属性用法实例
Mar 23 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
Aug 13 Javascript
node.js入门实例helloworld详解
Dec 23 Javascript
详解Javascript继承的实现
Mar 25 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
Apr 26 Javascript
JavaScript中函数声明与函数表达式的区别详解
Aug 18 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
Mar 11 Javascript
微信小程序template模版的使用方法
Apr 13 Javascript
Nautil 中使用双向数据绑定的实现
Oct 02 Javascript
在vue中利用v-html按分号将文本换行的例子
Nov 14 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 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
PHP中替换换行符的几种方法小结
2012/10/15 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
php中socket通信机制实例详解
2015/01/03 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
laravel框架创建授权策略实例分析
2019/11/22 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
基于jQuery的树控件实现代码(asp.net+json)
2010/07/11 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
使用JQuery FancyBox插件实现图片展示特效
2015/11/16 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
信息员培训方案
2014/06/12 职场文书
婚宴邀请函
2015/01/30 职场文书
监察建议书
2015/02/04 职场文书
加入学生会自荐书
2015/03/05 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
创业计划书之校园超市
2019/09/12 职场文书
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
MySQL窗口函数的具体使用
2021/11/17 MySQL
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers