全面解析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 基础学习笔记
May 29 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
May 07 Javascript
Javascript中valueOf与toString区别浅析
Mar 19 Javascript
js传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
多引号嵌套的变量命名的问题
May 09 Javascript
Javascript的闭包详解
Dec 26 Javascript
为什么JS中eval处理JSON数据要加括号
Apr 13 Javascript
Angular表单验证实例详解
Oct 20 Javascript
详解Vue 全局变量,局部变量
Apr 17 Javascript
node基于async/await对mysql进行封装
Jun 20 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
详解JVM系列之内存模型
Jun 10 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
TP5框架页面跳转样式操作示例
2020/04/05 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
Jquery实现仿腾讯娱乐频道焦点图(幻灯片)特效
2015/03/06 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
js实现验证码功能
2020/07/24 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
python基础教程之缩进介绍
2014/08/29 Python
python控制台中实现进度条功能
2015/11/10 Python
Python检测网站链接是否已存在
2016/04/07 Python
深入理解Python变量与常量
2016/06/02 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python转化excel数字日期为标准日期操作
2020/07/14 Python
浅析Python requests 模块
2020/10/09 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
英国领先的维生素和营养补充剂直接供应商:Healthspan
2019/04/22 全球购物
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
database面试题
2013/03/28 面试题
大学生职业规划论文
2014/01/11 职场文书
生物学学生自我评价
2014/01/17 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
Oracle 区块链表创建过程详解
2021/05/15 Oracle