需求
页面中经常会使用到多栏布局,但如果栏目带有背景颜色且各自的内容高度不一时,就会出现每一栏的底部不能够对其的情况,而我们所希望的是每一栏的底部可以平齐。
解决方案
HTML代码如下,代码中我手动指定了每栏的高度,实际中应由内容决定:
1 |
|
方案一:padding + margin
给左右两列都加上以下样式:
1 | padding-bottom: 1000px; |
以上代码给每列都设置了较大的底部正内边距,再设置绝对值相等的底部负外边距。由于对于父容器设置了overflow: hidden;
,多出的内边距就会被隐藏掉,并且此时当任意一栏高度增加时导致父容器的高度增加时,较低的那一栏就会使用内边距进行补偿。又因为背景是包含内边距的,因此就实现了两列等高的假象。
缺点:每一栏的边框在底部无法正常显示,如下图所示。
方案二:表格布局
父容器设置:display: table;
每一栏设置:display: table-cell;
table元素中的table-cell元素默认是等高的。注意此时必须取消浮动,否则无效。同时,就算手动指定了不同高度,还是会等高。
方案三:flex弹性布局
只需要在父容器中定义display: flex;
flex中的伸缩项目默认为拉伸为父元素的高度。此时两列布局和等高都会自动实现。
注意此时也无需设置浮动(就算设置了也不影响),但此时如果手动给每栏都设定高度的话,高度还是会不一样的,正好和table布局完全相反。
方案四:JS高度计算
需要设置浮动,然后把每栏高度都设为最高的那一栏的高度。
1 | <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> |
在记录本篇文章中遇到的问题
长串英文不换行
在固定宽度的标签中,长单词不会自动换行,而中文会自动换行,因为
- 英文中将不包含空格、换行的连续文本认为是一个词,默认情况下不换行
- 中文中标点和文字都是独立的,所以会自动换行
解决方法:
1 | p { |