全面解析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 相关文章推荐
jQuery的12招常用技巧分享
Aug 08 Javascript
jQuery根据元素值删除数组元素的方法
Jun 24 Javascript
js实现温度计时间样式代码分享
Aug 21 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
Jun 02 Javascript
AngularJS中$watch和$timeout的使用示例
Sep 20 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
Apr 02 jQuery
Vue.js如何优雅的进行form validation
Apr 07 Javascript
jQuery实现百度登录框的动态切换效果
Apr 21 jQuery
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
bootstrap table插件动态加载表头
Jul 19 Javascript
Vue项目开发常见问题和解决方案总结
Sep 11 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实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
laravel框架中间件 except 和 only 的用法示例
2019/07/12 PHP
php常用的工具开发整理
2019/09/26 PHP
JavaScript中的style.display属性操作
2013/03/27 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
Node.js实现简单聊天服务器
2014/06/20 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
AngularJS中directive指令使用之事件绑定与指令交互用法示例
2016/11/22 Javascript
jQuery实现一个简单的验证码功能
2017/06/26 jQuery
vue 实现购物车总价计算
2019/11/06 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
2020/09/05 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
2020/09/27 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
2020/02/28 Python
带你认识HTML5中的WebSocket
2015/05/22 HTML / CSS
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
《画风》教学反思
2014/04/16 职场文书
连带责任保证书
2014/04/29 职场文书
贷款担保书范本
2015/09/22 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
Go 内联优化让程序员爱不释手
2022/06/21 Golang