Я использую [type=checkbox]
для записи пользовательского ввода для пользовательского выпадающего меню, которое я создал.Я также использую его для функций required
в браузерах.
Однако проблема, с которой я сталкиваюсь, заключается в том, чтоЭлемент, по-видимому, нуждается как минимум в 1px
из height
, чтобы вызвать предупреждение браузера, когда пользователь пытается отправить форму без заполнения этой части.Это проблема, потому что выпадающее меню имеет height
из auto
, поэтому, как только появляется предупреждение браузера, оно сдвигает все вверх, так что в нижней части есть пробел 1px
.
Примечательно, что содержимое изменяется только в том случае, если отображается предупреждающее сообщение.
Я знаю, что могу исправить это с помощью positioning
элемента absolutely
с JS, но я стараюсь использовать как можно меньше JS.Поэтому я присвоил контейнеру position: relative
и расположил элемент так, чтобы он всегда отображался в центре нижней части элемента контейнера, как и все остальные поля.
#dropdown {
position: relative;
}
#subject {
width: 1px;
height: 1px;
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
pointer-events: none;
padding: 0;
opacity: 0;
margin: 0;
}
Как я уже говорил выше,Я уже пытался задать ему высоту 0
, но при этом предупреждающее сообщение не срабатывает.Я также попробовал пару различных display
значений (и я буду проходить через остальные из них, как только закончу это задавать).Я также попытался применить position: absolute; bottom: 0;
к последней опции в списке.Ничего из этого не работает.
const
option = document.querySelector('#option')
document.querySelector('#dropdown').addEventListener('click', function(){
option.style.maxHeight = option.scrollHeight + 'px'
})
#dropdown {
position: relative;
overflow: hidden;
box-sizing: border-box;
border: solid red 3px;
}
#label {
padding: 50px;
}
#option {
max-height: 0;
transition:
.5s max-height;
}
#option:hover {
background: skyblue;
}
#checkbox {
width: 5px;
height: 5px; /* added extra pixels to emphasize the issue */
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
pointer-events: none;
padding: 0;
opacity: 0;
margin: 0;
}
<form>
<div id='dropdown'>
<div id='label'>Subject</div>
<div id='option'>Last Option</div>
<input id='checkbox' type='checkbox' required />
</div>
<input type='submit' />
</form>
У кого-нибудь есть идеи, как я могу сделать это только с помощью CSS?
Возможно ли это, поскольку контейнер имеет height
из auto
?