Предотвратите изменение положения div с увеличением высоты

#javascript #html #css

Вопрос:

кодовый набор

 form{
    min-height: 50vh;
    transition: all 0.7s linear;
    display: flex;
    flex-direction: column;
    justify-content: space-evenly;
    border: 0 2px 0 0 solid black;
    width: 20rem;
    padding: 10%;
    margin:auto;
    flex-wrap: wrap;
    position: relative;
    background-color: #e9ac67;
    position: relative;
}
input{
    height: 2rem;
    border: 2px solid black;
}
label{
    text-transform: capitalize;
}
.sug-city{
    list-style: none;
    font-size: 0.5rem;
}
ul{
    list-style: none;
}
li{
    border: black 2px solid;
    margin:0
}

 

Всякий раз, когда появляется список предложений, высота увеличивается(что и ожидалось), но положение формы также меняется. Я хочу, чтобы высота росла вертикально вниз, а не вверх. Подумайте о том, как работает панель поиска Google. Это конечный результат, которого я хочу.

Ответ №1:

Вы помещаете свой элемент списка в один и тот же контейнер, поэтому расширение списка также приведет к расширению всего.

Вы можете поместить свой элемент списка снаружи и/или указать ему абсолютную позицию. Минимальные изменения можно найти здесь: codepen

В основном я завернул поле ввода в относительно расположенную обертку, чтобы сохранить это положение; затем я изменил ul на position:absolute .

Ответ №2:

Попробуйте Это


 ul {
    max-height: 250px;
    overflow-y: scroll;
}
 

Ответ №3:

Такое поведение объясняется тем, что ваше тело display:flex и вы применили justify-content:space-evenly . Которые автоматически регулируют доступное пространство между элементами. Когда появляется список предложений, он увеличивает размер выбранного элемента и занимает больше места на экране, который в конечном итоге перемещается вверх.

Измените вас CSS таким образом, и это решит вашу проблему.

 body {
    display: flex;
    flex-direction: column;
    align-items: center;
    position: relative; //So you can specify childrens' absolute position
    min-height: 100vh;font-family: 'Urbanist', sans-serif;
    text-transform: uppercase;
    font-size: 1.3rem;
    background-image: linear-gradient(to left top, #051937, #4d295a, #983461, #d2524d, #e98c27);
}

form {
    min-height: 50vh;
    transition: all 0.7s linear;
    display: flex;
    flex-direction: column;
    justify-content: space-evenly;
    border: 0 2px 0 0 solid black;
    width: 20rem;
    padding: 10%;
    margin:auto;
    flex-wrap: wrap;
    background-color: #e9ac67;
}

header {
  margin-top: 50px;
}

main {
  position: relative;
  top: 50px;
}

 

Ответ №4:

для определения высоты лучше использовать другие единицы измерения. устройство «vh» может создавать некоторые проблемы, особенно в мобильных устройствах.

  and also use 
 ul{
   overflow-y: scroll;
 }

 
 

Комментарии:

1. Но разве vh не рекомендуется? Или мне следует использовать rem?

2. вы знаете, я думаю , что для высоты не нужно устанавливать какую-либо единицу измерения, потому что она сама по себе гибкая, если вы хотите использовать единицу измерения, используйте rem, а для «vh» просто используйте на настольных дисплеях при написании медиа-запросов . надеюсь, в этом есть смысл;