[英]Styling HTML FORM elements with padding, with width 100%
我通过使用具有固定宽度列的表来设置表单样式,我希望<td>
的输入元素填充容器。 我知道CSS盒子模型,我知道元素会在width: 100%
渗透width: 100%
,但问题在于它的一致性。
<input>
元素按预期渗透,但<select>
元素没有。 这导致我的字段没有正确排列。 我已经尝试了所有属性,如溢出,显示,空白......它没有任何区别。 <select>
元素是什么? 我可以在Firebug中看到它们与input元素具有相同的box模型属性,但它们不会呈现相同的。
我正在使用HTML 5 doctype,这在Firefox和Chrome中都会发生。
现在,我正在使用JS函数来修复它,该函数选择具有类拉伸的所有元素并计算并设置静态宽度以使其适合容器内部。 这完美地排列了表单的元素。 (我不得不排除<select>
元素,因为它们的宽度已经好了......奇怪的怪癖。)
有一个纯CSS解决方案吗? 我不希望每次更新页面的一部分时都运行此函数,就像在AJAX调用上一样...
你可以使用box-sizing: border-box;
在textfields和textarea的。 它解决了与选择框的差异。
最好的方法是使用div伪造元素的边框。
<div class="formholder>
<textarea></textarea>
</div>
有了这个CSS:
.formholder {padding:10px;background:white;border:1px solid #ccc}
.formholder textarea {width:100%;padding:0;margin:0;background:white;border:0}
当然,您可以将其扩展到其他领域。 有些浏览器可能会给您带来问题 Chrome和webkit允许您调整textareas的大小,但如果添加resize: none;
对你的CSS,它应该禁用它,但YMMV。
它可以帮助您了解各种可用性研究的以下结果。
1)对于大多数表单,人们更喜欢在表单元素上方看到标签:
2)如果表单元素的大小适当,以帮助建议预期的信息量,人们会发现它很有用。
<ul>
<li><label for="firstname">First Name</label><br>
<input type="text" id="firstname" name="firstname" size="15"></li>
<li><label for="age">Age</label><br>
<input type="text" id="age" name="age" size="3"></li>
<!-- ... more list items -->
</ul>
注意:此示例中的列表将进行样式设置,以使其不显示为项目符号列表。 以这种方式使用列表有助于可访问性,因为屏幕阅读器将告诉用户列表中包含多少项。
我认为这可能有用,因为它表明你的努力可能有点浪费,试图在表格中布局表格并将所有输入拉伸到相同的长度。
以下CSS适用于Moz Firefox,适用于html输入元素(提交,按钮,文本),textarea元素甚至选择元素。 在我正在尝试的浏览器中,select元素的长度几乎相等。
table {width:100%;}
form input { width: 100%; }
form textarea { width: 100%; overflow-y: scroll; resize: vertical; }
form select { width: 100%; }
不是最有用的答案,但是表单元素的CSS样式在浏览器之间是非常不可靠的。 像你这样的JavaScript解决方案是最好的选择。
不可靠性的两个原因:
CSS不能描述表单元素的某些功能。 <select>
元素是一个很好的例子:没有任何CSS属性可以描述<select>
元素在不同操作系统上的不同方式。
试图弄清楚哪些CSS属性应该影响表单元素,以及如何为浏览器制造商设置一个老鼠的巢,所以他们大多只留下它。 Safari是一个值得注意的例外; 参见例如http://webkit.org/blog/17/the-new-form-controls-checkbox-2/
您可以争辩说,不管站点所有者的意图如何,表单元素在站点之间应该看起来相同,以便用户知道他们点击了什么。
请参阅http://meyerweb.com/eric/thoughts/2007/05/15/formal-weirdness/进行更深入的检查。
说你的HTML看起来有点像这样:
<form><table><tr>
<td><input type="text" /></td>
<td><select><option /><option /></select></td>
</tr></table></form>
如何使用input
并select
设置宽度?
td { width: auto; }
input[type=text] { width: 100px; }
select { width: 100px; }
或者我的问题出错了吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.