table-cell是display家族中的小小一员,传统布局中几剩乎是忽略它的存在。因为IE8以下是不兼容的,没错就是那个万恶的IE6和IE7。随着时间的推进,很多用户都已放弃的IE6/IE7的使用了,使table-cell沉默至今终于可以大展拳脚了。
display:table-cell其实就是让标签元素以表格单元格的形式呈现,类似于td标签。
相比于flex功能没这么强大,但相对于简单容易理解和使用,代码简略不用添加一些内核前缀,移动端主流还是flex
元素自动平分填满一行
先看看实现效果图:
第一眼看,你可能是想着这个用float轻松实现,单格大小就是100/个数的百分比就可以。但这样单元格的数量发生变化时,你就要重新计算了,用float还要处理清除浮动一些手尾。现在用table-cell轻松无痛实现。
html代码:
1 2 3 4 5 6 7 8 9 10
| <div class="container"> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| .container { border: 1px solid orange; display: table; padding: 10px; } .container ul { margin: 0; padding: 0; border-right: 1px solid #ccc; } .container ul li { list-style: none; display: table-cell; height: 100px; vertical-align: middle; text-align: center; width: 2000px; border: 1px solid #ccc; border-right: none; }
|
注:width:2000px
只是任意设定的大小值,实际输出是没这么大的,只是为了让元素有宽度
查看效果
垂直居中
垂直居中,这是一个长久的话题。css3的出现,现在有各种各样的方法可实轻松实现。现在我主要介绍一下table-cell的实现方法
1 2 3 4 5 6 7 8 9
| <div class="container"> <div> <p>学习前端就是要带着要填坑的思想准备</p> <p>任何事情都不是一帆风顺的!</p> </div> </div> <div class="container"> <div class="black"><img src="https://assets.codepen.io/assets/logos/codepen-logo-9c0933e8569e634b75ac2eb808da908d.svg"/></div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| .container { width: 500px; margin: 0 auto 10px; } .container div { display: table-cell; vertical-align: middle; text-align: center; border: 1px solid #ccc; width: 2000px; height: 150px; margin-bottom: 10px; } .container div.black { background: #333; border: none; } .container div.black img { width: 200px; } .container p { font-size: 12px; line-height: 1.8; margin: 0; }
|
查看效果
等高布局
即然是以表格的单元格呈现,那就有单元格的相对属性,等高、跟随其他栏的变化而变化
1 2 3 4 5 6 7 8 9 10 11
| <div class="container"> <div class="item"> <p>第一栏</p> </div> <div class="middle"> <p>第二栏<br>即然是以表格的单元格呈现,那就有单元格的相对属性,等高、跟随其他栏的变化而变化</p> </div> <div class="item"> <p>第三栏</p> </div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| .container { display: table; width: 500px; margin: 0 auto; padding: 10px 0; } .container .item { display: table-cell; width: 100px; background: #ccc; } .container .middle { margin: 0 10px; background: #aaa; padding: 0; } .container p { margin: 0; text-align: center; font-size: 12px; line-height: 1.8; padding: 10px; }
|
注:如果都是table-cell
的话,可以配合着table-row
使用来实现
查看效果
弹性/自适应布局
这种方式实现的自适应布局,元素宽度无需定值,支持百分比宽度,且可以无限制嵌套,兼容性良好。
查看效果