Code Ready | Frontend – Telegram
Code Ready | Frontend
22.2K subscribers
1.07K photos
447 videos
17 files
712 links
Авторский канал по Frontend разработке.
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!

Автор: @energy_it

РКН: https://clck.ru/3NJCKs

Реклама на бирже: https://telega.in/c/code_ready
Download Telegram
Что же выведет консоль?
Anonymous Quiz
23%
A
30%
B
22%
C
24%
D
👍169🔥7
👍2312🔥10😁7👎1
👩‍💻 Объёмный текст с двойным смещением!

Прозрачный основной текст с контуром, а два псевдослоя дублируют надпись и смещаются в разные стороны. При наведении слои расходятся, создавая 3D-смещение в стиле глич-дизайна.

Как работает:
Прозрачный основной текст оставляет только контур;

::before и ::after выводят копию строки поверх него;

При hover слои уходят в противоположные направления, формируя глубину;

Всё построено на transform и text-stroke.


Минимальный код, но эффект отлично выделяет заголовки, hero-блоки и промо-элементы.

📣 Code Ready | #фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1914🔥9🤝2
📂 Напоминалка для работы с HTML!

Например, <head> содержит метаданные страницы, теги вроде <div> и <span> используются для структурирования разметки, а <h1>–<h6> — для иерархии заголовков.

На картинке — компактная шпаргалка с базовыми HTML-тегами: структура документа, текстовая разметка, списки, таблицы, формы и основные события форм.

Сохрани, чтобы не забыть!

📣 Code Ready | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥96🤝2
Универсальное чтение файлов: текст, JSON и бинарные данные!

Когда пользователь загружает файл обычно начинают писать разные обработчики. Получается много дублирования.

Можно сделать универсальный ридер:
const readFile = (file, as = 'text') =>
new Promise(r => {
const fr = new FileReader();
fr.onload = () => r(fr.result);
fr[`readAs${as[0].toUpperCase() + as.slice(1)}`](file);
});


Теперь можно читать файл как текст:
const txt = await readFile(file, 'text');


Читаем как JSON:
const obj = JSON.parse(await readFile(file, 'text'));


Читаем картинку в виде base64:
const base64 = await readFile(file, 'dataURL');


Читаем бинарные данные:
const buf = await readFile(file, 'arrayBuffer');


🔥 Одна функция заменяет несколько обработчиков чтения файлов.

📣 Code Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝168🔥6👍1
🤝24😁16🔥62
📱 Mutation Observer API — контроль и реакция на изменения DOM!

В этой шпаргалке собраны основные методы и свойства Mutation Observer API для отслеживания структурных и атрибутных изменений DOM. Здесь отражены инструменты, позволяющие наблюдать за добавлением и удалением узлов, изменениями атрибутов и текстового содержимого, а также управлять жизненным циклом наблюдателя в прикладных сценариях.

📣 Code Ready | #шпора
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍14🤝91
This media is not supported in your browser
VIEW IN TELEGRAM
✍️ NodeBestPractices — список лучших шаблонов и паттернов Node JS!

Здесь собраны проверенные рекомендации, которые помогают улучшать структуру проектов, писать более чистый и поддерживаемый код, избегать типичных ошибок и повышать безопасность приложений. Все советы объяснены простым языком и подходят как для начинающих, так и для опытных разработчиков.

Оставляю ссылочку: GitHub 📱


📣 Code Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥9👍7
Отложенный запуск функции (debounce)!

При вводе, скролле или ресайзе события вызываются слишком часто и создают лишнюю нагрузку. Debounce откладывает выполнение функции, пока поток событий не прекратится.

Создадим универсальный debounce-хелпер:
function debounce(fn, delay = 300) {
let timerId = null;

return (...args) => {
clearTimeout(timerId);
timerId = setTimeout(() => fn(...args), delay);
};
}


Используем debounce для поиска по вводу:
const input = document.querySelector("#search");

