TLDR:this codepen在Chrome中正常工作,但Firefox中的对齐关闭。Firefox中的折叠边缘对齐
我正在构建一个jQuery plugin,它修改了文本输入以在左边给它一个下拉按钮。为了获得定位正确,我添加了一个包装的div,这是相同的高度投入,使按键可以完全定位在输入的顶部,但仍具有相同的高度:
#wrapper {
position: relative;
}
#overlay {
position: absolute;
top: 0;
bottom: 0;
width: 30px;
}
这可以正常工作,直到输入具有垂直边距:然后容器增长以包含边距,因此下拉按钮随之增长。我的解决方案是边缘崩溃:我给了输入显示:块,这意味着容器忽略它的边缘。都好。
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是我们触及范围的限制(并且不包括按钮元素,或者他们选择放在其输入旁边的任何其他东西)。
非常酷的解决方案,但我很难过说这是不可能的。我已经更新了这个问题,要明确哪些内容可以更改,哪些内容无法更改。 – jackocnr
@jackocnr请参阅我的更新回答。这是你在找什么? – Joeytje50
哇!如此简单而有效!这是最好的答案。阻止我给予赏金的唯一方法是,您必须知道输入中的填充以定位叠加层,但填充由用户设置(以适应他们现有的样式)。我想解决方法是用jQuery破解CSS,但这是我想避免的。如果没有人提出更好的答案,我会给你赏金。谢谢! – jackocnr