Иногда нужно просто показать что-то поверх страницы: форму обратной связи, уведомление, генератор паролей или даже предупреждение о том, что вы случайно запустили ядерный реактор.
Вместо того чтобы тащить в проект тяжеленные UI-библиотеки, можно собрать всё самому — за 5 минут и без головной боли.
Ниже — минимальный, но полностью рабочий пример модального окна. Никаких зависимостей, только ванильный HTML, CSS и JavaScript.
Такой код легко адаптировать под свои задачи: вставить форму, добавить анимацию или превратить окно в полноценный мини-интерфейс.
Такой подход отлично подходит для технических блогов, лендингов, IoT-панелей или даже автономных веб-интерфейсов на Raspberry Pi,
где каждый килобайт на счету, а сторонние скрипты — лишний риск.
Код ниже можно взять «как есть» и вставить в свой проект. А если захочешь — легко расширить: добавить поддержку клавиши Escape,
несколько модальных окон или интеграцию с формой (например, для генерации паролей — об этом будет отдельная статья).
Модальное окно на чистом HTML/CSS/JS — без jQuery и прочих динозавров
Что внутри?
Нажми кнопку ниже, чтобы открыть модальное окно.
Это полностью рабочее модальное окно на чистом HTML, CSS и JavaScript.
<button id="openModalBtn">Открыть модальное окно</button>
<!-- Модальное окно -->
<div id="myModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h2>Привет!</h2>
<p>Это полностью рабочее модальное окно на чистом HTML, CSS и JavaScript.</p>
</div>
</div>
<script>
const modal = document.getElementById("myModal");
const btn = document.getElementById("openModalBtn");
const span = document.querySelector(".close");
btn.onclick = () => modal.style.display = "block";
span.onclick = () => modal.style.display = "none";
window.onclick = (event) => {
if (event.target === modal) modal.style.display = "none";
};
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
const modal = document.getElementById("myModal");
const openButtons = document.querySelectorAll(".open-modal-btn"); // все кнопки с классом
const closeBtn = document.querySelector(".close");
// Открытие модалки
openButtons.forEach(button => {
button.addEventListener("click", (e) => {
e.preventDefault(); // на случай, если кнопка внутри <a> или формы
modal.style.display = "block";
});
});
// Закрытие по крестику
if (closeBtn) {
closeBtn.addEventListener("click", () => {
modal.style.display = "none";
});
}
// Закрытие по клику вне модалки
window.addEventListener("click", (e) => {
if (e.target === modal) {
modal.style.display = "none";
}
});
});
</script>
<!-- Первая кнопка -->
<button class="open-modal-btn bg-purple-700 hover:bg-purple-800 text-white font-bold py-4 px-8 rounded-lg text-xl shadow-lg transform transition hover:scale-105">
<i class="fas fa-clipboard-list mr-3"></i>
ПРОЙТИ ДИАГНОСТИКУ
</button>
<!-- Вторая кнопка (внизу) -->
<button class="open-modal-btn bg-white text-primary hover:bg-gray-100 font-bold py-4 px-8 rounded-lg text-xl shadow-lg transform transition hover:scale-105 mb-4">
<i class="fas fa-gift mr-3"></i>
ЗАПИСАТЬСЯ НА ДИАГНОСТИКУ
</button>
<!-- Третья (тестовая) — можешь удалить -->
<!-- <button class="open-modal-btn">Открыть модальное окно</button> -->
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!