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

Автор: @energy_c

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

Реклама на бирже: https://telega.in/c/code_ready
Download Telegram
✍️ Нашёл полезную статью на Хабре про современные возможности CSS, которые позволяют избавиться от старых костылей и писать код проще!

В этой статье:
• Показано, как решить проблему прыгающего контента через scrollbar-gutter;
• Разбираются современные CSS-возможности: system-ui, light-dark(), margin-inline и align-content;
• Объясняется, как сделать код чище, короче и удобнее для поддержки без лишних Flexbox и Grid-конструкций.

🔊 Продолжай читать на Habr!


📣 Code Ready | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
114👍9🔥6
Маленькая UI-деталь, которая влияет на восприятие интерфейса!

Часто бывает: кликаешь по button, tab, dropdown-item или card-action и выделяется текст.

Интерфейс сразу выглядит менее качественным.
.button {
user-select: none;
}


Теперь текст внутри элемента нельзя случайно выделить мышью или тапом.

Это особенно полезно для интерактивных элементов.
button,
.tab,
.badge {
user-select: none;
}


Но важно не применять это глобально.
body {
user-select: none;
}


Так можно сломать UX: пользователь не сможет копировать текст.

Используй только там, где выделение реально не нужно.
button,
.control,
.action


Это маленькая деталь, но она заметно улучшает UI.

🔥 user-select: none — простой способ сделать интерфейс визуально чище и приятнее.

📣 Code Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🤝76
This media is not supported in your browser
VIEW IN TELEGRAM
😍 dreamDevTeamx — большая шпаргалка для фронтенд разработчиков!

Годный репозиторий, в котором собрано много практической информации по разным направлениям разработки. Это база знаний, к которой удобно возвращаться во время обучения, работы или подготовки к собеседованиям. Материал ориентирован именно на практику.

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


📣 Code Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍116🔥5🤝1
Сидеть и работать в корпорации — страшно, жизнь-то мимо проходит. Уходить строить бизнес — страшно, а вдруг прогорит. Один из вариантов — разрабатывать свой пет-проект по вечерам. Многие успешные компании, например, Twitter, создавались именно так. Это не значит, что ваш проект обязательно заработает миллиарды, но заработать больше, чем в найме, и получить ценный опыт — вполне реально.

Перед началом разработки появляется множество вопросов, например:

• Как выбрать идею для пет-проекта?
• Что нужно знать про маркетинг
• Как запуститься и довести до первых продаж не имея бюджета на рекламу?

В телеграм-канале «Твой пет проект», Михаил Табунов делится своим опытом с разработчиками и менеджерами.

Он рассказывает, где искать идею для нового проекта, что нужно знать о маркетинге, как запустить стартап и привлечь первых 10 клиентов, а также о многих других важных вещах.

Подписывайтесь на «Твой пет проект», получайте пользу от практиков рынка!
https://t.me/+8Frwa03ciVlhNTky
1👎2
Почему querySelectorAll() не обновляется автоматически?

Иногда кажется, что результат querySelectorAll() как-то привязан к DOM и должен сам обновляться при изменениях на странице. Но это не так — он возвращает фиксированный снимок на момент вызова.
const items = document.querySelectorAll('.item');

console.log(items.length); // 3

document.body.insertAdjacentHTML(
'beforeend',
'<div class="item"></div>'
);

console.log(items.length); // всё ещё 3


После этого items никак не пересчитывается. Это просто сохранённый результат поиска, а не живая коллекция.

Если нужен актуальный список — придётся заново выполнить запрос:
let items = document.querySelectorAll('.item');

document.body.insertAdjacentHTML(
'beforeend',
'<div class="item"></div>'
);

items = document.querySelectorAll('.item');

console.log(items.length); // 4


Из-за этого иногда появляются простые, но неприятные ошибки в динамическом UI. Например, когда элементы добавляются позже, а список уже был сохранён заранее:
const buttons = document.querySelectorAll('.btn');

addNewButton();

// новый элемент сюда уже не попадёт
buttons.forEach(bindHandler);


Человек ожидает, что обработчик навесится на всё, но фактически работает только с тем, что существовало в момент запроса.

Есть и другой вариант поведения — живые коллекции. Например:
const items = document.getElementsByClassName('item');

console.log(items.length); // 3

document.body.insertAdjacentHTML(
'beforeend',
'<div class="item"></div>'
);

console.log(items.length); // 4


Такие коллекции действительно меняются вместе с DOM. К ним относятся getElementsByClassName, getElementsByTagName и element.children. Разница простая: querySelectorAll даёт снимок, а getElementsBy* держат связь с DOM.

