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;
}
Но теперь проблема в том, что по умолчанию входы являются встроенными элементами, например. вам может понадобиться кнопка отправки рядом с входом. Таким образом, я завернул все это в контейнер div с дисплеем: встроенный блок, поэтому другой встроенный элемент, такой как кнопка, может радостно сидеть рядом с ним.
#container {
display: inline-block;
}
Это прекрасно работает в Chrome, но имеет странные проблемы с выравниванием в Firefox, когда на входе есть какой-либо вертикальный запас. Ниже я добавил окончательную разметку. В верхней части также есть кодовая кнопка.
<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
Ничего себе! Так просто и так эффективно! Это лучший ответ. Единственное, что мешает мне отмечать награду, это то, что вам нужно знать прописку на входе, чтобы расположить оверлей, но заполнение задается пользователем (чтобы соответствовать их существующему стилю). Я полагаю, что обходным решением было бы взломать CSS с помощью jQuery, но этого я и хотел избежать. Если никто не придет с лучшим ответом, я дам вам щедрость. Спасибо! – jackocnr