В этой статье я покажу вам, как сделать аккордеонное меню, или вы можете сказать меню часто задаваемых вопросов, используя html, css и javascript.
Возможно, вы видели аккордеонное меню (раздел часто задаваемых вопросов) на веб-сайте, где есть вопрос, который часто задают их пользователи. и когда вы нажмете на этот вопрос, ответ появится. На изображении ниже показано, что при нажатии на второй вопрос появляется ответ или описание.
Ниже приведена демонстрация и полное видеоруководство по меню аккордеона с использованием html, css и javascript.
Аккордеон меню
Итак, я создал два файла с index.html и index.css. Затем связал файл css с html. А также я использовал javascript в этом меню, поэтому я добавил его в html-файл в теге script под закрывающим тегом body.
Ниже приведены шаги для создания аккордеонного меню.
Шаг 1: Создайте базовую HTML-структуру и добавьте вопрос.
Итак, во-первых, я добавил фон (класс-контейнер), который имеет простой фон белого цвета. В центре этого мы собираемся добавить вопросы и ответы. Этот вопрос и ответ заключены в один div (класс коробки). См. приведенный ниже код.
Итак, давайте сначала добавим вопросы.
Для вопроса я добавил тег div с классом label_box, в который добавлен тег H1 и тег span.
- label_box для вопросов.
- Тег H1 предназначен для вопроса заголовка.
- Тег Span предназначен для знака плюс. Когда пользователь нажимает на label_box, знак плюс меняется на знак минус. Также добавлены два тега div для формирования знака плюс (вы также можете использовать изображение).
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="index.css"> </head> <body> <div class="container"> <div class="box"> <div class="label_box"> <h1>Title</h1> <span><div class="line1"></div><div class="line2"></div></span> </div> </div> </div> </body> </html> *{ padding: 0; margin: 0; } body{ width: 100%; height: 100vh; position: relative; } .container{ position: absolute; top: 50%; left: 50%; transform: translate(-50% , -50%); width: 450px; } .box{ width: 100%; background-color: blue; color: #fff; margin-bottom: 12px; } .box .label_box{ display: flex; align-items: center; } .label_box h1{ font-size: 35px; width: 90%; font-weight: bold; padding: 10px; cursor: pointer; } .label_box span{ position: relative; } .label_box span .line1{ width: 3px; height: 16px; background-color: #fff; transition: 0.3s; } .label_box span .line2{ width: 3px; height: 16px; background-color: #fff; position: absolute; top: 0px; rotate: 90deg; transition: 0.3s; }
Выход :
Как вы можете видеть на изображении выше, дизайн вопроса готов. Теперь давайте добавим описание или ответ ниже на вопрос.
Шаг 2: Добавьте ответ под вопросом.
Итак, я добавил тег p с описанием класса. ниже класса label_box, созданного выше.
<p class="description"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit totam quaerat, magnam, expedita repellendus odio necessitatibus soluta ducimus unde perferendis et aliquid ullam inventore dolorum veniam placeat eligendi! Magni, maiores. </p> .box .description{ padding: 12px; font-size: 20px; background-color: #fcfcfc; color: #000; transition: 0.2s; }
Выход :
Теперь меню готово, Давайте спрячем ответ.
Шаг 3: Сначала скройте ответ или описание.
Итак, чтобы скрыть ответ или описание, я добавил в описание высоту: 0 пикселей, переполнение: скрыто, отступ: 0 пикселей.
.box .description{ padding: 0px; height: 0px; overflow: hidden; font-size: 20px; background-color: #fcfcfc; color: #000; transition: 0.2s; }
Выход :
Шаг 4: Теперь давайте добавим больше вопросов и ответов.
Чтобы добавить больше вопросов и ответов, я просто скопировал и вставил весь div класса box. Вы можете увидеть приведенный ниже код. добавлено еще три вопроса и ответа.
<div class="box"> <div class="label_box"> <h1>Title</h1> <span><div class="line1"></div><div class="line2"></div></span> </div> <p class="description"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit totam quaerat, magnam, expedita repellendus odio necessitatibus soluta ducimus unde perferendis et aliquid ullam inventore dolorum veniam placeat eligendi! Magni, maiores. </p> </div> <div class="box"> <div class="label_box"> <h1>Title</h1> <span><div class="line1"></div><div class="line2"></div></span> </div> <p class="description"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit totam quaerat, magnam, expedita repellendus odio necessitatibus soluta ducimus unde perferendis et aliquid ullam inventore dolorum veniam placeat eligendi! Magni, maiores. <br> <br> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit totam quaerat, magnam, expedita repellendus odio necessitatibus soluta ducimus unde perferendis et aliquid ullam inventore dolorum veniam placeat eligendi! Magni, maiores. <br> <br> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit totam quaerat, magnam, expedita repellendus odio necessitatibus soluta ducimus unde perferendis et aliquid ullam inventore dolorum veniam placeat eligendi! Magni, maiores. </p> </div> <div class="box"> <div class="label_box"> <h1>Title</h1> <span><div class="line1"></div><div class="line2"></div></span> </div> <p class="description"> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Impedit totam quaerat, magnam, expedita repellendus odio necessitatibus soluta ducimus unde perferendis et aliquid ullam inventore dolorum veniam placeat eligendi! Magni, maiores. </p> </div>
Выход :
Как вы можете видеть на изображении выше, я добавил еще три вопроса и ответа. Ответы не видны, потому что мы скрываем их на шаге 3.
Шаг 5: Добавьте JavaScript, чтобы открывать ответы, когда пользователь нажимает на вопросы.
Теперь, чтобы открыть ответ (класс описания) при нажатии на вопрос (класс label_box). Я использовал метод foreach. потому что есть те же классы для каждого вопроса и ответа. Итак, с помощью метода foreach мы можем настроить таргетинг на каждый класс. См. ниже JavaScript.
Итак, что он сделает, так это установит высоту описания: 0px; при загрузке страницы. И когда пользователь нажимает на вопрос (класс label_box), он проверяет, равна ли высота описания 0 или нет.
Если это 0px, то если часть будет работать, то знак плюса превратится в минус, повернув его на 90 градусов, высота описания будет установлена равной высоте прокрутки (потому что некоторые описания длинные, а некоторые короткие). и отступ: 12px (который выше установлен на 0px).
Если высота описания не 0px. то еще часть будет работать. которые превращают знак минус в знак плюса, а высота описания и отступы равны 0px.
let box = document.querySelectorAll(".box"); box.forEach((item , index) => { let description = item.querySelector(".description"); let label_box = item.querySelector(".label_box"); let line1 = item.querySelector(".line1"); let line2 = item.querySelector(".line2"); description.style.height = "0px"; label_box.onclick = function(){ if (description.style.height == "0px") { line1.style.rotate = "90deg"; line2.style.rotate = "90deg"; description.style.height = description.scrollHeight + "px"; description.style.padding = "12px"; }else{ line1.style.rotate = "0deg"; line2.style.rotate = "90deg"; description.style.height = "0px"; description.style.padding = "0px"; } } });
Выход :
Как вы можете видеть на изображении выше, при нажатии на вопрос отображается описание, а знак плюс меняется на знак минус. Вот так можно составить меню-аккордеон.
Вам также может понравиться:
Окончательный код:
Вы найдете окончательный код здесь.
Вот как вы можете сделать аккордеонное меню, используя html, css и javascript. Если у вас есть какие-либо вопросы или предложения, вы можете написать в разделе комментариев.
Первоначально опубликовано на https://www.maketechstuff.com.