全面解析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 相关文章推荐
prototype class详解
Sep 07 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
Aug 09 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
Jul 09 Javascript
js实现汉字排序的方法
Jul 23 Javascript
js实现用户输入的小写字母自动转大写字母的方法
Jan 21 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
详解在Vue中有条件地使用CSS类
Sep 30 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
Apr 19 Javascript
详解Nuxt.js中使用Element-UI填坑
Sep 06 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 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
PHP的可变变量名的使用方法分享
2012/02/05 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
JavaScript 设计模式学习 Singleton
2009/07/27 Javascript
验证码按回车不变解决方法
2013/03/29 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
详解vue2 $watch要注意的问题
2017/09/08 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
2018/08/30 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python谱减法语音降噪实例
2019/12/18 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
经济与贸易专业应届生求职信
2013/11/19 职场文书
中学生自我鉴定
2014/02/04 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
SQL语句多表联合查询的方法示例
2022/04/18 MySQL