INPUT box-sizing border-box 在 Chrome 中的 TD 问题中具有 100% 的高度和宽度

INPUT box-sizing border-box with 100% height and width inside TD issue in Chrome

我发现了一个与我几乎相同的案例 here。但是接受的答案对我不起作用,所以我希望我提出一个新问题没问题。

下面的pic是我想在所有主流浏览器(至少IE8+、Firefox和Chrome)中实现的。放置在 TD 内的 INPUT 会填充其 parent 的宽度和高度。

我的问题是我无法使用以下代码片段在 Chrome 中完成它。提前致谢

更新:我在 Chrome 上的问题解释说: 如果仔细观察,顶部和底部边框有 1 或 2px 的填充。这是我在 Chrome 版本 47.0.2526.111 m 上 Windows 7(请 open 在新的 windows 中看得更清楚)

更新 2:样本上的大错误。 DIV 在不使用 box-sizing 的情况下调整它们的 parent 就好了。我真正想要的是 INPUT 也可以调整它们的 parent 。刚刚再次更新了我的代码片段。

table {
  border-collapse: collapse;  
  width: 100%
}
td {
  height: 100px;
  border: 1px #ccc solid;
}
input {
  border: 1px #ccc solid;
  height: 100%;
  width: 100%;  
  box-sizing: border-box;          /* works fine with IE8+ */
  -moz-box-sizing: border-box;     /* works fine Firefox */
  -webkit-box-sizing: border-box;  /* height is not correct in Chrome */
/*-webkit-box-sizing: content-box;    width is not correct in Chrome  */
}
<table>
  <tr>
    <td>
      <input type="text" value="this INPUT need to adapt to its parent TD">
    </td>
  </tr>
</table>

这很奇怪,但我认为您看到的是 td,固定高度为 100 像素,顶部和底部的边框宽度为 1 像素,这会影响子 div s身高100%计算。

是否可以将高度分配给 div 而不是像下面这样的 td?这对我有用 chrome.

table {
  border-collapse: collapse;  
  width: 100%
}
td {
  border: 1px #ccc solid;
}
div {
  border: 1px #ccc solid;
  height: 100px;
  width: 100%;  
  box-sizing: border-box;          /* works fine with IE8+ */
  -moz-box-sizing: border-box;     /* works fine Firefox */
  -webkit-box-sizing: border-box;  /* height is not correct in Chrome */
/*-webkit-box-sizing: content-box;    width is not correct in Chrome  */
}
<table>
  <tr>
    <td>
      <div>BOX1</div>
    </td>
    <td>
      <div>BOX2</div>
    </td>
    <td>
      <div>BOX3</div>
    </td>
  </tr>
</table>

其实我一直在寻找这个问题的答案(从 2014 年开始)。网上有一些 post 说这是 Chromium 的错误。我设法回忆起 link here。尽管如此,我怀疑很快就会有答案。

与此同时,我想为遇到与我相同问题的任何人提出一个快速而肮脏的修复方法:对于 chrome,将所有 INPUT 包装在 DIV.[=14 中=]

$(function() {
  
  // if agent is of Chrome
  var isChrome = /chrom(e|ium)/.test(navigator.userAgent.toLowerCase());
  
  if (isChrome) {
    $("table td>:input").wrap($("<div>", {"class": "input-container"}));
  }
});
table {
  border-collapse: collapse;  
  width: 100%
}
td {
  height: 100px;
  border: 1px #ccc solid;
}
input {
  border: 1px #ccc solid;
  height: 100%;
  width: 100%;  
  box-sizing: border-box;          /* works fine with IE8+ */
  -moz-box-sizing: border-box;     /* works fine Firefox */
/*-webkit-box-sizing: border-box;     height is not correct in Chrome
 *-webkit-box-sizing: content-box;    width is not correct in Chrome  */  
}
div.input-container {
  height: 100%;
  width: 100%;  
  -webkit-box-sizing: border-box;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td>
      <input type="text" value="this INPUT need to adapt to its parent TD">
    </td>
  </tr>
</table>

为什么不使用简单的 css 布局而不是对表格进行过度杀伤?

Fiddle

html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

.container {
  width: 100%;
}

.padding {
  height: 100px;
}

.outer_border {
  padding: 1px;
  border: 1px solid black;
}

input {
  border: 1px black solid;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

HTML

 <div class="container">
  <div class="outer_border">
    <div class="padding">
      <input type="text" value="this INPUT need to adapt to its parent TD">
    </div>
  </div>
</div>