WebDev+ | Веб-разработка
Open in Telegram
Присоединяйтесь к нашему каналу и погрузитесь в мир веб-разработки Связь: @devmangx
Show more8 067
Subscribers
-224 hours
-257 days
-11330 days
Posts Archive
Бывало такое, что
sticky header перекрывает заголовки, на которые ведут якорные ссылки?
Простое решение: scroll-margin-top
Что это делает:
Добавляет дополнительный отступ сверху у заголовка.
Якорные ссылки продолжают работать, но заголовок оказывается ниже sticky header, так что хедер больше не перекрывает его часть.
Как использовать:
Если высота вашего хедера 80px, добавьте это к заголовкам:
scroll-margin-top: 80px;
Теперь, когда кто-то кликает по якорной ссылке, браузер прокручивает страницу до заголовка, но оставляет сверху 80px.
Заголовок отображается ниже хедера.
Дополнительный совет: если высота хедера меняется, например на мобильных устройствах, используйте CSS-переменные:
scroll-margin-top: var(--header-height);
Поддержка браузеров: около 96%
Одна строка CSS. И якорные ссылки наконец работают так, как этого ждут пользователи.
@WebDev_PlusХватит писать
reduce() просто ради того, чтобы сгруппировать массив
Object.groupBy() уже работает во всех основных браузерах и позволяет группировать элементы массива по любому ключу в одну строку.
Чисто, читаемо, без зависимостей.
Подробнее 👇
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy
@WebDev_PlusJavaScript использует лексическую область видимости.
Но знаешь ли ты, что такое lexical scope?
Лексическая область видимости означает, что область видимости переменной определяется тем, где она написана в коде, а не тем, откуда её вызвали.
Пример:
function outer() {
let x = 10;
function inner() {
console.log(x); // может обратиться к x из outer
}
inner();
}
outer();
Здесь inner() может получить доступ к x, потому что функция была объявлена внутри outer().
Это и есть lexical scope: функция как бы "помнит" окружение, в котором была создана.
Ключевые моменты:
* лексическая область видимости статическая, то есть фиксируется в момент определения кода
* внутренние функции могут обращаться к переменным из внешних областей видимости
* это фундамент, на котором в JavaScript построены closures
@WebDev_PlusМодалки бесят.
Хочешь, чтобы они бесили чуть меньше?
Используй
overscroll-behavior: contain;
Что это делает:
Ты скроллишь модалку, доходишь до её конца и продолжаешь крутить дальше.
И тут бах, начинает скроллиться страница под ней. Модалка всё ещё открыта, но позиция на странице сзади уже уехала.
Это называется scroll chaining. Это свойство как раз это и останавливает.
Как это работает:
Когда пользователь доходит до конца прокручиваемого элемента, а модалки для этого вообще идеальный кейс, скролл просто останавливается. Он не продолжает передаваться родителю по цепочке.
На мобилках заодно не триггерит pull-to-refresh.
Где использовать:
• модалки и диалоги
• сайдбары и навигационные меню
• фиксированные контейнеры с overflow: scroll
• мобильные карусели
Поддержка браузеров: 95%
Одна строка CSS.
Модалки всё ещё бесят, но уже чуть меньше 😄
@WebDev_PlusЭто самый простой способ переключаться между режимами Dark, Light и System.
Просто добавьте элемент с выбранным режимом
data-theme или удалите его из DOM, чтобы переключиться на System mode.
Может, это и не идеальный вариант, но это самый быстрый и простой способ!
@WebDev_PlusAngular совет дня: твое приложение ходит в несколько API, но интерсепторы не могут понять, к какому из них относится запрос!?
Оберни. Отфильтруй. Готово
@WebDev_Plus
autofill у инпутов по умолчанию выглядит стремно: эта заливка фона ломает аккуратные дизайн-системы, особенно в темной теме.
Пофиксил чисто CSS-хакам через inset-shadow:
autofill:shadow-[inset_0_0_0px_1000px_var(--color-background)]
Чтобы принудительно поставить нужный фон и убрать нативный синий.
https://micro.bossadizenith.me/writing/taming-chromes-autofill
@WebDev_PlusЕсли ты веб-разработчик и используешь ИИ, поставь это!
Agent Skills от Addy Osmani (Google) для:
* Web Performance
* best practices
* доступности (a11y)
* технического SEO
Под React, Vue, Angular или что угодно.
npx add-skill addyosmani/web-quality-skills
Вот какие skills поставятся:
* web-quality-audit - полный аудит в стиле Lighthouse
* performance - загрузка и оптимизация
* core-web-vitals - LCP, INP, CLS
* accessibility - WCAG и навигация с клавиатуры
* seo - meta-теги и структура
* best-practices - безопасность и стандарты
@WebDev_Plus🔥 @MoshniyWeb
Если ты:
-хочешь быть в курсе AI-инструментов, которые реально ускоряют работу
-ищешь честные обзоры (без рекламы, с реальным опытом)
-любишь готовые сниппеты с CodePen, адаптированные под задачи
-иногда полезно глянуть, как работают React, Next или просто JS в реальных ситуациях
...залетай 👇
AI-инструменты
Показываю, что реально помогает в работе
Сниппеты с CodePen
Адаптирую код, чтобы ты просто брал и использовал.
Честные сравнения
Тестирую на личных проектах -рассказываю, что работает, а что пустышка.
Короткие заметки
React, Next, JS -без растягиваний, просто по делу.
👉 @MoshniyWeb
Laravel Tip
Когда нужно обновить запись, но не трогать колонку
updated_at, используй updateQuietly().
Без таймстампов. Без событий. Тихое, чистое обновление, когда оно реально нужно.
@WebDev_Plustabular-nums должно быть дефолтом для любых чисел, которые обновляются (таймеры, счетчики, цены, проценты, счёт, live-данные и т.д.).
Включить OpenType-фичу tnum можно через CSS-свойство font-variant-numeric.
.tabular-nums {
font-variant-numeric: tabular-nums;
}
@WebDev_PlusCSS-совет:
Используй логические свойства вроде
margin-inline-start и text-align: start, чтобы верстка автоматически подстраивалась под любое направление письма.
@WebDev_PlusКак нормально организовать папки в коде?
Не важно, используешь ты React, Vue, Angular или просто TypeScript
3 самые типичные варианты ↓
@WebDev_Plus
TypeScript сужает тебе выбор на основе того, что ты уже выбрал, и делает это по группам.
@WebDev_Plus
SSR vs CSR vs SSG
Представь собес по вебу. Тебя спрашивают: в чем разница между SSR, CSR и SSG?
Это три стратегии рендера UI. Если выбрать не ту, можно легко просесть по скорости и SEO.
▪️SSR (Server Side Rendering)
Пользователь запрашивает страницу, сервер подтягивает данные, собирает HTML, подключает стили и отдаёт уже готовую разметку в браузер. Потом на клиенте подгружается JS и “оживляет” страницу, это называется hydration.
Плюсы:
▪️Хорошее SEO
▪️Контент появляется быстрее
Минусы:
▪️Интерактивность не мгновенная, пока hydration не отработает
Лучше всего для:
▪️блоги, новости, e-commerce
▪️всё, где важны SEO и свежие данные
CSR (Client Side Rendering)
Пользователь запрашивает страницу, сервер отдаёт пустой HTML плюс ссылки на JS/CSS. Дальше браузер загружает бандлы, JS строит страницу и накатывает стили.
Плюсы:
▪️После загрузки супер-интерактивно
Минусы:
▪️Плохое SEO (до выполнения JS страница фактически пустая)
▪️Медленный first paint/первый контент, особенно на слабых устройствах
Лучше всего для:
▪️дашборды, SaaS, внутренние панели
▪️всё за логином, где SEO не важно
SSG (Static Site Generation)
HTML генерируется заранее на этапе сборки/деплоя. Когда пользователь запрашивает страницу, сервер просто отдаёт готовый HTML файл. Никаких вычислений “на лету”.
Плюсы:
▪️Самый быстрый рендер
▪️Отличное SEO
Минусы:
▪️Плохо подходит для динамического контента или часто меняющихся данных
Лучше всего для:
▪️портфолио, документация, лендинги
▪️контент, который редко обновляется
В одну строку
▪️SSR: собирается на сервере на каждый запрос
▪️CSR: собирается в браузере после загрузки JS
▪️SSG: собирается при билде и отдается мгновенно
@WebDev_Plus
Laravel Tip
Найди запросы, которые выполняются слишком долго. Это легко логировать с помощью:
@WebDev_Plus
HTML-совет
Тег
<abbr> используют, чтобы пометить аббревиатуру или акроним (сокращение) от фразы или длинного слова.
Он улучшает доступность и понимание: можно дать расшифровку, которая появится при наведении.
Обычно <abbr> используют вместе с атрибутом title. Значение title показывается как подсказка, когда пользователь наводит курсор на содержимое <abbr>.
В этом примере:
WWW это сокращение от World Wide Web.
Когда пользователь наведёт на WWW, появится тултип с полной расшифровкой World Wide Web.
Зачем использовать <abbr>?
Доступность: скринридеры могут озвучивать полную форму, когда пользователь фокусируется на сокращении. Это помогает людям с нарушениями зрения.
Удобство: пользователь быстро видит смысл термина, не уходя со страницы и не ломая поток чтения.
@WebDev_PlusЗнакомьтесь:
abs() в CSS
Функция abs() возвращает абсолютное значение вычисления, то есть делает число, длину или процент всегда положительными. Полезно для более безопасной вёрстки и предсказуемого визуала.
Подробнее здесь ↓
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/abs
@WebDev_PlusЭтот пост выкуплен под рекламную интеграцию.
Но здесь будут скрины от участников frontend-менторства Тихона Галактионова и подборка полезных материалов:👉100 вопросов, которые точно помогут тебе на собеседовании: ссылка 👉Подборка из 100+ каналов с вакансиями для разработчиков: ссылка 👉10 задротских вопросов про JavaScript, после которых ты усомнишься, что вообще знаешь JS: ссылка 👉Чек лист проверки своего резюме: ссылка 👉Разбор самых популярных и каверзных вопросов на собесах: ссылка 👉Лайфхак как аккуратно “пинговать” рекрутеров: ссылка Ссылка на канал Тихона, там же можно найти больше материалов для подготовки к собеседованиям в Big Tech: ссылка Реклама, erid: 2W5zFHW9utM ИП Галактионов Тихон Витальевич, ИНН 771618975809