При этом NodeList, который возвращает querySelectorAll, можно спокойно перебирать как массив:
const items = document.querySelectorAll('.item');

items.forEach(item => {
console.log(item);
});


Но это всё ещё не массив:
Array.isArray(items); // false


Если нужны методы массива — его нужно явно преобразовать:
const items = [...document.querySelectorAll('.item')];


🔥 На практике querySelectorAll используют чаще именно из-за предсказуемости. Он не меняется сам по себе, и это как раз удобно в реальных приложениях. Для динамики обычно либо делают повторный запрос, либо уходят в делегирование событий.

📣 Code Ready | #практика
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍15🔥65
📂 Напоминалка по аутентификации и авторизации в вебе!

Например, Session-cookie хранит состояние на сервере и использует session_id в cookie браузера, тогда как Token-based подход переносит хранение состояния на клиент и отправляет токен в каждом запросе.

На картинке показаны основные механизмы: классические session-cookie, токены и JWT, а также SSO для единого входа и OAuth 2.0 с различными grant flow, которые используются для разных типов приложений — web, mobile и server-to-server.

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

📣 Code Ready | #ресурс
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍146🔥6
«Опять лагает»: где искать слабые места во фронтенде

Если сайт тормозит и работает не так быстро, как вам хотелось бы, ему нужен аудит — на это потребуется примерно 1 рабочий день.

Роман Игнатович, фронт-тимлид Далее, готов сэкономить эти бесценные 8 часов вашего рабочего времени. Он собрал чек-лист типичных ошибок во фронтенде, из-за которых всё лагает, с понятными способами их устранения.

Больше технических разборов кейсов, советов и вакансий для разработчиков — в канале Далее.

Подписывайтесь!
#реклама
О рекламодателе
🔥1
👩‍💻 Textarea, которая растёт по контенту без JavaScript!

Автоматическое изменение высоты textarea — частая задача в формах, чатах и комментариях. Обычно для этого используют JavaScript, но современные браузеры уже умеют делать это нативно через CSS.

Как работает:
field-sizing: content включает автоматический расчёт размеров поля;

textarea начинает подстраиваться под объём текста;

высота увеличивается по мере ввода;

браузер сам рассчитывает размеры без JS-логики.


🔥 Это отличный способ упростить формы, чаты и интерфейсы ввода текста.

📣 Code Ready | #фишка
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍268🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🐱 html-cheatsheet-rus — полезнейшая шпаргалка по HTML!

Крутой материал для тех, кто изучает frontend или хочет быстро освежить базу по HTML. Здесь собрана действительно большая база — от структуры HTML-документа, тегов и атрибутов до форм, семантической вёрстки, мультимедиа, HTML5 API и accessibility.

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


📣 Code Ready | #репозиторий
Please open Telegram to view this post
VIEW IN TELEGRAM
116👍7🔥6
Почему textarea часто ломает layout?

По умолчанию textarea можно тянуть во все стороны.

Пользователь легко может растянуть её по ширине и сломать grid, flex или весь form-layout.

Обычно никто это не контролирует.
textarea {
resize: both;
}


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

Лучше сразу ограничить направление resize.
textarea {
resize: vertical;
}


Теперь пользователь может увеличить высоту, но ширина layout остаётся стабильной.

Если resize вообще не нужен:
textarea {
resize: none;
}


Это особенно полезно для сложных форм.
.modal textarea,
.sidebar textarea {
resize: vertical;
}


🔥 Контроль resize убирает неприятные layout-баги в формах и делает UI заметно стабильнее.

📣 Code Ready | #совет
Please open Telegram to view this post
VIEW IN TELEGRAM
115👍8🔥4🤝2
👩‍💻 Можно ли вывести видео поверх всех окон на странице или даже за пределы браузера?

Псевдокласс :picture-in-picture в CSS применяется к видео, которое находится в режиме «картинка в картинке». Он позволяет стилизовать элемент <video>, когда пользователь вынес его в плавающее окно поверх других приложений или вкладок.

Как это используется:
изменение оформления видео в PiP-режиме;
визуальная индикация активного режима воспроизведения;
адаптация интерфейса под плавающее окно.


Комбинируйте с соседними селекторами (~, +) и :has(), чтобы менять другие элементы интерфейса, пока видео в PiP.

📣 Code Ready | #свойство
Please open Telegram to view this post
VIEW IN TELEGRAM
114🔥8👍7