Веб-версияОткрыть в Telegram
CCode Ready | Frontend

Code Ready | Frontend

@code_ready · канал · Технологии · в индексе с 2026-04-15
21 674подписчиков
2 142постов в индексе
C
Code Ready | Frontend
Фотография
нажмите — покажем
Получаем порядковый номер элемента прямо в CSS! Для каскадной анимации списка часто приходится передавать индекс из JavaScript или прописывать :nth-child() для каждого элемента. <div style={{ "--i": index }} /> В CSS появились функции sibling-index() и sibling-count(): первая возвращает позицию элемента среди всех дочерних элементов родителя, начиная с 1, вторая — их общее количество. Поэтому задержку от 0ms можно вычислить автоматически: .item { animation-delay: calc((sibling-index() - 1) * 80ms); } Добавили десятый элемент — ничего менять не нужно. Его индекс вычислится из DOM автоматически. Общее количество элементов тоже доступно прямо в выражении: .item { --total: sibling-count(); } Это можно использовать для stagger-анимаций, распределения элементов и вычислений, которые раньше требовали --i, :nth-child() или генерации CSS из JavaScript. 🔥 Функции учитывают все соседние элементы одного родителя, а не только элементы с классом .item. Поддержка пока ограничена, поэтому перед использованием нужно проверить целевые браузеры. 📣 Code Ready | #совет
37 · 1.9K ·
Code Ready | Frontend
Фотография
нажмите — покажем
👩‍💻 Нативный раскрывающийся блок с контентом без JavaScript! Теги <details> и <summary> позволяют создавать интерактивные блоки, содержимое которых пользователь может раскрывать и скрывать прямо средствами HTML. Каждый из тегов выполняет свою роль: • <details> — содержит скрываемый и раскрываемый контент; • <summary> — задаёт видимый заголовок, по которому можно кликнуть для переключения состояния блока. По умолчанию содержимое <details> скрыто. Если добавить атрибут open, блок будет изначально раскрыт. Такая конструкция отлично подходит для FAQ, дополнительной информации, настроек, примечаний и других элементов интерфейса, которые не нужно постоянно держать на экране. При этом базовое раскрытие и сворачивание работает без единой строки JS. 📣 Code Ready | #атрибут
48 · 1.9K ·
C
Разбираем 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 позволяет отделить состояние интерфейса от бизнес-логики. Например, один компонент диалога может использоваться для подтверждения удаления, отмены действия или выбора варианта. Для форм внутри <di
38 · 1.7K ·
C
Code Ready | Frontend
Видео
IMG_3872.MOV · 435 КБ · нажмите — покажем
👩‍💻 Выделяем элементы в фокусе и их родителей! Псевдокласс :focus-within применяется к элементам, которые либо сами находятся в фокусе, либо имеют дочерние элементы в фокусе. Срабатывает, когда фокус получает сам элемент или любой из его потомков. Например, можно изменить оформление всей формы, когда пользователь перешёл в одно из её полей. Примеры использования: • подсветить контейнер с <input> при вводе; • изменить рамку всей формы; • выделить пункт меню при фокусе на вложенной ссылке; • показать дополнительные элементы управления. В отличие от :focus, который реагирует только на фокус самого элемента, :focus-within учитывает фокус и на всех элементах внутри него. 📣 Code Ready | #свойство
40 · 1.9K ·
C
Code Ready | Frontend
Фотография
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
📱 Range API — работа с фрагментами DOM! В этой шпаргалке собраны основные методы Range API для программной работы с диапазонами и фрагментами DOM. Здесь показано, как задавать начальную и конечную границы диапазона, выбирать узел целиком или только его содержимое, копировать и извлекать выбранные фрагменты, вставлять новые DOM-узлы в заданную позицию, а также получать текстовое содержимое диапазона. 📣 Code Ready | #шпора
37 · 2.6K ·
C
Code Ready | Frontend
Фотография
нажмите — покажем
✍️ Полезная статья недавно вышла на Хабре: «Мои любимые CSS-трюки для фронтендеров, которые не используют Tailwind»! В этой статье: • Узнаете, как удобнее стилизовать контент с помощью `:not()` и управлять специфичностью через CSS-слои; • Научитесь увеличивать кликабельную область элементов без изменения их размеров; • Разберёте полезные приёмы с CSS Grid ить контент с пом которые упрощают адаптивную вёрстку. 🔊 Продолжай читать на Habr! 📣 Code Ready | #статья
37 · 2K ·
C
Code Ready | Frontend
Фотография
нажмите — покажем
👩‍💻 Семантически выделяет математические выражения и переменные! Тег <var> используется для семантического выделения переменных в математических выражениях, формулах, программном коде и технической документации. Например, с его помощью можно обозначить: • переменную в формуле — x, y, r; • аргумент функции; • параметр программы или команды; • значение, которое пользователь должен подставить самостоятельно. По умолчанию браузеры обычно отображают содержимое <var> курсивом, однако внешний вид можно изменить с помощью CSS. <var> нужен не просто для визуального выделения текста. Он добавляет семантику, указывая, что конкретный фрагмент представляет переменную. 📣 Code Ready | #атрибут
25 · 2K ·
C
Code Ready | Frontend
Фотография
нажмите — покажем
Правильный порядок фокуса в сложном 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 | #совет
30 · 1.9K ·
Code Ready | Frontend
Видео
IMG_4330.MOV · 2.3 МБ · нажмите — покажем
✍️ Краткое руководство по HTML — основные теги и структура веб-страницы! Здесь собраны основы HTML с понятными примерами: структура HTML-документа, работа с <head> и метатегами, HTML5-разметка, заголовки и текст, ссылки, изображения, таблицы и основные атрибуты элементов. В конце есть удобная таблица с популярными тегами и их назначением. Оставляю ссылочку: GitHub 📱 📣 Code Ready | #репозиторий
50 · 1.8K ·
C
Фотография
нажмите — покажем
Делаем «сквиркл»-углы нативно в 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 | #совет
47 · 2K ·
Code Ready | Frontend
Фотография
нажмите — покажем
👩‍💻 Можно ли стилизовать субтитры к видео с помощью 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 | #свойство
36 · 1.8K ·
C
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 = `translate
30 · 1.6K ·
C
Code Ready | Frontend
Фотография
нажмите — покажем
👩‍💻 Показываем результат работы программы с помощью <samp>! Тег <samp> используется для оформления вывода данных, которые показываются пользователю в результате выполнения программы. Содержимое этого элемента воспринимается устройствами как простой текст. Внутри тега <samp> размещается информация, которую пользователь может получить в процессе взаимодействия с программой: • вывод информации о ходе выполнения программы; • ошибки, предупреждения и подсказки инструментов разработчика или операционной системы; • приглашение к вводу данных. Важно не путать <samp> с <code>: <code> обозначает фрагмент программного кода, а <samp> — результат, который программа выводит пользователю. 📣 Code Ready | #атрибут
30 · 1.7K ·
Code Ready | Frontend
Фотография
нажмите — покажем
👨‍💻 Интересная статья попалась на Хабре: «o2 game engine»! В этой статье: • Познакомитесь с компактным open-source движком для 2D/3D-игр на C++ и JavaScript; • Разберёте его архитектуру, редактор, UI, физику, анимации и поддержку Windows, Linux, macOS, Android, iOS и Web; • Узнаете, как в движок интегрирован ИИ, способный помогать создавать игровые механики и самостоятельно тестировать результат. 🔊 Продолжай читать на Habr! 📣 Code Ready | #статья
30 · 1.8K ·
Фотография
нажмите — покажем
7,2 млн рублей призового фонда и реальные задачи космической отрасли 🚀 В сентябре пройдет серия КосмоХакатонов для студентов, молодых ученых и специалистов. Участникам предстоит за два дня разработать собственное решение, поработать с экспертами и представить проект жюри. Участников ждут: 🛰 реальные задачи космической отрасли 👥 команды от 3 до 5 человек 💻 очный и онлайн-форматы 🧑‍💻 работа с экспертами и трекерами 🏆 финал в Москве Первый КосмоХакатон стартует уже 4 сентября в Ростове-на-Дону. Дальше серия продолжится в Красноярске, Нижнем Новгороде, Благовещенске и Санкт-Петербурге, а завершится финалом в Москве. Участие бесплатное. Присоединиться могут студенты, аспиранты, молодые ученые и специалисты от 18 лет. 🔗 Зарегистрироваться: https://космохакатон.рф
5 · 1.7K ·
C
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" Если приложе
29 · 1.7K ·
C
Code Ready | Frontend
Фотография
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
Фотография
нажмите — покажем
📱 Clipboard API — работа с буфером обмена! В этой шпаргалке собраны основные методы Clipboard API для программной работы с буфером обмена. Здесь показано, как читать и записывать текстовые данные, работать с HTML, изображениями и другими поддерживаемыми MIME-типами, создавать ClipboardItem с несколькими представлениями данных, проверять поддержку форматов и извлекать содержимое нужного типа, а также использовать legacy-механизм копирования в качестве fallback. 📣 Code Ready | #шпора
43 · 2.4K ·

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем