所以当我像这个例子那样设置输入文本框时,因为默认情况下它有一个边框和填充,将比200px宽。
<div style="width:200px; background-color:red;">
<input type="text" name="fname" style="width:100%;"/>
</div>
我知道我可以通过将类设置为输入标记并使用此CSS标记它来强制文本框适合200px
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
有没有更好的方法让这个文本框正确调整大小,即按我希望的方式填充100%?我不能使用固定尺寸。我正在使用CSS主题,因此在编译时不知道文本框填充,边距等。它们可以由用户即时更改。因此,无论文本框的填充,边框和边距是什么,解决方案都必须正常工作。
答案 0 :(得分:23)
我想你已经回答了自己的问题。 box-sizing: border-box;
实际上是唯一能让元素适合其父元素的CSS方法。 css-tricks在这里详细介绍了这一点。
http://css-tricks.com/box-sizing/
我不知道除了使用javascript执行某些计算然后修改输入元素之外你可以使用的任何其他CSS。
答案 1 :(得分:3)
<div style="width:200px; background-color:red;">
<input type="text" name="fname" style="width:100%;border:1px;padding:4px;margin:-5px"/>
</div>
答案 2 :(得分:3)
您可以不使用box-sizing
和不清晰的解决方案(例如width~=99%
)来执行此操作。
Demo on jsFiddle:
HTML标记:
<div class="input_wrap">
<input type="text" />
</div>
<强> CSS:强>
div {
padding: 6px 17px; /* equal to negative input's margin for mimic normal `div` box-sizing */
}
input {
width: 100%; /* force to expand to container's width */
border: 7px solid #DFDFDF;
padding: 0 10px;
margin: 0 -17px; /* negative margin = border-width + horizontal padding */
}
答案 3 :(得分:2)
<div style="width:200px; height:22px; background-color:red;">
<input type="text" name="fname" style="width:97%;margin-left:1%;"/>
</div>
但严重的是,这里是jsfiddle。