table

关键点1表格模型中如果缺少某个元素。这时,那些“丢失”的元素会被模拟出来,从而使得表格模型能够正常工作。所有的表格元素将会自动在自身周围生成所需的匿名table对象,使其符合table/inline-table、table-row、table-cell的三层嵌套关系。
关键点2根据关键点1,不管你display设置table/inline-table、table-row、table-cell,都会显示为块盒,另起一行显示。
关键点3表格格式上下文的宽度默认值 = 匹配表格内容。

display: table

关键点1显示为块盒。
关键点2自身周围生成所需的匿名table-row、table-cell对象。
关键点3盒模型的宽度默认值 = 匹配表格内容。与display: block盒模型的不同点。
关键点4属性:border-spacing、border-collapse有效。如果元素为display: block,这两个属性是不起作用的。

例子

  1. <style>
  2. display: table;
  3. width: 300px;
  4. height: 100px;
  5. border: 1px solid red;
  6. border-spacing: 15px 15px;
  7. border-collapse: separate; //只有一个匿名cell,这个属性不起作用
  8. }
  9. .table-cell-1 {
  10. border: 1px solid red;
  11. }
  12. .table-cell-2 {
  13. border: 1px solid red;
  14. }
  15. .table-cell-3 {
  16. border: 1px solid red;
  17. }
  18. </style>
  19. <div class="table">
  20. <span class="table-cell-1">单元格1</span>
  21. <span class="table-cell-2">单元格2</span>
  22. <span class="table-cell-3">单元格3</span>
  23. </div>

输出显示
image.png

display: inline-table

关键点1与display:table的唯一不同点是:显示为内联块盒。
关键点2自身周围生成所需的匿名table-row、table-cell对象
例子

<style>
    .table {
      display: inline-table;     
      border: 1px solid red;
    }
    .table-cell-1 {
      border: 1px solid red;
    }
    .table-cell-2 {
      border: 1px solid red;
    }
    .table-cell-3 {
      border: 1px solid red;
    }
</style>  

<div class="table">
  <span class="table-cell-1">单元格1</span>
  <span class="table-cell-2">单元格2</span>
  <span class="table-cell-3">单元格3</span>
  </div>
  <div class="table">
  <span class="table-cell-1">单元格1</span>
  <span class="table-cell-2">单元格2</span>
  <span class="table-cell-3">单元格3</span>
</div>

输出显示
image.png

display: table-row

关键点1显示为块盒。
关键点2自身周围生成所需的匿名table、table-cell对象
关键点3作为表格行盒的元素不能设置width、height、border属性。这些属性只能在表格和单元格元素中设置。

例子

<style>
.table {  
  width: 300px;
  height: 100px;
  border: 1px solid green;
}
.table-cell-1 {
  /* display: table-row; */
  border: 1px solid red;
}
.table-cell-2 {
  display: table-row;
  border: 1px solid red;
}
.table-cell-3 {
  /* display: table-row; */
  border: 1px solid red;
}
</style> 

<div class="table">
    <span class="table-cell-1">单元格1</span>
    <span class="table-cell-2">单元格2</span>
    <span class="table-cell-2">单元格3</span>
</div>

输出显示1单元格1,设置display: table-row;
image.png
输出显示2单元格2,设置display: table-row;
image.png
输出显示3单元格3,设置display: table-row;
image.png

display: table-cell

关键点1显示为内联块盒。
关键点2同一行内的单元格,高度是一样的。即使你设置了不同的单元格高度,以最大值为准。

例子

  <style>
    .table {
      /* display: table;      */
      width: 300px;      
      border: 1px solid green;
    }

    .table-cell-1 {
      display: table-cell;
      height: 30px;
      border: 1px solid red;
    }

    .table-cell-2 {
      display: table-cell; 
      height: 40px;
      border: 1px solid red;
    }

    .table-cell-3 {
      display: table-cell;
      height: 50px;
      border: 1px solid red;
    }
  </style>

输出显示单元格的最终高度height = 50px。
image.png
参考链接
stackoverflow:What is the difference between inline-block and inline-table?