javascript — Как сделать плавный динамический выпадающий список?
Задать вопрос
Вопрос задан
Изменён 2 года 5 месяцев назад
Просмотрен 2k раз
Я хочу сделать плавный выпадающий список
Я сделал вот такой вариант
.menu { padding: 0px; display: block; } .menu>li { margin: 0px; position: static; } .menu a { display: block; transition: 1s; color: blue; } .menu li { padding: 3px; max-height: 13px; overflow: hidden; background: #ff000059; } .menu ul { margin: 0px; padding: 0px; max-height: 0px; overflow: hidden; transition: 1s; } .menu li:hover { transition: 1s; max-height: 1000px; } . menu>li:hover { transition: 1s; } .menu li:hover ul { transition: 1s; max-height: 1000px; } .menu .test { padding: 10px; font-size: 30px; }
<ul> <li><a href="#">position</a> <ul> <li><a href="#">top</a></li> <li><a href="#">left</a></li> <li><a href="#">down</a></li> <li><a href="#">right</a></li> </ul> </li> <li><a href="#">Object</a> <ul> <li><a href="#">Car</a> <ul> <li><a href="#">red</a></li> <li><a href="#">blue</a></li> <li><a href="#">black</a></li> <li><a href="#">yellow</a></li> </ul> </li> <li><a href="#">Windows</a> <ul> <li><a href="#">red</a></li> <li><a href="#">blue</a></li> <li><a href="#">black</a></li> <li><a href="#">yellow</a></li> </ul> </li> </ul> </li> </ul>
Но, проблема в том, что мне постоянно нужно подбирать нужный max-height. Особенно это сложно, если блоки разной высоты.
Как я могу сделать плавный выпадающий список? Что бы он поддерживал блоки разной высоты и работал на любой степени вложенности.
Желательно простой вариант с минимумом JS.
- javascript
- html
- css
Может такой вариант подойдет:
ul:not(.menu) { overflow: hidden; max-height: 0; transition: 0.5s ease-out; } li:hover>ul { max-height:100vh; transition: 0.5s ease-in; }
<ul> <li><a href="#">position</a> <ul> <li><a href="#">top</a></li> <li><a href="#">left</a></li> <li><a href="#">down</a></li> <li><a href="#">right</a></li> </ul> </li> <li><a href="#">Object</a> <ul> <li><a href="#">Car</a> <ul> <li><a href="#">red</a></li> <li><a href="#">blue</a></li> <li><a href="#">black</a></li> <li><a href="#">yellow</a></li> </ul> </li> <li><a href="#">Windows</a> <ul> <li><a href="#">red</a></li> <li><a href="#">blue</a></li> <li><a href="#">black</a></li> <li><a href="#">yellow</a></li> </ul> </li> </ul> </li> </ul>
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Тег HTML выпадающий список
Рейтинг: 4 из 5, голосов 38
28 декабря 2019 г.
Тег <select> в HTML используется для создания выпадающего списка в HTML форме.
С помощью атрибута multiple можно создать список с выбором нескольких значений (список с множественным выбором).
Пункты выпадающего списка определяются с помощью тега <option>. Тег <optgroup> определяет группы пунктов внутри выпадающего списка HTML.
Выпадающий список в HTML является одним из элементов форм. Подробно о создании форм описано в статье: Все про формы и поля в HTML. Создание и работа с формами.
При отправке формы, на сервер будет отправлена переменная, в качестве названия имеющая имя списка select (значение атрибута name), содержащая значение выбранного пункта списка. Если в выбранном пункте списка <option> есть атрибут value, то значением считается его содержимое, в противном случае значением считается содержимое тега <option>.
Синтаксис
<select>элементы списка</select>
Примеры использования выпадающего списка <select> в HTML коде
Ниже представлены 4 основных варианта выпадающих списков HTML.
Простой HTML выпадающий список
СинийЗеленыйЖелтыйКрасныйОранжевыйЧерный
HTML код простого выпадающего списка
<select name="user_profile_color_1">
<option value="1">Синий</option>
<option value="2">Зеленый</option>
<option value="3">Желтый</option>
<option value="4">Красный</option>
<option value="5">Оранжевый</option>
<option value="6">Черный</option>
</select>
Выпадающий список с выбором нескольких значений
Добавить списку возможность множественного выбора (выбора одновременно нескольких значений) можно используя атрибут multiple. Количество одновременно выводимых на экран пунктов списка с множественным выбором регулируется с помощью атрибута size.
Атрибут name такого списка должен заканчиваться символами «[]», например, name=»cars[]».
NissanToyotaBMWWolksvagenSkodaMercedes-Benz
HTML код выпадающего списка с выбором нескольких значений
<select name="user_cars[]" multiple="multiple" size="4">
<option value="1">Nissan</option>
<option value="2">Toyota</option>
<option value="3">BMW</option>
<option value="4">Wolksvagen</option>
<option value="5">Skoda</option>
<option value="6">Mercedes-Benz</option>
</select>
Раскрывающийся список с группами пунктов
Пункты в HTML списке select можно группировать с помощью тега <optgroup>. Название группы не доступно для выбора, служит для удобства пользователей.
МоскваСанкт-ПетербургНовосибирскКиевХарьковЛьвовМинскБобруйскГомель
HTML код раскрывающегося списка с группами пунктов
<select name="user_city">
<optgroup label="Россия">
<option value="1">Москва</option>
<option value="2">Санкт-Петербург</option>
<option value="3">Новосибирск</option>
</optgroup>
<optgroup label="Украина">
<option value="4">Киев</option>
<option value="5">Харьков</option>
<option value="6">Львов</option>
</optgroup>
<optgroup label="Беларусь">
<option value="7">Минск</option>
<option value="8">Бобруйск</option>
<option value="9">Гомель</option>
</optgroup>
</select>
HTML список обязательный для заполнения (выбора)
Для того, чтобы создать список select, обязательный для заполнения (<select> список, где пользователь должен обязательно выбрать значение) нужно использовать атрибут required, а также добавить внутрь списка первым пунктом <option> с пустым значением атрибута value.
Выберите значениеСинийЗеленыйЖелтыйКрасныйОранжевыйЧерный
HTML код выпадающего списка обязательного для выбора (заполнения)
<select name="user_profile_color_2" required="required">
<option value="">Выберите значение</option>
<option value="1">Синий</option>
<option value="2">Зеленый</option>
<option value="3">Желтый</option>
<option value="4">Красный</option>
<option value="5">Оранжевый</option>
<option value="6">Черный</option>
</select>
Поддержка браузерами
Тег | |||||
<select> | Да | Да | Да | Да | Да |
Атрибуты тега select
Атрибут | Значения | Описание |
---|---|---|
autofocus | не указывается / autofocus |
Логический атрибут. |
disabled | не указывается / disabled |
Логический атрибут. Если указан, делает список неактивным. Данные списка, отмеченного этим атрибутом, не будут переданы на сервер при отправке формы. Атрибут также отключает возможность изменения состояния списка пользователем (например, изменение выбранного пункта). |
form | id формы |
Указывает на форму, к которой относится список. Используется, если список <select> находится вне HTML кода формы. Если список находится внутри тега <form>, то использовать атрибут form не нужно, список по умолчанию привязан к форме, внутри которой находится. |
multiple | не указывается / multiple |
Логический атрибут. Открывает возможность множественного выбора. Если указан, вместо выпадающего списка будет выведен список с возможностью выбрать несколько значений (пунктов) одновременно. Количество элементов, доступных без скроллинга регулируется атрибутом size. |
name | текст |
Имя списка. Используется при передаче данных формы на сервер. Значение списка будет передано в переменной, имеющей имя, указанное в этом атрибуте. |
required | не указывается |
Логический атрибут. Если указан, список будет определен как обязательный для заполнения (обязательный для выбора). Форма не будет отправлена на сервер, если в таком списке не будет выбрано ни одно значение. Заполнение контролируется браузером. При попытке отправить форму с незаполненным обязательным списком браузеры обычно выводят на экран ошибку заполнения. |
size | число |
Количество пунктов списка, одновременно выводимых на экран. Для выпадающего списка используется значение 1. Это значение по умолчанию. Если значение больше чем 1, вместо выпадающего списка будет выведен список со скроллингом. |
Тег <select> также поддерживает глобальные HTML атрибуты.
by Lebedev
Как настроить выпадающий список с помощью CSS
Знакомо ли вам чувство, которое вы испытываете, когда тратите несколько часов на то, чтобы все выглядело идеально, только для того, чтобы быть побежденным браузером! Позволь мне объяснить. Итак, мой день начался с тестирования страницы, которую я создавал для веб-сайта клиента. И что это, когда я заметил проблему. В то время как это конкретное *раздражение* осталось бы незамеченным неопытным глазом, мои очки дизайнера пользовательского интерфейса сразу же заметили это.
Проблема заключалась в том, что в разных браузерах поле выбора отображалось по-разному. Я знаю, что это не недавняя проблема. Дело в том, что каждый браузер отображает поле по-своему. Firefox — худший (в данном случае)… худший! И эта непоследовательность была темным пятном на моем творчестве.
Итак, прервём драму 😀 . Следующее, что я сделал, очевидно, попытался решить эту проблему. Погуглив об этом. Я не был готов так легко победить. Некоторые форумы предлагали мне использовать свойства -moz-appearance или -webkit-appearance , но я не смог найти действительно работающее решение.
Теперь я знал, что мне нужен CSS, который я должен правильно использовать для решения этой проблемы. Но это было не очень очевидно, пока один из моих экспериментов не натолкнул меня на мысль.
Если не можешь изменить… Спрячь!Поскольку проблема заключалась в основном в кнопке раскрывающегося списка, простой вариант состоял в том, чтобы скрыть ее во всех браузерах и заменить ее своим собственным изображением, чтобы элемент выбора выглядел одинаково во всех браузерах. Я объясню это вам шаг за шагом.
1. Поместите раскрывающийся список в контейнер
Для начала нам нужна определенная область для поля выбора. Эта область должна быть отмечена контейнером div, а поле выбора размещено внутри другого div.
<дел> <дел> <выбрать имя="search_categories">выбрать>