Bootstrap响应式栅格系统设计

   2023-02-08 学习力0
核心提示:为了方便起见,我们通过1200px宽的屏幕来讲解bootstrap中container、row、col的css属性值为何这样设置的原理在1200px屏幕中为何container的宽度设置为1170px?为了在1200px宽的设备两边留出一定的边距,因此将container的宽度设置为1170px,同时margin-left:au

为了方便起见,我们通过1200px宽的屏幕来讲解bootstrap中container、row、col的css属性值为何这样设置的原理

在1200px屏幕中为何container的宽度设置为1170px?

为了在1200px宽的设备两边留出一定的边距,因此将container的宽度设置为1170px,同时margin-left:auto和margin-right:auto将container居中,从而确保屏幕两边各留出15px的边距;

@media (min-width: 1200px) {
  .container {
    width1170px;
  }
}
.container {
  padding-right15px;/*下文解释为何padding设置为15px*/
  padding-left15px;
  margin-right: auto;
  margin-left: auto;
}

为何col要留出15px的padding-left与padding-right?

为了创建栅格列与列之间的间隔(gutter),因此将col的padding-left与padding-right均设置为15px;

.col-xs-1.col-sm-1.col-md-1.col-lg-1.col-xs-2.col-sm-2.col-md-2.col-lg-2.col-xs-3.col-sm-3.col-md-3.col-lg-3.col-xs-4.col-sm-4.col-md-4.col-lg-4.col-xs-5.col-sm-5.col-md-5.col-lg-5.col-xs-6.col-sm-6.col-md-6.col-lg-6.col-xs-7.col-sm-7.col-md-7.col-lg-7.col-xs-8.col-sm-8.col-md-8.col-lg-8.col-xs-9.col-sm-9.col-md-9.col-lg-9.col-xs-10.col-sm-10.col-md-10.col-lg-10.col-xs-11.col-sm-11.col-md-11.col-lg-11.col-xs-12.col-sm-12.col-md-12.col-lg-12 {
  position: relative;/*下文解释为何要设置position为relative*/
  min-height1px;/*下文解释为何min-height设置为1px*/
  padding-right15px;
  padding-left15px;
}

.col-md-1.col-md-2.col-md-3.col-md-4.col-md-5.col-md-6.col-md-7.col-md-8.col-md-9.col-md-10.col-md-11.col-md-12 {
    float: left;
 }

.col-md-12 {
    width100%;
}
.col-md-11 {
    width91.66666667%;
}
.col-md-10 {
    width83.33333333%;
}
.col-md-9 {
    width75%;
}
.col-md-8 {
    width66.66666667%;
}
.col-md-7 {
    width58.33333333%;
}
.col-md-6 {
    width50%;
}
.col-md-5 {
    width41.66666667%;
}
.col-md-4 {
    width33.33333333%;
}
.col-md-3 {
    width25%;
}
.col-md-2 {
    width16.66666667%;
}
.col-md-1 {
    width8.33333333%;
}

既然container左右两边都有15px的外边距了,为何还要设计15px的内边距呢?

原来,bootstrap通过将col看做一个容器,往里面再嵌入12个col(一个栅格系统),以此实现嵌套列的功能,从而达到无限嵌套的目的;

因此从某种程度上,bootstrap把container当做一个最大的col(想象一下container中放一个col-12的情景,此时两者的padding与width均一致),所以container和col一样,其padding-left和padding-right也均被设置成15px,从而达到container与col相统一的目的。

那为何bootstrap还设计了row,并且要求row必须包含在.container(固定宽度)中呢?

.row {
  margin-right: -15px;
  margin-left: -15px;
}

.row:before,
.row:after {
   clear: both;/*用于清除浮动;*/
}

还记得,刚刚为了统一处理container与col而将container的左右内边距设置为15px的操作吗?由于bootstrap将所有元素的盒模型都设置为了boeder-box

