全面解析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 相关文章推荐
js下获取div中的数据的原理分析
Apr 07 Javascript
js两行代码按指定格式输出日期时间
Oct 21 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
Oct 23 Javascript
javascript实现的一个带下拉框功能的文本框
May 08 Javascript
异步JavaScript编程中的Promise使用方法
Jul 28 Javascript
Ionic快速安装教程
Jun 03 Javascript
IE下JS保存图片的简单实例
Jul 15 Javascript
jQuery实现淡入淡出的模态框
Feb 09 Javascript
jQuery实现拖动效果的实例代码
Jun 25 jQuery
详解微信小程序回到顶部的两种方式
May 09 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
Aug 28 Javascript
Jquery Fade用法详解
Nov 06 jQuery
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的知识
2006/11/17 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
php数组删除元素示例
2014/03/21 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
PDO::errorInfo讲解
2019/01/28 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
Bootstrap基础学习
2015/06/16 Javascript
基于jquery实现在线选座订座之影院篇
2015/08/24 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
微信小程序实现顶部导航特效
2019/01/28 Javascript
用js编写留言板
2020/03/17 Javascript
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
2020/04/21 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
工程专业应届生求职信
2014/02/19 职场文书
环保建议书600字
2014/05/14 职场文书
任命书模板
2014/06/04 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
出售房屋委托书范本
2014/09/24 职场文书
通知的写法
2015/04/23 职场文书
美丽心灵观后感
2015/06/01 职场文书
2016暑期师德培训心得体会
2016/01/09 职场文书
Python音乐爬虫完美绕过反爬
2021/08/30 Python