我有一个 html 输入。
输入有padding: 5px 10px;
我希望它是父 div 宽度的 100%(这是流动的)。
但是使用width: 100%;
导致输入是100% + 20px
我如何解决这个问题?
我有一个 html 输入。
输入有padding: 5px 10px;
我希望它是父 div 宽度的 100%(这是流动的)。
但是使用width: 100%;
导致输入是100% + 20px
我如何解决这个问题?
box-sizing: border-box
是一种快速、简单的修复方法:
这适用于所有现代浏览器和 IE8+。
这是一个演示:http: //jsfiddle.net/thirtydot/QkmSk/301/
.content {
width: 100%;
box-sizing: border-box;
}
-webkit-box-sizing
现代浏览器不需要浏览器前缀版本(等)。
这就是我们box-sizing
在 CSS 中的原因。
我已经编辑了您的示例,现在它可以在 Safari、Chrome、Firefox 和 Opera 中使用。看看: http: //jsfiddle.net/mathias/Bupr3/ 我添加的只是这个:
input {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
不幸的是,IE7 等较旧的浏览器不支持此功能。如果您正在寻找适用于旧 IE 的解决方案,请查看其他答案。
也使用百分比填充并从宽度中删除:
填充:5%; 宽度:90%;
您可以在不使用box-sizing
且不明确的解决方案(例如width~=99%
.
padding
和border
margin
= border-width
+horizontal padding
padding
等于margin
上一步HTML 标记:
<div class="input_wrap">
<input type="text" />
</div>
CSS:
div {
padding: 6px 10px; /* equal to negative input's margin for mimic normal `div` box-sizing */
}
input {
width: 100%; /* force to expand to container's width */
padding: 5px 10px;
border: none;
margin: 0 -10px; /* negative margin = border-width + horizontal padding */
}
使用 css 计算()
超级简单和真棒。
input {
width: -moz-calc(100% - 15px);
width: -webkit-calc(100% - 15px);
width: calc(100% - 15px);
}
如此处所示:Div 宽度 100% 减去固定数量的像素
由 webvitaly ( https://stackoverflow.com/users/713523/webvitaly )
原始来源:http ://web-profile.com.ua/css/dev/css -width-100prc-minus-100px/
刚刚复制到这里,因为我在另一个线程中几乎错过了它。
假设我在一个有 15px 填充的容器中,这就是我一直使用的内部部分:
width:auto;
right:15px;
left:15px;
这会将内部部分拉伸到任何宽度,它应该小于任一侧的 15px。
你可以尝试一些定位技巧。您可以将输入放在一个具有position: relative
固定高度的 div 中,然后在输入上设置有position: absolute; left: 0; right: 0;
,以及您喜欢的任何填充。
这是codeontrack.com的推荐,其中有很好的解决方案示例:
不要将 div 的宽度设置为 100%,而是将其设置为 auto,并确保
<div>
设置为 display: block(默认为<div>
)。
将输入框的填充移动到包装器元素。
<style>
div.outer{ background: red; padding: 10px; }
div.inner { border: 1px solid #888; padding: 5px 10px; background: white; }
input { width: 100%; border: none }
</style>
<div class="outer">
<div class="inner">
<input/>
</div>
</div>
请参阅此处的示例:http: //jsfiddle.net/L7wYD/1/
自从上次回答这个问题以来,也许浏览器已经发生了变化,但这是我唯一可靠地完成此任务的事情:
width: auto;
left: 0;
right: 0;
然后你可以做任何你想要的边距/填充,并且元素不会超过它的可用宽度。
这类似于@andology 的答案,但如果你将左/右都设为 0,那么你可以制作margin
和/或padding
任何你想要的东西。所以这始终是我的默认设置div
。
只需了解 width:auto; 之间的区别即可。和宽度:100%;宽度:自动;将(自动)自动计算宽度,以适合包含填充的包装 div 的确切给定值。宽度 100% 扩展宽度并添加填充。
把它包在容器里怎么样。容器应该有如下风格:
{
width:100%;
border: 10px solid transparent;
}
试试这个:
width: 100%;
box-sizing: border-box;
你可以这样做:
width: auto;
padding: 20px;