❤️ Web Links — огромная подборка ресурсов по JavaScript и веб-разработке!На сайте собрана большая коллекция полезных ссылок для разработчиков: учебники, документация, статьи, блоги, инструменты, библиотеки и сервисы по JavaScript, HTML, CSS, React, Node.js и другим технологиям веб-разработки. Всё удобно структурировано по категориям, что позволяет быстро находить нужные материалы для изучения или работы.📌 Оставляю ссылочку: vallek.github.io📣 Code Ready | #сайт
Code Ready | Frontend
@code_ready
Авторский канал по Frontend разработке. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_it РКН: https://clck.ru/3NJCKs Реклама на бирже: https://telega.in/c/code_ready
Похожие каналы
Все →Последние посты
DocumentFragment: как делать пакетные DOM-вставки аккуратнее!Когда элементы добавляются в DOM по одному, браузеру приходится постоянно обновлять структуру документа. На небольших объёмах это почти незаметно, но при рендере больших списков или сложных интерфейсов такие операции могут начать стоить дороже. Для таких случаев в DOM API есть DocumentFragment.Создаём fragment:const fragment = document.createDocumentFragment();Это временный контейнер, который существует вне основного DOM-дерева. Пока элементы находятся внутри fragment — они не участвуют в рендеринге страницы. Можно спокойно собрать структуру в памяти, а потом вставить всё одной операцией. Пример — массовое добавление элементов:const fragment = document.createDocumentFragment();for (let i = 0; i < 1000; i++) { const li = document.createElement('li'); li.textContent = `Item ${i}`; fragment.appendChild(li);}document .querySelector('.list') .appendChild(fragment);Здесь элементы сначала собираются внутри fragment, а затем одной вставкой попадают в основной DOM. Такой подход уменьшает количество промежуточных вставок в live DOM и делает массовый рендер более предсказуемым. Пример через append():const fragment = document.createDocumentFragment();users.forEach(user => { const item = document.createElement('div'); item.className = 'user'; item.textContent = user.name; fragment.append(item);});container.append(fragment);append() тоже работает с DocumentFragment. По смыслу разницы почти нет — append() просто современнее и удобнее. Плюс он умеет принимать строки и несколько узлов сразу.Пример с переносом существующих элементов:const fragment = document.createDocumentFragment();document .querySelectorAll('.item') .forEach(el => { fragment.appendChild(el); });newContainer.appendChild(fragment);Здесь элементы не копируются, appendChild() физически переносит DOM-узлы в новый контейнер. Один и тот же элемент не может одновременно находиться в двух местах дерева. Ещё один частый кейс — работа с template:const

📂 Напоминалка для работы браузера и сети!Например, когда вводишь google.com, браузер сначала ищет IP-адрес через DNS, затем устанавливает TCP/TLS-соединение, отправляет HTTPS-запрос и только после этого начинает рендерить страницу.На картинке — полный путь от ввода URL до отображения сайта.Сохрани, чтобы быстро освежить в памяти, как работает Web под капотом!📣 Code Ready | #ресурс

Почему scroll иногда внезапно прыгает сам по себе?Добавляешь новый контент сверху и браузер внезапно меняет scroll-position. Особенно часто это ломает chat, infinite-feed и lazy-load layout.Обычно проблема появляется при:prepend,lazy-image,dynamic-contentБраузер пытается помочь и автоматически удерживает пользователя на прежнем месте через scroll anchoring.Но в динамических интерфейсах это часто создаёт хаос..chat { overflow-anchor: none;}Теперь браузер перестаёт вмешиваться в scroll-position контейнера.Особенно полезно для:chat,feed,virtual-list,infinite-scrollГде контент постоянно догружается или меняется.Можно отключать anchoring точечно даже у отдельных элементов..loader { overflow-anchor: none;}Например у skeleton, lazy-image или рекламных блоков.🔥 overflow-anchor: none убирает один из scroll-багов в динамических интерфейсах.📣 Code Ready | #совет
👩💻 Нужно быстро обернуть текст или элемент в HTML-тег?Htmltagwrap — позволяет выделить любой фрагмент и за секунду обернуть его в нужный тег: div, span, section и любой другой, без ручного написания. Особенно удобно при верстке, работе с JSX и быстром редактировании разметки.📣 Code Ready | #vscode

🧐 Крутая статья недавно вышла на Хабре: «Как я собрал кубик Рубика в браузере на чистом Canvas»!В этой статье:• Пошагово показывается создание собственного симулятора кубика Рубика на JS и Canvas;• Разбирается работа с 3D-проекцией, изометрией и ручным рендерингом объектов;• Объясняется, как хранить состояние куба и реализовывать алгоритмы поворотов;• Демонстрируются проблемы Canvas-рендеринга, сортировки граней и псевдо-3D.🔊 Продолжай читать на Habr!📣 Code Ready | #статья
👩💻 Анимированная подсветка рамки без JavaScript!Обычные анимации рамки часто выглядят слишком примитивно: у элемента просто меняется цвет или прозрачность всей границы сразу. Но через conic-gradient можно создать полноценное вращающееся свечение вокруг элемента.Как работает:• conic-gradient рисует сектор света вокруг центра;• псевдоэлемент становится отдельным glow-слоем;• animation вращает только градиент;• layout остаётся полностью стабильным, потому что анимируется compositing-слой.Приём отлично подходит для интерфейсных панелей, акцентных кнопок и интерфейсов с акцентными состояниями.📣 Code Ready | #фишка
💅 Ravesli JavaScript — курс по основам JS для начинающих!Сайт охватывает как основы языка, так и более продвинутые темы. Здесь разбираются переменные, функции, объекты, массивы, DOM, события, асинхронность, работа с браузером и др. Материал подаётся в формате последовательных уроков с примерами кода и подробными объяснениями.📌 Оставляю ссылочку: ravesli.com📣 Code Ready | #сайт

