Featherlight — это лёгкая библиотека для создания модальных окон на JavaScript. Несмотря на историческую привязку к jQuery, существует версия, совместимая с vanilla JavaScript, что позволяет использовать её без сторонних зависимостей.
Для подключения необходимо добавить CSS и JS файлы библиотеки в проект:
<link rel="stylesheet" href="featherlight.min.css">
<script type="module" src="featherlight.min.js"></script>
Важно подключать CSS перед JS, чтобы стили
модального окна корректно применялись при инициализации. В версии для
Vanilla JS используется экспорт класса Featherlight через
ES-модули.
Создание модального окна в чистом JavaScript отличается от
jQuery-версии. Основной класс Featherlight предоставляет
конструктор и набор методов для управления состоянием окна.
import Featherlight from './featherlight.min.js';
const modal = new Featherlight('<p>Содержимое модального окна</p>');
При передаче строки в конструктор создаётся динамическое окно с указанным HTML.
Можно также передавать DOM-элемент:
const content = document.querySelector('#modal-content');
const modal = new Featherlight(content);
В этом случае элемент переносится в тело модального окна, сохраняя исходные события и стили.
Для управления окном используются методы open() и
close():
modal.open(); // открывает окно
modal.close(); // закрывает окно
Дополнительно поддерживается toggle() для переключения
состояния. Эти методы позволяют контролировать модальные окна
программно, без привязки к кнопкам или ссылкам.
Featherlight предоставляет объект конфигурации options.
Основные параметры:
variant — добавляет кастомный CSS-класс к модальному
окну;persist — если true, содержимое
сохраняется между открытиями;closeOnClick — определяет поведение при клике на фон
(background, anywhere,
false);beforeOpen, afterOpen,
beforeClose, afterClose — коллбеки на
соответствующие события.Пример конфигурации:
const modal = new Featherlight('<p>Пример окна</p>', {
variant: 'custom-lightbox',
persist: true,
closeOnClick: 'background',
afterOpen: function() {
console.log('Окно открыто');
}
});
Featherlight позволяет автоматически связывать элементы с модальными
окнами через атрибуты data-featherlight:
<a href="#inline-content" data-featherlight="inline">Открыть окно</a>
<div id="inline-content" style="display:none;">
<p>Содержимое скрытого блока</p>
</div>
При клике на ссылку автоматически создаётся и открывается модальное окно с содержимым указанного селектора.
В Vanilla JS можно вручную добавить обработчики:
document.querySelector('#open-btn').addEventListener('click', () => {
new Featherlight('<p>Окно открыто через кнопку</p>');
});
Featherlight поддерживает тип image для создания легких
галерей:
<a href="img1.jpg" data-featherlight="image">Изображение 1</a>
<a href="img2.jpg" data-featherlight="image">Изображение 2</a>
Для группировки изображений в галерею используется атрибут
data-featherlight-gallery:
<a href="img1.jpg" data-featherlight="image" data-featherlight-gallery="gallery">1</a>
<a href="img2.jpg" data-featherlight="image" data-featherlight-gallery="gallery">2</a>
Навигация между изображениями осуществляется автоматически при кликах на стрелки, предоставляемые библиотекой.
Featherlight позволяет изменять содержимое уже открытого окна через
метод instance() и свойство content:
const modal = new Featherlight('<p>Первоначальный текст</p>');
modal.open();
modal.instance().content.innerHTML = '<p>Обновлённый текст</p>';
Это удобно для реализации форм, уведомлений или загрузки данных через AJAX.
Featherlight генерирует события, на которые можно подписаться с
помощью addEventListener:
featherlight:open — перед открытием окна;featherlight:opened — после открытия;featherlight:close — перед закрытием;featherlight:closed — после закрытия.Пример:
document.addEventListener('featherlight:opened', function(e) {
console.log('Модальное окно открылось', e);
});
Featherlight автоматически обрабатывает тач-события и масштабирование. Для дополнительного контроля можно использовать CSS-переменные и классы, чтобы изменять размер и положение окна:
.featherlight.custom-lightbox {
max-width: 90%;
max-height: 80%;
}
Это позволяет создавать адаптивные модальные окна без дополнительной логики в JavaScript.
persist: true снижает количество операций DOM.Библиотека легко расширяется через наследование класса
Featherlight:
class FeatherlightForm extends Featherlight {
constructor(content, options) {
super(content, options);
}
afterOpen() {
super.afterOpen();
this.content.querySelector('input').focus();
}
}
const formModal = new FeatherlightForm('<input type="text">', {});
formModal.open();
Это позволяет добавлять новые поведения, не изменяя исходный код библиотеки.
Featherlight в версии для Vanilla JS сочетает минимальный размер, гибкость и простоту интеграции, обеспечивая полный контроль над модальными окнами, событиями и контентом без использования jQuery.