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
布局而不是对表格进行过度杀伤?
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>
我发现了一个与我几乎相同的案例 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
布局而不是对表格进行过度杀伤?
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>