Featherlight по умолчанию добавляет кнопку закрытия
(close icon) автоматически, но библиотека предоставляет
достаточно гибкие механизмы для её изменения — от простого
редактирования текста до полной замены HTML-структуры и логики
поведения.
После инициализации Featherlight внутрь модального окна добавляется элемент:
<span class="featherlight-close-icon featherlight-close">✕</span>
Кнопка является частью контейнера .featherlight-content
и обрабатывается через делегирование событий. Закрытие происходит по
клику на элемент с классом featherlight-close.
Ключевые моменты:
Самый простой способ модификации — переопределение опции
closeIcon.
$.featherlight(content, {
closeIcon: 'Закрыть'
});
Допускается использование HTML:
closeIcon: '<span class="my-close">×</span>'
В этом случае Featherlight не экранирует строку и вставляет её напрямую в DOM. Это позволяет:
Если кнопка закрытия не требуется, её можно отключить:
$.featherlight(content, {
closeIcon: false
});
При этом:
.featherlight-close-icon не создаётсяРаспространённый подход — убрать стандартную кнопку и добавить собственную в HTML контента.
$.featherlight(
'<div class="modal">' +
'<button class="custom-close">×</button>' +
'<p>Контент</p>' +
'</div>',
{ closeIcon: false }
);
Закрытие в этом случае выполняется вручную:
$(document).on('click', '.custom-close', function () {
$.featherlight.current().close();
});
Метод $.featherlight.current() возвращает текущий
активный экземпляр, что важно при работе с несколькими окнами.
По умолчанию кнопка:
Для изменения поведения используется обработчик события
beforeClose.
$.featherlight(content, {
beforeClose: function () {
return confirm('Закрыть окно?');
}
});
Если обработчик возвращает false, закрытие отменяется.
Это работает и для кнопки, и для ESC, и для клика по фону.
Featherlight позволяет изменить шаблон сразу для всех модальных окон:
$.featherlight.defaults.closeIcon = '<button class="fl-close">×</button>';
После этого все экземпляры будут использовать новый HTML. Это предпочтительно, если требуется единый стиль по всему проекту.
Кнопка закрытия стилизуется классами:
.featherlight-close-icon.featherlight-closeПример полной визуальной замены без изменения HTML:
.featherlight-close-icon {
font-size: 0;
width: 32px;
height: 32px;
background: url(close.svg) center / contain no-repeat;
}
При этом логика закрытия остаётся неизменной.
Так как кнопка создаётся после открытия окна, перемещение выполняется
через хук afterOpen.
$.featherlight(content, {
afterOpen: function () {
this.$instance
.find('.featherlight-close-icon')
.appendTo(this.$content);
}
});
this.$instance — корневой контейнер окна,
this.$content — контейнер с пользовательским контентом.
Иногда требуется динамически скрывать кнопку при определённых условиях:
afterOpen: function () {
if (someCondition) {
this.$instance.find('.featherlight-close-icon').remove();
}
}
Это удобно при пошаговых модальных сценариях или формах.
Анимация реализуется не через кнопку напрямую, а через класс
состояния .featherlight-closing.
.featherlight.featherlight-closing .featherlight-content {
animation: fadeOut 0.3s forwards;
}
Кнопка автоматически участвует в этом процессе, так как инициирует стандартный механизм закрытия.
Featherlight не добавляет aria-label по умолчанию. Для
улучшения доступности его можно внедрить через кастомный HTML:
closeIcon: '<button aria-label="Закрыть">×</button>'
Также рекомендуется:
button, а не spanДля выполнения дополнительных действий перед закрытием можно перехватить событие:
$(document).on('click', '.featherlight-close', function () {
console.log('Кнопка нажата');
});
Важно не вызывать event.preventDefault(), иначе
стандартное закрытие не произойдёт.
Основные уровни кастомизации:
closeIcon,
beforeClose)afterOpen)Featherlight не навязывает жёсткую структуру кнопки закрытия, что делает библиотеку удобной для интеграции в сложные интерфейсы и дизайн-системы без переписывания исходного кода.