我有一个html输入。

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

然而使用宽度:100%;导致输入为100% + 20px我怎么才能解决这个问题呢?

例子


当前回答

也许浏览器在上次回答这个问题后已经发生了变化,但这是我唯一可靠地完成这个任务的方法:

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

然后你可以随心所欲地设置边距/填充,元素不会扩展到超出其可用宽度的范围。

这类似于@andology的答案,但如果你把左/右都设为0,那么你可以设置你想要的空白和/或填充。这是我的默认div。

其他回答

也许浏览器在上次回答这个问题后已经发生了变化,但这是我唯一可靠地完成这个任务的方法:

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

然后你可以随心所欲地设置边距/填充,元素不会扩展到超出其可用宽度的范围。

这类似于@andology的答案,但如果你把左/右都设为0,那么你可以设置你想要的空白和/或填充。这是我的默认div。

这就是为什么我们在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的解决方案,请查看其他答案。

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

生活的例子

你可以不使用box-sizing和不明确的解决方案,如width~=99%。

演示jsFiddle:

保持输入的填充和边框 添加到输入负水平边距= border-width +水平填充 在输入的包装器中添加与上一步的边距相等的水平填充

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

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

padding: 5%;
width: 90%;