uk
Feedback

Не попадись на ботовода! Telemetrio знаходить і позначає такі канали мітками 👉 Хочеш бачити мітку, оформляй підписку

Code Ready | Frontend

Code Ready | Frontend

Відкрити в Telegram

Авторский канал по Frontend разработке. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c РКН: https://clck.ru/3NJCKs

Показати більше

📈 Аналітичний огляд Telegram-каналу Code Ready | Frontend

Канал Code Ready | Frontend (@code_ready) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 21 545 підписників, посідаючи 6 157 місце в категорії Технології та додатки та 30 472 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 21 545 підписників.

За останніми даними від 26 жовтня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -42, а за останні 24 години на -20, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 6.43%. Протягом перших 24 годин після публікації контент зазвичай збирає 4.29% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 386 переглядів. Протягом першої доби публікація в середньому набирає 925 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 23.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як css, браузер, интерфейс, загрузка, api.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Авторский канал по Frontend разработке. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Cотрудничество: @energy_c РКН: https://clck.ru/3NJCKs”

Завдяки високій частоті оновлень (останні дані отримано 27 жовтня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

21 545
Підписники
-2024 години
-667 днів
-4230 днів
Архів дописів
👩‍💻 Этим атрибутом помечают обязательные поля формы! Атрибут required добавляется обязательным полям формы. Если поле с так
👩‍💻 Этим атрибутом помечают обязательные поля формы! Атрибут required добавляется обязательным полям формы. Если поле с таким атрибутом не заполнено, то при отправке формы браузер покажет предупреждение и отменит отправку. Атрибут required можно использовать для <select>, <textarea>, а также для <input> со следующими типами:
• text, • search, • url, • tel, • email, • password, • date, • month, • week, • time, • datetime-local, • number, • checkbox, • radio, • file.
Важно: этот атрибут проверяется только на стороне браузера. Для защиты данных всегда нужна дополнительная проверка на сервере, так как HTML-валидацию можно обойти. 📣 Code Ready | #атрибут

📱 Clipboard API — работа с буфером обмена! В этой шпаргалке собраны основные методы Clipboard API для программной работы с б
+4
📱 Clipboard API — работа с буфером обмена! В этой шпаргалке собраны основные методы Clipboard API для программной работы с буфером обмена. Здесь показано, как читать и записывать текстовые данные, работать с HTML, изображениями и другими поддерживаемыми MIME-типами, создавать ClipboardItem с несколькими представлениями данных, проверять поддержку форматов и извлекать содержимое нужного типа, а также использовать legacy-механизм копирования в качестве fallback. 📣 Code Ready | #шпора

dataset: работа с data-* без getAttribute() и setAttribute()! HTML-атрибуты data-* позволяют хранить данные, непосредственно связанные с конкретным DOM-элементом. Для доступа к таким значениям DOM предоставляет стандартный API dataset.
<button
  data-user-id="42"
  data-action="delete"
>
  Удалить
</button>
Свойство dataset возвращает объект DOMStringMap, через который можно читать значения data-* как свойства JavaScript-объекта.
const button = document.querySelector('button');

console.log(button.dataset.userId);
// "42"

console.log(button.dataset.action);
// "delete"
При формировании имени свойства префикс data- удаляется, а дефис перед строчной ASCII-буквой a-z удаляется, при этом следующая буква преобразуется в верхний регистр. Поэтому data-user-role становится dataset.userRole.
<div
  id="user"
  data-user-role="admin"
></div>
Это преобразование выполняется самим DOM API, поэтому обращаться к исходному имени атрибута вручную не требуется.
const user = document.querySelector('#user');

console.log(user.dataset.userRole);
// "admin"
dataset поддерживает не только чтение. Присваивание свойства изменяет соответствующий data-* атрибут элемента.
button.dataset.action = 'restore';

console.log(button.getAttribute('data-action'));
// "restore"
Если соответствующего data-* атрибута ещё нет, присваивание через dataset создаст его в DOM.
button.dataset.loading = 'true';

console.log(button.hasAttribute('data-loading'));
// true
Удаление свойства через оператор delete удаляет и соответствующий атрибут элемента.
delete button.dataset.loading;

console.log(button.hasAttribute('data-loading'));
// false
Важная особенность dataset: значения представлены строками. При присваивании числа, boolean и другие значения преобразуются в строковое представление.
button.dataset.userId = 42;
button.dataset.active = true;

console.log(button.dataset.userId);
// "42"

console.log(button.dataset.active);
// "true"

console.log(typeof button.dataset.userId);
// "string"
Если приложению нужен другой тип, преобразование следует выполнять явно. Это особенно важно для чисел и boolean-значений, поскольку строка "false" в JavaScript сама по себе является truthy.
const userId = Number(button.dataset.userId);
const isActive = button.dataset.active === 'true';
Один из практических сценариев для data-* — делегирование событий. При этом использовать event.target.dataset напрямую не всегда корректно: фактической целью события может оказаться вложенный span, svg или другой дочерний элемент.
<ul id="users">
  <li>
    <button data-user-id="42">
      <span>Удалить</span>
    </button>
  </li>
</ul>
Для такого случая надёжнее найти ближайший подходящий элемент через closest() и дополнительно проверить, что он относится к нужному контейнеру.
const list = document.querySelector('#users');

list.addEventListener('click', event => {
  const button =
    event.target.closest('[data-user-id]');

  if (!button || !list.contains(button)) {
    return;
  }

  const userId =
    Number(button.dataset.userId);

  removeUser(userId);
});
dataset хорошо подходит для небольших объёмов метаданных, принадлежащих конкретному DOM-элементу: идентификаторов, режимов, состояний интерфейса и параметров поведения. Для сложных объектов и полноценного состояния приложения data-* использовать не стоит — DOM в таком случае фактически превращается в хранилище состояния, для которого существуют более подходящие структуры данных.
button.dataset.userId = '42';
button.dataset.action = 'delete';
button.dataset.confirm = 'true';
🔥 dataset — стандартный DOM API поверх data-*, который делает работу с пользовательскими атрибутами короче и удобнее, но не обеспечивает типизацию их значений: значения dataset представлены строками и при необходимости требуют явного преобразования. 📣 Code Ready | #практика

7,2 млн рублей призового фонда и реальные задачи космической отрасли 🚀 В сентябре пройдет серия КосмоХакатонов для студентов
7,2 млн рублей призового фонда и реальные задачи космической отрасли 🚀 В сентябре пройдет серия КосмоХакатонов для студентов, молодых ученых и специалистов. Участникам предстоит за два дня разработать собственное решение, поработать с экспертами и представить проект жюри. Участников ждут: 🛰 реальные задачи космической отрасли 👥 команды от 3 до 5 человек 💻 очный и онлайн-форматы 🧑‍💻 работа с экспертами и трекерами 🏆 финал в Москве Первый КосмоХакатон стартует уже 4 сентября в Ростове-на-Дону. Дальше серия продолжится в Красноярске, Нижнем Новгороде, Благовещенске и Санкт-Петербурге, а завершится финалом в Москве. Участие бесплатное. Присоединиться могут студенты, аспиранты, молодые ученые и специалисты от 18 лет. 🔗 Зарегистрироваться: https://космохакатон.рф

👨‍💻 Интересная статья попалась на Хабре: «o2 game engine»! В этой статье: • Познакомитесь с компактным open-source движком
👨‍💻 Интересная статья попалась на Хабре: «o2 game engine»! В этой статье: • Познакомитесь с компактным open-source движком для 2D/3D-игр на C++ и JavaScript; • Разберёте его архитектуру, редактор, UI, физику, анимации и поддержку Windows, Linux, macOS, Android, iOS и Web; • Узнаете, как в движок интегрирован ИИ, способный помогать создавать игровые механики и самостоятельно тестировать результат.
🔊 Продолжай читать на Habr!
📣 Code Ready | #статья

👩‍💻 Показываем результат работы программы с помощью ! Тег используется для оформления вывода данных, которые показываются п
👩‍💻 Показываем результат работы программы с помощью <samp>! Тег <samp> используется для оформления вывода данных, которые показываются пользователю в результате выполнения программы. Содержимое этого элемента воспринимается устройствами как простой текст. Внутри тега <samp> размещается информация, которую пользователь может получить в процессе взаимодействия с программой:
• вывод информации о ходе выполнения программы; • ошибки, предупреждения и подсказки инструментов разработчика или операционной системы; • приглашение к вводу данных.
Важно не путать <samp> с <code>: <code> обозначает фрагмент программного кода, а <samp> — результат, который программа выводит пользователю. 📣 Code Ready | #атрибут

requestAnimationFrame() — почему время выполнения js нельзя привязывать к фиксированной частоте кадров! Браузер самостоятельно управляет процессом обновления изображения на экране. JavaScript выполняется через event loop и не синхронизирован напрямую с частотой обновления дисплея. Поэтому анимации, построенные на фиксированных задержках, могут вести себя по-разному на разных устройствах. setTimeout() не является механизмом синхронизации с браузерным rendering pipeline:
let x = 0;

function animate() {
  x += 5;

  element.style.transform = `translateX(${x}px)`;

  setTimeout(animate, 16);
}

animate();
Значение 16 миллисекунд не означает один кадр. Это только минимальная задержка перед следующим выполнением callback. На дисплее 60 Hz это примерно соответствует одному кадру (~16.67 ms), но на устройствах с частотой 120 Hz, 144 Hz и выше браузер не будет синхронизировать выполнение JavaScript с каждым обновлением экрана. В результате скорость такой анимации зависит от количества вызовов JavaScript, а не от реально прошедшего времени. Для визуальных обновлений используется requestAnimationFrame():
let x = 0;

function animate() {
  x += 5;

  element.style.transform = `translateX(${x}px)`;

  requestAnimationFrame(animate);
}

requestAnimationFrame(animate);
Браузер планирует callback перед следующим обновлением изображения. Это позволяет выполнять изменения визуального состояния внутри стандартного цикла рендеринга. Но сама привязка к кадрам не делает анимацию корректной. Если браузер пропустит несколько кадров из-за нагрузки, изменение состояния будет зависеть от количества вызовов requestAnimationFrame(), а не от реального времени. Для независимости от частоты кадров необходимо использовать timestamp, который передаёт requestAnimationFrame():
let startTime = null;

function animate(timestamp) {
  if (startTime === null) {
    startTime = timestamp;
  }

  const elapsed = timestamp - startTime;
  const x = elapsed * 0.1;

  element.style.transform = `translateX(${x}px)`;

  requestAnimationFrame(animate);
}

requestAnimationFrame(animate);
Теперь положение элемента вычисляется через прошедшее время, а не через количество кадров. Такой подход сохраняет одинаковую скорость анимации независимо от того, работает устройство на 60 Hz, 120 Hz или другой частоте обновления. При этом requestAnimationFrame() не отменяет особенности браузерного rendering pipeline. Например, чтение геометрии элемента сразу после изменения стилей может вызвать forced synchronous layout:
element.style.width = '500px';

const height = element.offsetHeight;
После изменения стиля браузеру необходимо получить актуальное значение layout. Поэтому он может выполнить синхронный перерасчёт перед возвратом значения. В больших интерфейсах такие операции внутри animation loop становятся причиной лишней нагрузки и снижения производительности. Также необходимо управлять жизненным циклом запущенных анимаций. Если компонент удалён, а callback продолжает создавать новые кадры, приложение продолжает выполнять ненужную работу:
let frameId;
let running = true;

function animate() {
  if (!running) return;

  update();

  frameId = requestAnimationFrame(animate);
}

frameId = requestAnimationFrame(animate);

// cleanup
running = false;
cancelAnimationFrame(frameId);
Кроме того, requestAnimationFrame() не делает любую анимацию автоматически дешёвой. Для оптимальной работы браузеру желательно избегать постоянных layout и paint операций. Свойства вроде transform и opacity чаще позволяют обновлять слой через compositor без полного перерасчёта страницы. 🔥 requestAnimationFrame() — это не просто более плавная альтернатива таймерам. Это механизм синхронизации JavaScript с браузерным циклом обновления изображения, который позволяет выполнять визуальные изменения в правильный момент, рассчитывать анимации через реальное время, учитывать разные частоты обновления экранов и избегать лишних операций при работе с интерфейсом. 📣 Code Ready | #практика

🔴 Тестовое собеседование на Frontend-разработчика со старшим разработчиком ex. Сбер 3 сентября(в четверг!) в 19:00 по мск пр
🔴 Тестовое собеседование на Frontend-разработчика со старшим разработчиком ex. Сбер 3 сентября(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика. Как это будет: 📂 Даниил Дмитриев, старший разработчик в R-Vision, ex. Сбер, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Даниил будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Даниилу Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot Реклама. О рекламодателе.

👩‍💻 Можно ли стилизовать субтитры к видео с помощью CSS? Псевдоэлемент::cue позволяет стилизовать текст субтитров и других
👩‍💻 Можно ли стилизовать субтитры к видео с помощью CSS? Псевдоэлемент::cue позволяет стилизовать текст субтитров и других текстовых дорожек, отображаемых внутри элемента <video>. Эти дорожки подключаются с помощью тега <track>. С помощью ::cue вы можете менять цвет, размер шрифта, фон и другие свойства субтитров, чтобы сделать их более читаемыми или соответствующими дизайну вашего сайта. Внутри ::cue разрешён ограниченный набор свойств:
• background, background-* • color • шрифтовые свойства: font, font-* • outline, outline-* • ruby-position • text-combine-upright • text-decoration, text-decoration-* • text-shadow • visibility • white-space
Поддержка ::cue(<селектор>) может отличаться: в некоторых браузерах он недоступен. Всегда проверяйте поддержку для нужного браузера. 📣 Code Ready | #свойство

Делаем «сквиркл»-углы нативно в CSS! Обычный border-radius строит эллиптическое скругление. Но в интерфейсах часто нужны боле
Делаем «сквиркл»-углы нативно в CSS! Обычный border-radius строит эллиптическое скругление. Но в интерфейсах часто нужны более плавные, «квадратные» скругления — squircle. Раньше для точной формы приходилось использовать SVG, clip-path или маски. Теперь форму угла можно менять отдельно от его радиуса:
.card {
  corner-shape: squircle;
}
При этом border-radius всё ещё определяет область скругления — без ненулевого радиуса corner-shape визуально ничего не изменит. Есть и другие формы:
.card {
  corner-shape: bevel;
}
И даже вогнутые углы:
.card {
  corner-shape: scoop;
}
Причём границы, фон, outline и тени следуют новой форме углов, а сами формы можно анимировать. Поддержка пока ограничена. 🔥 corner-shape позволяет делать squircle, bevel и вогнутые углы двумя строками CSS — без дополнительной разметки и SVG. 📣 Code Ready | #совет

🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажется. Собрал папки и каналы, где можн
🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку Окружение решает больше, чем кажется. Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре. AI: t.me/ai_machinelearning_big_data Python: t.me/pythonl Linux: t.me/linuxacademiya Хакинг: t.me/linuxkalii ВАЙБКОДИНГ: t.me/data_analysis_ml DevOps: t.me/DevOPSitsec Docker: https://t.me/+90Z5TAyfuNU5YmRi Golang: t.me/Golang_google Rust: t.me/rust_code C++: t.me/cpluspluc C#: t.me/csharp_1001_notes Java: t.me/javatg JavaScript: t.me/javascriptv React: t.me/react_tg PHP: t.me/phpshka Android: t.me/android_its Мобильная разработка: t.me/mobdevelop Базы данных: t.me/sqlhub Big Data: t.me/bigdatai Математика: t.me/data_math Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy Папка ML: https://t.me/addlist/2Ls-snqEeytkMDgy Папка Frontend: https://t.me/addlist/mzMMG3RPZhY2M2Iy ИТ-книги бесплатно: https://t.me/addlist/BkskQciUW_FhNjEy Max Ai: https://max.ru/ai_machinelearning_big_data Max python: https://max.ru/pythonl ТЕХНО: https://max.ru/vistehno Max Go: https://max.ru/Golang_google Max Linux: https://max.ru/linuxkalii Devops: https://max.ru/DevOPSitsec C#: https://max.ru/csharp_ci C++: https://max.ru/cpluspluc SQL: https://max.ru/sqlhub Java: https://max.ru/javatg Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.

✍️ Краткое руководство по HTML — основные теги и структура веб-страницы! Здесь собраны основы HTML с понятными примерами: структура HTML-документа, работа с <head> и метатегами, HTML5-разметка, заголовки и текст, ссылки, изображения, таблицы и основные атрибуты элементов. В конце есть удобная таблица с популярными тегами и их назначением. Оставляю ссылочку: GitHub 📱 📣 Code Ready | #репозиторий

Правильный порядок фокуса в сложном Grid без перестановки DOM! CSS Grid позволяет визуально переставлять элементы, но раньше
Правильный порядок фокуса в сложном Grid без перестановки DOM! CSS Grid позволяет визуально переставлять элементы, но раньше это создавало неприятную проблему: пользователь видит один порядок, а при нажатии Tab фокус может идти по исходному DOM. Теперь для этого появился reading-flow. Для Grid можно заставить последовательную навигацию следовать визуальным строкам:
.cards {
  reading-flow: grid-rows;
}
Для Flex есть отдельный режим:
.toolbar {
  reading-flow: flex-visual;
}
А если нужен контролируемый порядок, контейнер переводится в source-order, после чего отдельным детям можно задавать reading-order.
.list {
  reading-flow: source-order;
}

.featured {
  reading-order: -1;
}
Это полезно в адаптивных интерфейсах, где Grid/Flex визуально меняет расположение карточек или контролов, но переписывать DOM только ради порядка клавиатурной навигации неудобно. 🔥 reading-flow решает проблему расхождения визуального порядка и последовательной навигации на уровне CSS. 📣 Code Ready | #совет

На Stepik вышла программа «DevOps с нуля: от Linux до Kubernetes» Это комплексная программа из 5 практических курсов по ключе
На Stepik вышла программа «DevOps с нуля: от Linux до Kubernetes» Это комплексная программа из 5 практических курсов по ключевым технологиям DevOps: Linux, Git, Docker, GitLab CI/CD, Kubernetes Вы последовательно пройдёте путь от работы в Linux и управления кодом через Git до контейнеризации приложений, настройки CI/CD-пайплайнов и развёртывания в Kubernetes. Что вы изучите:
• работу с Linux и командной строкой • Git и контроль версий в реальных проектах • создание Docker-образов и запуск контейнеров • автоматизацию сборки, тестирования и деплоя в GitLab CI/CD • развёртывание и управление приложениями в Kubernetes • сети, хранилища, конфигурации и секреты • диагностику инфраструктуры и автоматизацию рутинных задач ... и многое другое
Все знания закрепляются на практике с помощью заданий с автопроверкой. Материал подаётся последовательно и понятным языком: с примерами, схемами и демонстрациями. Во время обучения можно задавать вопросы по урокам и заданиям, получать обратную связь и помощь при возникновении сложностей. После прохождения программы вы получите сертификат, который можно добавить в резюме. Скидка 20% на 48 часов: по промокоду READY20 стоимость всей программы составит 10 392 ₽. Открыть программу на Stepik

👩‍💻 Семантически выделяет математические выражения и переменные! Тег используется для семантического выделения переменных в
👩‍💻 Семантически выделяет математические выражения и переменные! Тег <var> используется для семантического выделения переменных в математических выражениях, формулах, программном коде и технической документации. Например, с его помощью можно обозначить:
• переменную в формуле — x, y, r; • аргумент функции; • параметр программы или команды; • значение, которое пользователь должен подставить самостоятельно.
По умолчанию браузеры обычно отображают содержимое <var> курсивом, однако внешний вид можно изменить с помощью CSS. <var> нужен не просто для визуального выделения текста. Он добавляет семантику, указывая, что конкретный фрагмент представляет переменную. 📣 Code Ready | #атрибут

✍️ Полезная статья недавно вышла на Хабре: «Мои любимые CSS-трюки для фронтендеров, которые не используют Tailwind»! В этой с
✍️ Полезная статья недавно вышла на Хабре: «Мои любимые CSS-трюки для фронтендеров, которые не используют Tailwind»! В этой статье: • Узнаете, как удобнее стилизовать контент с помощью `:not()` и управлять специфичностью через CSS-слои; • Научитесь увеличивать кликабельную область элементов без изменения их размеров; • Разберёте полезные приёмы с CSS Grid ить контент с пом которые упрощают адаптивную вёрстку.
🔊 Продолжай читать на Habr!
📣 Code Ready | #статья

📱 Range API — работа с фрагментами DOM! В этой шпаргалке собраны основные методы Range API для программной работы с диапазон
+4
📱 Range API — работа с фрагментами DOM! В этой шпаргалке собраны основные методы Range API для программной работы с диапазонами и фрагментами DOM. Здесь показано, как задавать начальную и конечную границы диапазона, выбирать узел целиком или только его содержимое, копировать и извлекать выбранные фрагменты, вставлять новые DOM-узлы в заданную позицию, а также получать текстовое содержимое диапазона. 📣 Code Ready | #шпора

👩‍💻 Выделяем элементы в фокусе и их родителей! Псевдокласс :focus-within применяется к элементам, которые либо сами находятся в фокусе, либо имеют дочерние элементы в фокусе. Срабатывает, когда фокус получает сам элемент или любой из его потомков. Например, можно изменить оформление всей формы, когда пользователь перешёл в одно из её полей. Примеры использования:
• подсветить контейнер с <input> при вводе; • изменить рамку всей формы; • выделить пункт меню при фокусе на вложенной ссылке; • показать дополнительные элементы управления.
В отличие от :focus, который реагирует только на фокус самого элемента, :focus-within учитывает фокус и на всех элементах внутри него. 📣 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 | #практика

Если вы уже используете ChatGPT, Claude или Cursor в разработке, но всё равно большую часть работы делаете руками — вы исполь
Если вы уже используете ChatGPT, Claude или Cursor в разработке, но всё равно большую часть работы делаете руками — вы используете ИИ далеко не на максимум. 25 августа Хекслет проведёт бесплатный воркшоп, где покажут, как встроить AI-агента непосредственно в процесс разработки. За 2 часа на реальном репозитории: — настроите контекст проекта и AGENTS.md; — дадите агенту задачу от issue до готового кода; — подключите тесты и CI; — автоматизируете code review; — подключите RAG и MCP для работы с документацией, тикетами и API. В результате — не набор промптов, а готовый процесс работы с AI-агентом. 25 августа, 19:00 Бесплатно. 👉 Записаться на вебинар #реклама О рекламодателе