HTML代码段:
<fieldset id="o-bs-sum-buginfo"> <label for="o-bs-sum-bug-ErrorPrefix">Error Prefix</label> <input type="text" id="o-bs-sum-bug-ErrorPrefix" name="ErrorPrefix" value="" /> <label for="o-bs-sum-bug-ErrorNumber">Error Number</label> <input type="text" id="o-bs-sum-bug-ErrorNumber" name="ErrorNumber" value="" /> .... </fieldset>
仅使用CSS(或jquery),不管浏览器的大小,我想要将标签和输入元素彼此相邻。我也有自由改变调整HTML。如果需要。
解决方法
这是其中一个可能令人惊讶的棘手的权利。
很多人会建议使用float:left;为了这。个人而言,我真的不喜欢浮动;他们似乎引起更多的问题,而不是他们解决。
我的首选是使用内联块。这是一种显示方法,它将嵌入式属性(例如能够指定维度)组合成内联属性(以便您可以轻松地对齐彼此相邻的元素等)。
所以答案是简单地使它们都显示:inline-block;并给提示一个固定的宽度,这将使他们旁边的输入字段排队。
您还需要在输入字段后面添加换行符或换行符,否则下一个提示将出现在同一行上,这不是所需的效果。实现这一点的最佳方法是将每个提示及其字段放入容器< div>中。
所以你的HTML将看起来像这样:
<fieldset id="o-bs-sum-buginfo" class="myfields"> <div> <label for="o-bs-sum-bug-ErrorPrefix">Error Prefix</label> <input type="text" id="o-bs-sum-bug-ErrorPrefix" name="ErrorPrefix" value="" /> </div> <div> <label for="o-bs-sum-bug-ErrorNumber">Error Number</label> <input type="text" id="o-bs-sum-bug-ErrorNumber" name="ErrorNumber" value="" /> </div> .... </fieldset>
并且你的CSS将看起来像这样:
.myfields label,.myfields input { display:inline-block; } .myfields label { width:200px; /* or whatever size you want them */ }
希望有帮助。
jQuery.fn.autoWidth = function(options) { var settings = { limitWidth : false } if(options) { jQuery.extend(settings,options); }; var maxWidth = 0; this.each(function(){ if ($(this).width() > maxWidth){ if(settings.limitWidth && maxWidth >= settings.limitWidth) { maxWidth = settings.limitWidth; } else { maxWidth = $(this).width(); } } }); this.width(maxWidth); }
你可以这样使用它:
$("div.myfields div label").autoWidth();