tips 前端 bootstrap 嵌套行 嵌套列 溢出 宽度不正确 栅格化系统计算
bootstrap 当嵌套列时 有时会出现很奇异的row 的width不对问题
出现的情况时
1 <div class="row" > <!--row a--> 2 <div class="col-xs-12 col-lg-6 col-lg-offset-3"> 3 <div class="row"> <!-- row b--> 4 <div class="col-xs-12"> 5 ... 6 </div> 7 </div> <!--row b--> 8 </div> 9 </div> <!-- row a -->
此时rowb的宽度计算会出现bug 在手机屏幕上将溢出
解决方案很简单 对row a设置样式overflow:hidden;(事先声明,这种解决方式有细微缺陷,但是基本不影响,而且简单实用)
此时对rowb 的设置width:100%; (在浏览器f12的盒子模型里可以看到width确实是对的(与父元素的width保持一致),但给它一个边框会发现视觉上真实的宽度是明显不够的(和父元素的width不等,非常诡异))
或者给rowb加一个父级元素container都是错误的做法,(此时手机屏幕上的不再溢出,在大屏幕上将会溢出)
为什么会有这个问题,可以去f12看row和col的盒子模型,因为bootstrap的col 默认有gutter(即col有左右的padding分别15px)
如果觉得这种默认不好,我们可以自己制定规则覆盖默认
定义样式如下
1 .row.no_gutter [class^="col-"],.row.no_gutter [class*="col-"]{ 2 padding-right:0px; 3 padding-left:0px; 4 }
然后需要嵌套列时,只需要将此嵌套的行加一个样式类就ok了,like this:
1 <div class="row" > <!--row a--> 2 <div class="col-xs-12 col-lg-6 col-lg-offset-3"> 3 <div class="row no_gutter"> <!-- row b--> 4 <div class="col-xs-12"> 5 ... 6 </div> 7 </div> < !-- row b is end --> 8 </div> 9 </div> <!-- row a is end -->
或者也可以去改bootstrap源码,对于专业的前端工程师来说,
毫无疑问本地是有一套比如npm-bower-grunt的编译环境的,
此时 运行 bower install bootstrap
然后在项目下 运行 npm install
然后在其less文件夹下找variables.less文件 更改 @grid-gutter-width:30px; 的值即可(想再详细具体一点,精确到每个不同分辨率的设备的gutter请参照http://v3.bootcss.com/css/ (侧边栏less mixin和变量栏))
然后 运行 grunt dist 就能在dist文件夹下取编译后的版本了.