✈️ Code Ready | Frontend
Разбираем HTMLDialogElement — нативная модель модальных интерфейсов в браузере!
Несмотря на большое количество UI-библиотек, модальные окна часто остаются одним из компонентов, где разработчики повторяют одну и ту же инфраструктуру: создание overlay, блокировку прокрутки, управление focus lifecycle, обработку Escape, восстановление фокуса и синхронизацию состояния компонента.
<dialog id="confirmDialog">
<p>Удалить запись?</p>
<button value="cancel">
Отмена
</button>
<button value="confirm">
Удалить
</button>
</dialog>
После получения ссылки на элемент становится доступен полный API
const dialog = document.querySelector(
'#confirmDialog'
);
У элемента есть два принципиально разных режима открытия.
dialog.show();
Такой режим используется для немодальных сценариев, когда пользователь может продолжать взаимодействовать с остальным интерфейсом.
dialog.showModal();
В этом режиме браузер добавляет элемент в специальный top layer, устанавливает модальное состояние, ограничивает взаимодействие с остальным документом и управляет фокусом внутри диалога.
Это отличается от обычного
dialog.close();
При необходимости можно передать результат завершения операции:
dialog.close('confirmed');
console.log(
dialog.returnValue
);
Для форм внутри
<form method="dialog">
<button value="cancel">
Отмена
</button>
<button value="confirm">
Подтвердить
</button>
</form>
При отправке такой формы браузер автоматически закрывает диалог и записывает значение активной кнопки в
console.log(
dialog.open
);
Для интеграции с состоянием приложения используются события жизненного цикла. После закрытия:
dialog.addEventListener(
'close',
() => {
console.log(
dialog.returnValue
);
}
);
Попытка закрытия через
dialog.addEventListener(
'cancel',
event => {
event.preventDefault();
}
);
Это позволяет реализовать сценарии, где пользователь должен явно подтвердить действие перед закрытием.
Визуальное оформление модального слоя также предусмотрено платформой:
dialog::backdrop {
background: rgb(0 0 0 / 0.5);
}
Главное преимущество
🔥 Для стандартных модальных сценариев
📣 Code Ready | #практика
Разбираем HTMLDialogElement — нативная модель модальных интерфейсов в браузере!
Несмотря на большое количество UI-библиотек, модальные окна часто остаются одним из компонентов, где разработчики повторяют одну и ту же инфраструктуру: создание overlay, блокировку прокрутки, управление focus lifecycle, обработку Escape, восстановление фокуса и синхронизацию состояния компонента.
HTMLDialogElement решает эту задачу на уровне платформы. Элемент <dialog> является частью HTML Standard и предоставляет браузерную модель поведения для диалоговых интерфейсов без необходимости вручную воспроизводить базовую механику. Базовая структура:<dialog id="confirmDialog">
<p>Удалить запись?</p>
<button value="cancel">
Отмена
</button>
<button value="confirm">
Удалить
</button>
</dialog>
После получения ссылки на элемент становится доступен полный API
HTMLDialogElement:const dialog = document.querySelector(
'#confirmDialog'
);
У элемента есть два принципиально разных режима открытия.
show() переводит <dialog> в состояние отображения без модального поведения:dialog.show();
Такой режим используется для немодальных сценариев, когда пользователь может продолжать взаимодействовать с остальным интерфейсом.
showModal() создаёт настоящий modal dialog:dialog.showModal();
В этом режиме браузер добавляет элемент в специальный top layer, устанавливает модальное состояние, ограничивает взаимодействие с остальным документом и управляет фокусом внутри диалога.
Это отличается от обычного
display: block, поскольку модальное поведение реализуется самим браузером, а не JavaScript-кодом приложения. Закрытие выполняется через:dialog.close();
При необходимости можно передать результат завершения операции:
dialog.close('confirmed');
console.log(
dialog.returnValue
);
returnValue позволяет отделить состояние интерфейса от бизнес-логики. Например, один компонент диалога может использоваться для подтверждения удаления, отмены действия или выбора варианта.Для форм внутри
<dialog> существует специальный механизм method="dialog":<form method="dialog">
<button value="cancel">
Отмена
</button>
<button value="confirm">
Подтвердить
</button>
</form>
При отправке такой формы браузер автоматически закрывает диалог и записывает значение активной кнопки в
returnValue. Состояние элемента доступно через стандартное свойство:console.log(
dialog.open
);
Для интеграции с состоянием приложения используются события жизненного цикла. После закрытия:
dialog.addEventListener(
'close',
() => {
console.log(
dialog.returnValue
);
}
);
Попытка закрытия через
Escape вызывает событие cancel:dialog.addEventListener(
'cancel',
event => {
event.preventDefault();
}
);
Это позволяет реализовать сценарии, где пользователь должен явно подтвердить действие перед закрытием.
Визуальное оформление модального слоя также предусмотрено платформой:
dialog::backdrop {
background: rgb(0 0 0 / 0.5);
}
Главное преимущество
<dialog> заключается в переносе части ответственности из прикладного кода в браузерный runtime: управление фокусом, modal top layer, клавиатурное взаимодействие и базовая интеграция с accessibility.🔥 Для стандартных модальных сценариев
HTMLDialogElement позволяет избежать реализации собственного modal framework. Дополнительная логика требуется только там, где интерфейс выходит за пределы поведения, предусмотренного HTML Standard.📣 Code Ready | #практика
This media is not supported in your browser
VIEW IN TELEGRAM
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
💾 World Places – трехмерная галерея для карточек с текстами и изображениями. В активном состоянии элемент "всплывает" и показывается пользователю.
Сайтодел | #сниппет #css
💾 World Places – трехмерная галерея для карточек с текстами и изображениями. В активном состоянии элемент "всплывает" и показывается пользователю.
Сайтодел | #сниппет #css
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
💾 Infinite Scroll Animation – бесконечная прокрутка элементов, которая сделает сайт динамичнее и поможет уместить много заголовков в ограниченное пространство.
Сайтодел | #сниппет #css
💾 Infinite Scroll Animation – бесконечная прокрутка элементов, которая сделает сайт динамичнее и поможет уместить много заголовков в ограниченное пространство.
Сайтодел | #сниппет #css
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
💾 Click/Tap Rhythm Password – эффект для кнопки с анимацией фона и изменением цвета. Можно настроить его не только на кейс с ошибкой, но и на успешное действие.
Сайтодел | #сниппет #css
💾 Click/Tap Rhythm Password – эффект для кнопки с анимацией фона и изменением цвета. Можно настроить его не только на кейс с ошибкой, но и на успешное действие.
Сайтодел | #сниппет #css
✈️ [PYTHON:TODAY]
🔍Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером
Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
📂 Хачатур, старший разработчик в Яндексе, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Хачатур будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Хачатуру
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
🔍Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером
Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.
Как это будет:
📂 Хачатур, старший разработчик в Яндексе, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Хачатур будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Хачатуру
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot
Реклама.
О рекламодателе.
✈️ Code Ready | Frontend
👩💻 Выделяем элементы в фокусе и их родителей!
Псевдокласс
Примеры использования:
В отличие от
📣 Code Ready | #свойство
👩💻 Выделяем элементы в фокусе и их родителей!
Псевдокласс
:focus-within применяется к элементам, которые либо сами находятся в фокусе, либо имеют дочерние элементы в фокусе. Срабатывает, когда фокус получает сам элемент или любой из его потомков. Например, можно изменить оформление всей формы, когда пользователь перешёл в одно из её полей.Примеры использования:
• подсветить контейнер с <input> при вводе;
• изменить рамку всей формы;
• выделить пункт меню при фокусе на вложенной ссылке;
• показать дополнительные элементы управления.
В отличие от
:focus, который реагирует только на фокус самого элемента, :focus-within учитывает фокус и на всех элементах внутри него.📣 Code Ready | #свойство
This media is not supported in your browser
VIEW IN TELEGRAM
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
💾 Hover Effect for Headers – восемь анимированных эффектов для заголовков слайдов. Некоторые из них влияют на отдельные буквы, а некоторые – на всё слово.
Сайтодел | #сниппет #css
💾 Hover Effect for Headers – восемь анимированных эффектов для заголовков слайдов. Некоторые из них влияют на отдельные буквы, а некоторые – на всё слово.
Сайтодел | #сниппет #css
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
✍️ Neue Montreal – нейтральный шрифт без засечек с четкими формами. Подходит для мелких текстов веб-страниц. Пример шрифта есть в макете Abstract 3D Coral Shapes
Сайтодел | #шрифт
✍️ Neue Montreal – нейтральный шрифт без засечек с четкими формами. Подходит для мелких текстов веб-страниц. Пример шрифта есть в макете Abstract 3D Coral Shapes
Сайтодел | #шрифт
✈️ [PYTHON:TODAY]
🤨 Мошенники заскамили начинающего айтишника на ₽200,000 под видом оффера
Схема не новая:
— «Соискателю скинули предложение и сразу за ним тестовое задание. Попросили найти в готовом проекте ошибки и исправить их. Внутри был спрятан вирус, который и увёл все данные счетов и криптокошельков.»
Готовым проектом может быть как сайт, так и репозиторий с кодом. Чтобы выполнить «тестовое», жертва скачивает проект, устанавливает необходимые зависимости и запускает код вместе с вирусом.
🤪 Рассчитано всё на джунов или вайбкодеров, которые плохо разбираются в коде.
Получил бесценный опыт...
🤨 Мошенники заскамили начинающего айтишника на ₽200,000 под видом оффера
Схема не новая:
— «Соискателю скинули предложение и сразу за ним тестовое задание. Попросили найти в готовом проекте ошибки и исправить их. Внутри был спрятан вирус, который и увёл все данные счетов и криптокошельков.»
Готовым проектом может быть как сайт, так и репозиторий с кодом. Чтобы выполнить «тестовое», жертва скачивает проект, устанавливает необходимые зависимости и запускает код вместе с вирусом.
🤪 Рассчитано всё на джунов или вайбкодеров, которые плохо разбираются в коде.
Получил бесценный опыт...
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
💾 Infinite Random Gradients Generator – генератор градиентов для CSS, который поможет выбрать самые оригинальные сочетания цветов для вашего приложения.
Сайтодел | #сниппет #css
💾 Infinite Random Gradients Generator – генератор градиентов для CSS, который поможет выбрать самые оригинальные сочетания цветов для вашего приложения.
Сайтодел | #сниппет #css
✈️ Сайтодел | GitHub, Верстка, Сайты, FullStack
💾 Responsive GSAP Slider – слайдер для представления продуктов с подвижными SVG-картинками. Слайдер можно легко настроить под себя.
Сайтодел | #сниппет #css
💾 Responsive GSAP Slider – слайдер для представления продуктов с подвижными SVG-картинками. Слайдер можно легко настроить под себя.
Сайтодел | #сниппет #css