Как сделать sticky footer без layout-багов?Часто делают так:footer { position: fixed; bottom: 0;}Но fixed-footer перекрывает контент и ломает mobile layout.Есть нативный flex-способ без JS и вычислений высоты.body { display: flex; flex-direction: column;}Теперь body становится вертикальным flex-контейнером.Остаётся отодвинуть footer вниз.footer { margin-top: auto;}auto забирает всё свободное пространство сверху и footer автоматически прижимается к низу страницы.body { min-height: 100dvh;}🔥 Так layout занимает минимум всю высоту viewport даже при маленьком количестве контента.📣 Code Ready | #совет
👩💻 Стили пишутся прямо в React-компонентах.vscode-styled-components — делает работу со styled-components намного удобнее: появляются подсказки CSS, подсветка цветов, автодополнение свойств и форматирование прямо внутри JS/TS-файлов. Всё работает почти как в отдельном CSS-файле.📣 Code Ready | #vscode

🐱 Наткнулся на очень полезную статью на Хабре: «Мне этот Chrome DevTools теперь абсолютно понятен»!В этой статье:• Подробно разбираются основные инструменты Chrome DevTools — Elements, Console, Sources, Network и их применение;• Показывается, как эффективно искать баги, анализировать DOM, отлаживать JavaScript и отслеживать сетевые запросы;• Объясняются возможности DevTools: Workspaces, Snippets, performance-профилирование, live-редактирование и инструменты для адаптивной вёрстки.🔊 Продолжайте читать на Habr! 📣 Code Ready | #статья

📂 Напоминалка по работе API и прокси!Например, Forward Proxy скрывает клиента и управляет исходящими запросами, Reverse Proxy принимает трафик на стороне сервера и распределяет его между сервисами, а API Gateway централизует авторизацию, rate limiting и маршрутизацию API.На картинке — базовые различия между Forward Proxy, Reverse Proxy и API Gateway, которые полезно держать под рукой каждому разработчику.Сохрани, чтобы не потерять!📣 Code Ready | #ресурс
👩💻 Эффект цифрового сбоя для текста без JS!Обычный заголовок можно превратить в полноценный UI-эффект, если разделить его на несколько независимых слоёв. Как работает:• ::before и ::after создают копии текста;• каждый слой анимируется отдельно;• разные цвета формируют chromatic aberration;• небольшие смещения создают эффект glitch-сигнала.Приём отлично подходит для стартовых экранов, главных секций сайта, экранов загрузки и декоративных интерфейсов.📣 Code Ready | #фишка
🤔 Code JavaScript — большой учебник и практикум по JS!На сайте собрана полноценная база материалов по JavaScript: от базового синтаксиса и работы с DOM до более сложных тем вроде замыканий, событий, async/await и ООП. Материал построен в формате уроков и практических заданий, поэтому подходит не только для чтения, но и для закрепления знаний на практике.📌 Оставляю ссылочку: code.mu📣 Code Ready | #сайт
preventDefault(): контроль стандартного поведения браузера!При работе с DOM-событиями часто нужно отменить действие браузера: переход по ссылке, отправку формы, скролл и т.д. Для этого используется event.preventDefault().Метод отменяет стандартное поведение браузера, но не останавливает всплытие события. Для этого используется stopPropagation().Базовый пример:document.querySelector('a').addEventListener('click', (e) => { e.preventDefault(); console.log('link click handled manually');});После вызова preventDefault() переход по ссылке не произойдёт, и обработка полностью перейдёт под контроль JavaScript.Это особенно полезно в SPA-приложениях, где навигация управляется роутером без перезагрузки страницы.Пример — работа с формой:const form = document.querySelector('form');form.addEventListener('submit', (e) => { e.preventDefault(); const data = new FormData(form); send(data);});По умолчанию форма отправляет данные и перезагружает страницу. preventDefault() позволяет перехватить submit и самостоятельно управлять отправкой данных. Так обычно реализуются AJAX-формы, async-запросы и кастомная валидация.Важно: preventDefault() работает только для событий, которые поддерживают отмену. Проверить это можно через свойство cancelable.Пример — проверка cancelable:if (e.cancelable) { e.preventDefault();}Если событие не является cancelable, вызов preventDefault() не даст эффекта. Отдельный нюанс связан с passive listeners.Пример — passive listeners:window.addEventListener('touchmove', (e) => { e.preventDefault(); // будет проигнорирован}, { passive: true });При passive: true браузер заранее считает, что обработчик не будет отменять действие события. Это используется для оптимизации scroll/touch-событий.В таком режиме preventDefault() игнорируется. Иногда отмена зависит от состояния интерфейса или бизнес-логики.Пример — условная отмена:button.addEventListener('click', (e) => { if (!button.matches('.enabled')) { e.preventDefault(); }});Здесь действие отменяется только при