Похоже, что Chrome не следует стандартным правилам - ни добавление !important
к правилу высоты, ни добавление правила overflow: hidden;
, ни выбор селектора для #input
больше спецификаций c не позволяют вводить окно становится многострочным.
Однако это может быть крайний случай - правило hidden
довольно странно. если вы замените
.hidden {
visibility: hidden;
position: absolute;
}
на
.hidden {
display: none;
}
Chrome, то вернетесь к ожидаемому поведению.
Относительно комментариев, альтернативный способ скрыть и показать ввод без изменения его CSS - скрыть и показать его родительский элемент:
var show = b => {
var input = document.getElementById('input');
input.parentNode.classList[b ? 'remove' : 'add']('hidden');
Это только спасет поведение Chrome, если родительский узел отображается как элемент блока - пытается перенос input
в тег span
без изменения правила его отображения на «блок» приводил к повторному появлению многострочного элемента ввода только после удаления класса hidden
элемента span
.
Если в существующем контейнере div
нет других дочерних элементов, то все, что нужно, - это возможность изменить его на абсолютный элемент.
Идея попробовать это пришла из того, как CSS может произойти сбой при применении к абсолютному блоку, но работает при применении к блоку stati c (position: static
) внутри того же абсолютного блока.