CSS包含100%宽度的输入文本

w.d*_*hue 20 html css

所以当我像这个例子那样设置输入文本框时,因为默认情况下它有边框和填充,所以宽度将超过200px.

<div style="width:200px; background-color:red;">
    <input type="text" name="fname" style="width:100%;"/>
</div>
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过将类设置为输入标记并使用此CSS标记它来强制文本框适合200px

-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;    
box-sizing: border-box;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法让这个文本框正确的大小,即填写100%,因为我想要它做?我不能使用固定尺寸.我正在使用CSS主题,因此在编译时不知道文本框填充,边距等.它们可以由用户即时更改.因此,无论文本框的填充,边框和边距是什么,解决方案都必须正常工作.

mrt*_*man 25

我想你已经回答了自己的问题.box-sizing: border-box;实际上是唯一一种让元素适合其父元素的CSS方法.css-tricks在这里详细介绍了这一点.

http://css-tricks.com/box-sizing/

我不知道除了使用javascript执行某些计算然后修改输入元素之外你可以使用的任何其他CSS.


Vla*_*kov 6

是的。能行的

您可以在不使用box-sizing诸如之类的不明确解决方案的情况下完成此操作width~=99%jsFiddle 上的演示
在此输入图像描述

HTML 标记:

<div class="input_wrap">
    <input type="text" />
</div>
Run Code Online (Sandbox Code Playgroud)

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 */ 
}   
Run Code Online (Sandbox Code Playgroud)