bootstrap 栅格系统踩坑


比如,我们需要实现一个类似表单的样式,采用bootstrap的栅格系统,使用col-md-4,每行分成3等分,如下图:

第一“坑”;文字内容高度变化增大时,下面的会覆盖掉

就如上面的案例,然而当某一等分的子元素内容增多,由于宽度固定了,内容会一直往下撑大,但是随之问题来了,下一行的元素被覆盖,这种效果明显不是我们所想要的。


第二“坑”:文字内容高度变化增大时,下一行的内容并非在新的一行开始

这种效果就更奇葩了,然而当某一等分的子元素内容增多,由于宽度固定了,内容会一直往下撑大,但是随之问题来了,下一行的元素虽然没有被覆盖,但是并不是从第一个位置开始,而是紧接着高度变化的元素下方开始,这种也不是我们想要的效果。

分析:

为啥会出现这些奇葩的“特效”呢?通过查看css样式我们会发现,bootstrap框架底层实现3等分的原理是采用了width:33.33%; float:left; 。看到这2个样式有没有一种恍然大悟的感觉,没错,就是因为浮动的原因引起的。浮动元素脱离了文档流就不会有高度,子元素高度变大并不会撑开父元素的高度,所以就会覆盖下一行的元素的内容。而所有元素都是左浮动,所以自然是靠左对齐,当某个元素高度变大了,那么后面的元素浮动就只能贴着它开始排列。

改进方案:

既然我们知道问题出现在浮动,那么解决起来就简单。

1 使用伪元素清除浮动(推荐)

给父级元素设置清除浮动,使用伪元素:after或者:before

2 不使用浮动,自定义css样式(推荐)

给 col-md-4 这个 class 自定义css 样式:

float:none;  display:inline-block  / inline-table / inline-flex;

3  保持样式不变,改html结构(不建议使用)

每行用一个 row 容器包裹3个等分,这个实现起来不好操作,因为数据是动态返回来的,需要循环遍历,也不方便维护

4 js 动态计算子元素的高度,把最大的赋值给父元素(不推荐)

因为浮动的元素高度没了,那么通过js也可以动态设置,这种方法需要遍历,影响性能

  var maxH = 0;

  $('.col-md-4').each(function (index,ele) {

    if($(ele).children().height() >maxH){

      maxH = $(ele).children().height();

     $(this).css('height',maxH+'px')

    }

  maxH = 0;

  })


以上给出4种解决方案,当然还会有其他方案我没想到的,推荐使用第一第二种,操作简易,维护也方便。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,713评论 1 92
  • 本文主要是起笔记的作用,内容来自慕课网. 认识CSS样式 CSS全称为“层叠样式表 (Cascading Styl...
    0o冻僵的企鹅o0阅读 7,573评论 0 30
  • 一:在制作一个Web应用或Web站点的过程中,你是如何考虑他的UI、安全性、高性能、SEO、可维护性以及技术因素的...
    Arno_z阅读 5,078评论 0 1
  • •前端面试题汇总 一、HTML和CSS 21 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? ...
    Simon_s阅读 6,740评论 0 8
  • 查看端口被占用的情况netstat -ano
    飞跑的蛤蟆阅读 1,598评论 0 1

友情链接更多精彩内容