table实现等高的优势

实现左右两端等高布局的方法,常见的方法有负margin。

负margin有一个缺点,比如实现下图样式:

一行三列等高布局,通过负margin完全能实现,但难点在于每一列的底部有阴影(box-shadow)。由于采用负margin,需要将父级设置overflow:hidden,因此底部的阴影将消失。除此之外,所有需要在底部渲染的都会出问题,比如背景图在底部,若采用负margin,则底部背景图是无法看到的。这是致命缺点。

现在所要实现的效果是:一行三列,宽度平分,自适应,等高,且实现阴影。

如果没有实现阴影要求,完全可以通过负margin+width:33.33333%实现,现在则不能。

table本身就是等高的,且不需要overflow:hidden,因此阴影也能实现。同时table有fixed布局,即固定等分布局,这样就实现了。

假设html:结构如下

<div class="wrap">
  <div class="column">第一列,内容不定</div>
  <div class="column">第二列,内容不定</div>
  <div class="column">第三列,内容不定</div>
</div>

给父级和列设置样式:

.wrap{
  display:table;
  table-layout:fixed;
  border-collapse:separate;
  border-spacing:15px 0;
  width:100%;
}
.column{
  display:table-cell;
  box-shadow:  0px 10px 20px #888888; 
}

table-layout:fixed是实现等分的关键。单元格的宽度默认是根据单元格中的内容自动调整的,设置了这个样式,则单元格的宽度不是根据内容自动调整,而是根据指定的宽度显示,若单元格内容超过指定宽度,则换行显示。这里我们没有指定宽度,则默认是平分每个单元格的宽度,这点真特么是太好用了。

border-spacing:15px 0;默认单元格是紧挨着的,但我们采用table的布局用于一行三列的显示,当然不希望三列紧挨着,彼此有15px的间距。这个样式就解决了紧挨着的问题,单元格左右有15px的间距,上下为0。比较可惜的是,这个样式只能设置水平和垂直的间距,不能单独设置上右下左的间距,这也是没办法的,因为我们这里是讨巧,用table的布局实现我们想要的效果,而不是实现真正的表格。

猜你喜欢

转载自my.oschina.net/u/3618644/blog/1635178