全面解析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获取web应用根目录的方法
Feb 12 Javascript
JQuery遍历json数组的3种方法
Nov 08 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
javascript实现当前页导航激活的方法
Feb 27 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
Jan 12 Javascript
Easyui 之 Treegrid 笔记
Apr 29 Javascript
JavaScript制作颜色反转小游戏
Sep 25 Javascript
js实现文字无缝向上滚动
Feb 16 Javascript
Java与JavaScript中判断两字符串是否相等的区别
Mar 13 Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 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
smtp邮件发送一例
2006/10/09 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
JS控制显示隐藏兼容问题(IE6、IE7、IE8)
2010/04/01 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
自定义PC微信扫码登录样式写法
2017/12/12 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[00:32]10月24、25日 辉夜杯外卡赛附加赛开赛!
2015/10/23 DOTA
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python实现控制台输入密码的方法
2015/05/29 Python
python控制台中实现进度条功能
2015/11/10 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
python实现在一个画布上画多个子图
2020/01/19 Python
jupyter notebook清除输出方式
2020/04/10 Python
Django数据库迁移常见使用方法
2020/11/12 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
销售开票员岗位职责
2015/04/15 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
springboot中一些比较常用的注解总结
2021/06/11 Java/Android