ChatGPT解决这个技术问题 Extra ChatGPT

如何使元素宽度:100% 减去填充?

我有一个 html 输入。

输入有 padding: 5px 10px; 我希望它是父 div 宽度的 100%(这是流动的)。

但是使用 width: 100%; 会导致输入为 100% + 20px 我该如何解决这个问题?

Example

请参阅我在 15 分钟前发布的这个答案:stackoverflow.com/questions/5219030/… 这应该非常适合您,除非您需要它在 IE7 中工作。
如果您使用了我的方法,请参阅我刚刚对答案所做的轻微修改。它确保在某些浏览器中“均匀填充”。
@Hailwood 我有解决方案,可以为 input 保留填充并支持 IE7
另请使用 calc 函数查看下面的答案

t
thirtydot

box-sizing: border-box 是一种快速、简单的修复方法:

这个 will work in all modern browsers,和 IE8+。

这是一个演示:http://jsfiddle.net/thirtydot/QkmSk/301/

.content {
    width: 100%;
    box-sizing: border-box;
}

现代浏览器不需要浏览器前缀版本(-webkit-box-sizing 等)。


我不认为这是一个糟糕的解决方案。通常,将元素包装在一个额外的 div 中是一种填充元素的好方法,而不会将元素的整体宽度推到其父容器之外。
填充包装 div 也会产生与直接向输入添加填充不同的结果。
@thirtydot 我有一些更灵活和优雅的解决方案,可以保持输入的宽度
@thirtydot 是的,只要让它为 IE7 坏掉,让 M$ 修复它:)
如果您需要它在 IE7 中工作,您可以阅读 an old revision of this answer。我真的为你感到难过。
j
johannchopin

这就是我们在 CSS 中使用 box-sizing 的原因。

我已经编辑了您的示例,现在它可以在 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 的解决方案,请查看其他答案。


+1,但 caniuse.com/#search=box-sizing IE 8?此外,github.com/Schepp/box-sizing-polyfill 似乎为 IE 6-7 提供了解决方案。
+1,如果您不关心 IE,那就太好了(例如使用 PhoneGap 时)
这是什么法宝? +1 表示答案,+1 表示我上面的评论(这正是我需要的)。
这应该是默认行为..而不是 +20 到宽度。有时 CSS 看起来很糟糕。
为了阐明 IE 上的 box-sizing 支持,对于 IE box-sizing 属性取决于 IE 文档模式,它适用于“IE8 标准模式”及更高版本。因此,如果文档模式为“IE8 标准模式”,它也可以在 IE8 浏览器版本中运行。希望这可以帮助。
A
Alex

也使用百分比填充并从宽度中删除:

padding: 5%;
width: 90%;

仅供参考,此解决方案仅适用于非灵活布局。
+1,我猜这个问题是边界。通常,它们看起来“正确”,最多只有 1 到 3 个像素。考虑到浏览器在亚像素舍入方面的不一致,结果太不可预测了。
V
Vladimir Starkov

您可以在不使用 box-sizingnot clear 解决方案(如 width~=99%)的情况下做到这一点。

https://i.stack.imgur.com/Q2ydW.png

保留输入的填充和边框

添加到输入负水平边距 = 边框宽度 + 水平填充

添加到输入的包装器水平填充等于上一步的边距

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 */ 
}

这是一个很好的技巧,使用输入边距和包装器填充来补偿输入填充。
完全同意!!!我已经使用了这个解决方案,它可以广泛使用,没有任何肮脏的技巧!这必须是所有这些答案的解决方案..
我不太明白负边距有什么作用 - 我所知道的是,如果值错误,那么盒子会出现在一侧,但不知何故对称边距解决了这个问题
为什么不使用 box-sizing?它是为了这个目的。
@Ninthu,因为 box-sizing 在 12 年的所有适当浏览器中都不起作用
j
johannchopin

使用 css 计算()

超级简单和真棒。

input {
    width: -moz-calc(100% - 15px);
    width: -webkit-calc(100% - 15px);
    width: calc(100% - 15px);
}​

如下所示:Div width 100% minus fixed amount of pixels
由 webvitaly (https://stackoverflow.com/users/713523/webvitaly)
原始来源:http://web-profile.com.ua/css/dev/css-width-100prc-minus-100px/

刚刚复制到这里,因为我在另一个线程中几乎错过了它。


但是,您需要手动对其进行编程。理想情况下,它将自动确定。
T
TylerH

假设我在一个有 15px 填充的容器中,这就是我一直使用的内部部分:

width:auto;
right:15px;
left:15px;

这会将内部部分拉伸到任何宽度,它应该小于任一侧的 15px。


您能否发布一个将 width:auto 应用于 input 字段的完整示例?
那只是一半的答案。元素的默认位置是静态的,所以 left & right 在这里什么都不做。并且 width auto 也是初始值,所以..这个答案所做的一切都没有:)
S
Sumner Evans

以下是来自 codeontrack.com 的建议,其中有很好的解决方案示例:

不要将 div 的宽度设置为 100%,而是将其设置为 auto,并确保

设置为 display: block(
的默认值)。


您不应该直接发布链接。您可以包含该链接中的信息。原因是,明天可能该链接将不可用,您的答案将不再有效..
F
Felix

你可以尝试一些定位技巧。您可以将输入放在具有 position: relative 和固定高度的 div 中,然后在输入上有 position: absolute; left: 0; right: 0; 和您喜欢的任何填充。

活生生的例子


你在什么浏览器上测试过这个? :(
嗯,仅适用于 Chrome。但我知道我也得到了与在 FF 和 IE 中工作非常相似的东西。
似乎它不适用于 Firefox 中的 <input> 元素(idk about IE)。不过,它适用于 <div>。不,<input> 上的 display: block 也不起作用:-/
M
Martin Jespersen

将输入框的填充移动到包装器元素。

<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/


P
Peter Moore

自从上次回答这个问题以来,也许浏览器已经发生了变化,但这是我唯一可靠地完成此任务的事情:

    width: auto;
    left: 0;
    right: 0;

然后你可以做任何你想要的边距/填充,并且元素不会超过它的可用宽度。

这类似于@andology 的答案,但如果您将左/右都设为 0,那么您可以随意制作 margin 和/或 padding。所以这始终是我的默认 div


u
user3849374

只需了解 width:auto; 之间的区别即可。和宽度:100%;宽度:自动;将(自动)自动计算宽度,以适合包含填充的包装 div 的确切给定值。宽度 100% 扩展宽度并添加填充。


您能否举一个与 一起使用的示例?否则,你只是在派人去追逐野鹅。
D
Didier Aupest

把它包在容器里怎么样。容器应该有如下风格:

{
    width:100%;
    border: 10px solid transparent;
}

M
Manolo Ramos

尝试这个:

width: 100%;
box-sizing: border-box;

J
Jaime Montoya

对我来说,使用 margin:15px;padding:10px 0 15px 23px;width:100%,结果是这样的:

https://i.stack.imgur.com/7RVie.png

我的解决方案是使用 width:auto 而不是 width:100%。我的新代码是:

margin:15px;padding:10px 0 15px 23px;width:auto。然后元素正确对齐:

https://i.stack.imgur.com/9d6fW.png


k
karthikr

你可以这样做:

width: auto;
padding: 20px;

这不是相同的 100% - 保证金。