* {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}
*:before,
*:after {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

上述15px的操作导致了container的content width从1170px,变成1140px,这下导致所有col栅格的百分比乘的都是1140而不是1170了;因此bootstrap在container中新增了row这个夹层,通过设置负值 margin从而抵消掉为 container 元素设置的 padding,使得row的宽度增加至1170px,从而使得col栅格的百分比乘的都是正确的1170;(也就间接为row所包含的col抵消掉了padding);

这里用到了盒模型尺寸的计算原理:块元素左右外边距、左右border、左右内边距和content width这七个值之和必须等于包含块的content width。row的包含块container的content width为1140px,因此对于row而言,就存在如下等量关系:

-15px+0+0+width+0+0+(-15px)= 1140

因此,row的width就自动扩展到1170px了。

为何col要设置position为relative呢?

为了实现列定位或列排序

.col-md-pull-12 {
    right100%;
}
.col-md-pull-11 {
    right91.66666667%;
}
.col-md-pull-10 {
    right83.33333333%;
}
.col-md-pull-9 {
    right75%;
}
.col-md-pull-8 {
    right66.66666667%;
}
.col-md-pull-7 {
    right58.33333333%;
}
.col-md-pull-6 {
    right50%;
}
.col-md-pull-5 {
right41.66666667%;
}
.col-md-pull-4 {
    right33.33333333%;
}
.col-md-pull-3 {
    right25%;
}
.col-md-pull-2 {
    right16.66666667%;
}
.col-md-pull-1 {
    right8.33333333%;
}
.col-md-pull-0 {
    right: auto;
}
.col-md-push-12 {
    left100%;
}
.col-md-push-11 {
    left91.66666667%;
}
.col-md-push-10 {
    left83.33333333%;
}
.col-md-push-9 {
    left75%;
}
.col-md-push-8 {
    left66.66666667%;
}
.col-md-push-7 {
    left58.33333333%;
}
.col-md-push-6 {
    left50%;
}
.col-md-push-5 {
    left41.66666667%;
}
.col-md-push-4 {
    left33.33333333%;
}
.col-md-push-3 {
    left25%;
}
.col-md-push-2 {
    left16.66666667%;
}
.col-md-push-1 {
    left8.33333333%;
}
.col-md-push-0 {
    left: auto;
}

结合colpositionrelative的属性,通过使用 .col-md-push-*.col-md-pull-* 类就可以很容易的改变列(column)的顺序。

那为什么col要设置一个min-height为1px呢?

这是因为每个col为了保持占有自己的格子(就算没有内容,也占该有的栅格);如果不设置min-height为1px,在col没有任何内容的情况下,后面有内容的col会float到前面没有内容的col的栅格位置,这是我们不希望看到的。

好了,到这里我们就解释了bootstrap的栅格系统中最重要的三个部分container、row和col它们样式设置的原理。

另外,关于列偏移

.col-md-offset-12 {
    margin-left100%;
}
.col-md-offset-11 {
    margin-left91.66666667%;
}
.col-md-offset-10 {
    margin-left83.33333333%;
}
.col-md-offset-9 {
    margin-left75%;
}
.col-md-offset-8 {
    margin-left66.66666667%;
}
.col-md-offset-7 {
    margin-left58.33333333%;
}
.col-md-offset-6 {
    margin-left50%;
}
.col-md-offset-5 {
    margin-left41.66666667%;
}
.col-md-offset-4 {
    margin-left33.33333333%;
}
.col-md-offset-3 {
    margin-left25%;
}
.col-md-offset-2 {
    margin-left16.66666667%;
}
.col-md-offset-1 {
    margin-left8.33333333%;
}
.col-md-offset-0 {
    margin-left0;
}

列偏移与列排序(定位)的不同之处在于使用margin,而被margin挤占的区域没办法安放其它的列。

另外,关于流式布局容器

将最外面的布局元素 .container 修改为 .container-fluid,就可以将固定宽度的栅格布局转换为 100% 宽度的布局。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Bootstrap基础:选择器
    1.CSS属性选择器[arrt=value]   该属性有指定的确切值[arrt~=value]  该属性值必须是多个空格隔开的值,比如,class=“title featured home”,而且这些值中的一个必须是指定的值“value”[arrt|=value]  属性的值就是“value”或者以“value”开始并立即
    03-16
  • bootstrap模态框手动开启关闭与设置点击外部不关闭
    bootstrap模态框手动开启关闭与设置点击外部不
    完整的参考菜鸟教程:http://www.runoob.com/bootstrap/bootstrap-modal-plugin.html1.手动开启与关闭模态框的方法  按钮开启与JS函数开启(2种)!DOCTYPE htmlhtmlheadmeta charset="utf-8"titleBootstrap 实例 - 模态框(Modal)插件/titlelink rel="styleshe
    03-16
  • Bootstrap.css 中请求googleapis.com/css?famil
    问题描述: Web中引入bootstrap.css中头部有访问Google服务器的请求 @import url("//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700");     国内访问不稳定,页面反应慢解决:将请求结果保存下来,放到本地,重新声明请求1.请求http:
    03-16
  • 基于.NET6、FreeSql、若依UI、LayUI、Bootstrap
    近几年,.net生态日益强大,特别是跨平台技术,性能提升,那真的是强大无比。为了日常能够快速开发,笔者基于基于.NET6、FreeSql、若依UI、LayUI、Bootstrap构建插件式的CMS,请大家多提意见建议。在此,要感谢若依CMS的作者,借用了皮肤框架。懒的发文字描述
    03-16
  • elasticsearch bootstrap.memory_lock
    检查bootstrap.memory_lock设置是否生效get http://10.127.0.1:9200/_nodes?filter_path=**.mlockall响应:{"nodes": {"9giihmDNRdS136KT52Gl5g": {"process": {"mlockall": true}},"X0zQESeeT8uJ9kVXvHpl-w": {"process":
    03-08
  • day 57 Bootstrap 第一天
    day 57 Bootstrap 第一天
    一 、bootstrap是什么 http://v3.bootcss.com/css/#grid-options(参考博客)是一个前端开发的框架.HTMLCSSJS下载地址:https://v3.bootcss.com/ (当前版本3.3.7)目录结构 bootstrap-3.3.7-dist/├── css// CSS文件│ ├── bootstrap-theme.css// Boo
    03-08
  • 基于bootstrap_网站汇总页面 bootstrap网站案例
    基于bootstrap_网站汇总页面 bootstrap网站案例
    !DOCTYPE htmlhtml lang="en"headmeta charset="UTF-8"title我的网页/titlelink rel="stylesheet" href="css/bootstrap.min.css"/headbody!--头部信息--nav class="navbar navbar-inverse navbar-fixed-top"div class="conta
    03-08
  • 50 个 Bootstrap 插件
    Bootstrap是快速开发Web应用程序的前端工具包。它是一个CSS和HTML的集合,它使用了最新的浏览器技术,给你的Web开发提供了时尚的版式,表单,buttons,表格,网格系统等等。本文向你推荐 50 个 Bootstrap 的插件,可以考虑在你下一个项目中使用它们。1. Boots
    03-08
  • Bootstrap资源 bootstrap官方文档
    官方网站:http://getbootstrap.com/http://twitter.github.com/bootstrap/index.html 官方博客:http://blog.getbootstrap.com/  中文文档:http://wrongwaycn.github.com/bootstrap/docs/index.html  图标:Font Awesomehttp://fortawesome.github.com
    03-08
  • bootstrap bootstrap检验
    bootstrap是简洁灵活的用于搭建web页面的Html,Css工具集。---是一组简洁强大的前端开发框架。 Bootstrap是Twitter推出的一个开源的用于前端开发的工具包。是一个CSS/HTML框架。bootstrap中的js框架依赖于jquery,因此jquery要在bootstrap之前引进一般要把CS
    03-08
点击排行