bootstrap元素宽度_Bootstrap | 结合代码学习Bootstrap3 栅格系统

开篇的话:

大家可能会好奇,技术的滚轮滚滚向前,这个时候怎么还会有博文在介绍Bootstrap 3呢?

技术没有好坏之分,只有适合和不适合的区别,因为我们这个项目对IE有明确的要求,所以Bootstrap 3相对来说更适合,栅格系统又是我认为的Bootstrap的精髓,所以呢,我们就开始今天的博文吧~

简介

Bootstrap中的栅格系统就是通过一系列的行(row)与列(column)的组合创建页面布局。

要使用栅格系统,就要遵循以下规则:

1、数据行(.row)必须包含在容器.container或.container-fluid中

2、列(.column)必须放在数据行(.row)中

3、页面内容应当放置在列容器(.column)之内

4、列与列之间设置了15px的内距(padding)

.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;  min-height: 1px;  padding-right: 15px;  padding-left: 15px;}

Bootstrap 4中添加了一个槽宽(Gutters)的概念,可以用no-gutters类来添加一个无内边距的列

no-gutter实现代码如下:

.no-gutters {  margin-right: 0;  margin-left: 0;}.no-gutters > .col,.no-gutters > [class*="col-"] {  padding-right: 0;  padding-left: 0;}

把no-gutters添加到row上就可以创建一个没有边距的列了,当然以下代码同时也展示了一个8列的栅格系统:

栅格参数

Bootstrap 3 栅格参数把屏幕分成了四类(超小屏,小屏,中屏和大屏),分界点为768px、992px和1220px

0cbc59645ed3347419f42f97582dd333.png

把小屏幕和超小屏幕分界点定在768px已经不满足现在的需求了,所以在bootstrap 4中进行了优化,增加了576px这一个档位。

bcaa2c4d53380d7d81e31677f8c4345f.png

假设我们以bootstrap4的分隔节点重构Bootstrap 3,那么我们只需要保持-xs-这一档位不变,加上576px这一段媒体查询

@media (min-width: 576px) {/*.col-sm-*{  加上小屏代码}*/}

以前我们-col-xs- 则要改成 -col-sm-

以前我们-col-sm- 则要改成 -col-md-

以前我们-col-md- 则要改成 -col-lg-

以前我们-col-lg- 则要改成 -col-xl-

也就是前缀依次向后挪一位就可以了,这样改造过后的bootstrap 3在不同分辨率上的表现会更加合理些。

列的实现原理(以Bootstrap3为例)

我们以.col-xs-*为例,其他的除了前缀不一样外,其原理都是完全一样的。

.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {  float: left;}.col-xs-12 {  width: 100%;}.col-xs-11 {  width: 91.66666667%;}.col-xs-10 {  width: 83.33333333%;}.col-xs-9 {  width: 75%;}.col-xs-8 {  width: 66.66666667%;}.col-xs-7 {  width: 58.33333333%;}.col-xs-6 {  width: 50%;}.col-xs-5 {  width: 41.66666667%;}.col-xs-4 {  width: 33.33333333%;}.col-xs-3 {  width: 25%;}.col-xs-2 {  width: 16.66666667%;}.col-xs-1 {  width: 8.33333333%;}

1、column采用百分比布局,默认为12列

col-xs-12就占100%,11列就占11/12(91.66666667%),10列就为5/6(83.33333333%)以此类推

2、所有的列都是左浮动

所以bootstrap用了以下代码清除浮动

.container-fluid:before,.container-fluid:after,.row:before,.row:after{display: table;content: " ";}.container:after,.container-fluid:after,.row:after{  clear: both;}

列偏移

有时候,我们不希望相邻的两个内容列之间有空隙,又或者我们想要某个列居中,这个时候就可以用到列偏移。

先看源码:

.col-xs-offset-12 {  margin-left: 100%;}.col-xs-offset-11 {  margin-left: 91.66666667%;}.col-xs-offset-10 {  margin-left: 83.33333333%;}.col-xs-offset-9 {  margin-left: 75%;}.col-xs-offset-8 {  margin-left: 66.66666667%;}.col-xs-offset-7 {  margin-left: 58.33333333%;}.col-xs-offset-6 {  margin-left: 50%;}.col-xs-offset-5 {  margin-left: 41.66666667%;}.col-xs-offset-4 {  margin-left: 33.33333333%;}.col-xs-offset-3 {  margin-left: 25%;}.col-xs-offset-2 {  margin-left: 16.66666667%;}.col-xs-offset-1 {  margin-left: 8.33333333%;}.col-xs-offset-0 {  margin-left: 0;}

翻看源码我们发现列偏移其实也不神奇,-col-*-offset就是运用margin-left把列往右移,相当于左侧补列。

比如说我们有个内容列在中等屏幕下占8列,并且居中,我们就可以用以下代码实现

内容

col-md-8保证了我们在中屏幕下内容列始终占屏幕66.7%,col-md-offset-2保证了我们在这个内容列始终有16.7%左边距,这样就保证内容列的居中。

ps:

使用了col-xs-offset-*在超小屏幕上偏移了列,要使用col-sm-offset-0(具体以你的代码为准)把列偏移回来,这样才可以在超小屏幕上实现偏移并且不会影响到更大的屏幕

pps:

还有个小细节很容易被忽略,在bootstrap中,默认设定了元素的现实方式为box-sizing: border-box,这样才能保证默认每个列上15px的边距在百分比下布局不出滚动条不换行。

* {    -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;}

box-sizing

这里再花一分钟简单说下box-sizing,假如说页面上有一个id为box1的元素

#box1{width:200px;height:200px;border:8px solid red;padding:20px;box-sizing: border-box;}

box-sizing: border-box;

则元素实际宽高为144px,实际占用宽度为144 + 20 * 2 + 8 * 2,总宽度还是200px

box-sizing: content-box;

元素实际宽高为200px,实际占用的宽度为200 + 20 * 2 + 8 * 2 = 256px

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值