全面解析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 相关文章推荐
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
js判断出两个字符串最大子串的函数实现方法
Nov 01 Javascript
JavaScript数组和对象的复制
Mar 21 Javascript
vue实现简单表格组件实例详解
Apr 16 Javascript
bootstrap 设置checkbox部分选中效果
Apr 20 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
Vue中使用vux配置代码详解
Sep 16 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
原生js实现瀑布流效果
Mar 09 Javascript
node.js基础知识汇总
Aug 25 Javascript
Vue 3自定义指令开发的相关总结
Jan 29 Vue.js
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
Sony CFR 320 修复改造
2020/03/14 无线电
php 方便水印和缩略图的图形类
2009/05/21 PHP
PHP 可阅读随机字符串代码
2010/05/26 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
php实现httpRequest的方法
2015/03/13 PHP
php实现的用户查询类实例
2015/06/18 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
javascript中字体浮动效果的简单实例演示
2015/11/18 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
Angular4集成ng2-file-upload的上传组件
2018/03/14 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
javascript异步处理与Jquery deferred对象用法总结
2019/06/04 jQuery
Vue实现简易计算器
2020/02/25 Javascript
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Python 操作MySQL详解及实例
2017/04/30 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
业务员岗位职责
2013/11/16 职场文书
公休请假条
2014/04/11 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
人代会标语
2014/06/30 职场文书
技术入股协议书
2016/03/22 职场文书
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
2021/05/18 Vue.js
简单谈谈Python面向对象的相关知识
2021/06/28 Python
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
解析MySQL索引的作用
2022/03/03 MySQL