function handleSearch(value) {
console.log("Запрос:", value);
}

const debouncedSearch = debounce(handleSearch, 500);

input.addEventListener("input", (e) => {
debouncedSearch(e.target.value);
});


Теперь обработчик вызовется только когда пользователь закончит вводить текст.

Добавим ещё пару практических кейсов.

Сохранение черновика формы:
const saveDraft = debounce((form) => {
console.log("Сохраняем черновик:", form);
}, 1000);


Оптимизация обработчика resize:
window.addEventListener(
"resize",
debounce(() => {
console.log("Пересчитываем layout...");
}, 200)
);


🔥 Один универсальный инструмент — и меньше нагрузки на фронтенд, меньше дерганий UI и никаких лишних запросов.

📣 Code Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍139
👩‍💻 Выделяем клавиши и комбинации с помощью тега!

Тег <kbd> обозначает пользовательский ввод: с клавиатуры, голосом, указателем или другим образом. <kbd> никак не влияет на скринридеры и другие вспомогательные технологии. Они рассказывают о содержимом тега как об обычном тексте без роли.

Где особенно полезен:
Инструкции по работе с интерфейсом;
Подсказки горячих клавиш;
Руководства для разработчиков;
Отображение команд, вводимых вручную.


По умолчанию браузеры выводят <kbd> моноширинным шрифтом.

📣 Code Ready | #атрибут
Please open Telegram to view this post
VIEW IN TELEGRAM
👍189🔥8
Получаем предыдущий и следующий элементы в массиве — будто «крутим карусель»

Иногда нужно перемещаться по массиву: переключать слайды, шагать по списку товаров, листать подсказки. Сделаем мини-утилиту, которая даёт соседние элементы по индексу.

Базовая функция:
function neighbors(arr, index) {
return {
prev: arr[index - 1] ?? null,
next: arr[index + 1] ?? null
};
}


Использование:
const items = ["A", "B", "C", "D"];

console.log(neighbors(items, 1));
// { prev: "A", next: "C" }


Сделаем версию с циклическим режимом — как в каруселях:
function cycleNeighbors(arr, index) {
const len = arr.length;
return {
prev: arr[(index - 1 + len) % len],
next: arr[(index + 1) % len]
};
}


Использование:
console.log(cycleNeighbors(items, 0));
// { prev: "D", next: "B" }


🔥 Мини-инструмент, который сильно упрощает навигацию по массивам: слайдеры, шаговые формы, клавиатурная навигация, циклические списки — всё становится на порядок чище.

📣 Code Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1512👍10
👩‍💻 Делаем компоненты универсальными одной строкой!

До сих пор многие привязывают стили к направлению текста:
.card {
padding-left: 16px;
padding-right: 16px;
}


Это работает, пока интерфейс строго LTR и не появляется RTL, локализация или переиспользование компонентов.

Современный CSS решает это нативно, логическими свойствами:
.card {
padding-inline: 16px;
}


padding-inline автоматически учитывает направление текста и заменяет padding-left + padding-right.

То же самое работает для вертикали:
.card {
padding-block: 12px;
}


🔥 padding-blockэто padding-top + padding-bottom, но без жёсткой привязки к физическим сторонам.

📣 Code Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥11🤝93
📱 Предпросмотр изображения при загрузке файла!

Привет! В этом гайде создаём простой компонент загрузки изображений с предпросмотром, проверкой типа файла и ограничением по размеру.

Ключевые моменты:
• HTML: файловый input, зона загрузки и блок предпросмотра.

• CSS: центрирование, карточный UI, аккуратные тени и отступы.

• JS: обработка выбора файла, проверка MIME-типа и размера, работа с Object URL.


Элемент отлично подойдёт для аватаров, профилей пользователей, форм обратной связи, карточек товаров и любых интерфейсов, где требуется наглядная загрузка изображений.

📣 Code Ready | #гайд
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👍9🤝9👎1😁1