为啥具有 100% 宽度并显示为表格的元素有右边距不起作用?

Posted

技术标签:

【中文标题】为啥具有 100% 宽度并显示为表格的元素有右边距不起作用?【英文标题】:Why element with 100% width and displayed as table have right margin not work?为什么具有 100% 宽度并显示为表格的元素有右边距不起作用? 【发布时间】:2017-05-17 18:57:59 【问题描述】:

在下面的代码中,当行 div 显示为 table 并且 width 设置为 100% 时,框缩小并且似乎 margin-right 设置为 nil 或者您可以说它没有显示任何影响。

但是,当我删除 width:100%,margin-right` 时会被应用

* 
  box-sizing: border-box;

.container 
  padding-left: 15px;
  padding-right: 15px;

.row 
  background-color: #cdecde;
  margin-right: -15px;
  margin-left: -15px;

.table 
  display: table;
  width: 100%;

.col 
  padding: 20px 15px;
<div class="container">
  <div class="row table">
    <div class="col">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae autem minima minus eligendi, enim dicta quibusdam reiciendis veniam maiores accusamus ut, dolorum repellat, ea, odit quisquam magni dolor aliquid vero!</div>
  </div>
</div>

https://jsfiddle.net/sp30xr76/

请解释上述行为。

【问题讨论】:

【参考方案1】:

您将 negative margins 应用到 row 元素 - 这导致了 问题

当应用 负边距 时,table 会向左移动,占用 paddingcontainer 的空间 - 尝试移除 负边距 来自row,看看它是如何水平对齐的:

* 
  box-sizing: border-box;

.container 
  padding-left: 15px;
  padding-right: 15px;

.row 
  background-color: #cdecde;
  /*margin-right: -15px;
  margin-left: -15px;*/

.table 
  display: table;
  width: 100%;

.col 
  padding: 20px 15px;
<div class="container">
  <div class="row table">
    <div class="col">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Beatae autem minima minus eligendi, enim dicta quibusdam reiciendis veniam maiores accusamus ut, dolorum repellat, ea, odit quisquam magni dolor aliquid vero!</div>
  </div>
</div>

当您不提供width: 100% 时,table 会占用完整的可用宽度,因为table 的内容是一个跨越多行的文本。

看看当文本较少时会发生什么:

* 
  box-sizing: border-box;

.container 
  padding-left: 15px;
  padding-right: 15px;

.row 
  background-color: #cdecde;
  margin-right: -15px;
  margin-left: -15px;

.table 
  display: table;

.col 
  padding: 20px 15px;
<div class="container">
  <div class="row table">
    <div class="col">Lorem ipsum dolor</div>
  </div>
</div>

希望能解决问题,谢谢!

【讨论】:

以上是关于为啥具有 100% 宽度并显示为表格的元素有右边距不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这张图片有右边距?

为啥 Twitter Bootstrap 表格总是有 100% 的宽度?

在非常宽的 HTML 表格上获得右边距?

超出屏幕右边界时 HTML 元素被截断

具有 100% 宽度的 HTML 表格,在 tbody 内具有垂直滚动 [重复]

具有 100% 宽度的 HTML 表格,在 tbody 内具有垂直滚动 [重复]