【发布时间】:2014-01-31 15:18:18
【问题描述】:
TLDR:this codepen 在 Chrome 中运行良好,但在 Firefox 中对齐已关闭。
我正在构建一个jQuery plugin,它会修改文本输入以在左侧为其提供一个下拉按钮。为了获得正确的定位,我添加了一个包装器 div,它与输入的高度相同,因此按钮可以绝对定位在输入的顶部,但仍然具有相同的高度:
#wrapper {
position: relative;
}
#overlay {
position: absolute;
top: 0;
bottom: 0;
width: 30px;
}
这在输入具有垂直边距之前工作正常:然后容器增长到包含边距,因此下拉按钮随之增长。我对此的解决方案是边距折叠:我给出了输入 display:block 这意味着容器忽略了它的边距。都很好。
input {
margin: 20px 0 40px; /* testing */
display: block;
}
但现在的问题是,默认情况下,输入是内联元素,例如您可能希望在输入旁边有一个提交按钮。所以我用 display:inline-block 将整个东西包裹在一个容器 div 中,这样另一个像按钮这样的内联元素可以愉快地坐在它旁边。
#container {
display: inline-block;
}
这在 Chrome 中运行良好,但在 Firefox 中当输入有任何垂直边距时会出现奇怪的对齐问题。下面我添加了最终标记。顶部还有一个 codepen 链接。
<div id="container">
<div id="wrapper">
<input>
<div id="overlay"></div>
</div>
</div>
<button>Submit</button>
编辑:关键是这是一个插件,我正在尝试使用用户现有的标记和 CSS,例如他们有这个标记:
<input><button>Submit</button>
并且他们现有的 CSS 在输入上具有垂直边距,我希望他们能够在输入上初始化我的插件并且它可以正常工作,而无需强迫他们更改其标记/CSS。现在因为插件需要在输入周围添加大量标记(用于覆盖和下拉列表),所以我将它全部包装在一个容器 div 中。这个容器 div 是我们范围的限制(不包括按钮元素,或者他们选择放在输入旁边的任何其他内容)。
【问题讨论】: