当前位置: 代码迷 >> Web前端 >> 都是table集标签默许的display样式惹得祸
  详细解决方案

都是table集标签默许的display样式惹得祸

热度:79   发布时间:2012-11-07 09:56:10.0
都是table集标签默认的display样式惹得祸

http://www.iteye.com/topic/765150 提及该问题。做个分析记录如下:

文中引介了几个解决方案
1)hack方法,IE和FF显示正常,但是chrome,opera, safari不能正常显示了,并且hack方法不建议使用。
2)在div外加center标签,显示效果OK,但不符合布局规则并且是不建议使用的标签。
3)经测试,效果完美。

<style type="text/css">
.container {border: solid 1px blue; text-align:center;}
table {border: solid 1px red; margin-left:auto; margin-right:auto; }
td {border: solid 1px green;}
</style>
<div class=container>
    <table>
        <tr><td>Text</td></tr>
    </table>
</div>
?

经仔细分析,这个问题是因为table,thead, tbody, tfooter, tr,th, td都有默认的display样式导致,而IE与其他浏览解析不同。

CSS2下display相关属性值

display : none | inline | block | list-item | run-in | compact | marker | table | 
          inline-table| table-row-group | table-header-group | table-footergroup | 
          table-row | table-column-group | table-column | table-cell | table-caption 

?

以下代码就会出现与使用table同样的问题

<style type="text/css">
.container {border:solid 1px blue; text-align:center;}
.content {border:solid 1px red; display:table;}
</style>
<div class="container">
    <div class="content">test</div>
</div>


其他不完美的解决方式:
1)如果简单要让table居中,可以设置table的display:inline。
问题:IE、chrome、safari显示OK;firefox、opera显示有问题。
???????? 因为inline不能设置宽度和高度,浏览器对inline的解析效果不同。

<style type="text/css">
.container{border:solid 1px blue; text-align:center;}
table {border:solid 1px red; display:inline;}
td {border:solid 1px green; }
</style>
<div class="container">
    <table>
        <tr><td>Text</td></tr>
    </table>
</div>

2)设置table宽度100%,并让td的text-align:center;
问题:td中的文本只是相对table居中。

<style type="text/css">
.container{border:solid 1px blue; text-align:center;}
table{border:solid 1px red; width:100%;}
td {border:solid 1px green; text-align:center;}
</style>
<div class=container>
    <table>
        <tr><td>Text</td></tr>
    </table>
</div>

?

  相关解决方案