Фронтенд Гайд
رفتن به کانال در Telegram
Канал для фронтендеров, много полезных лайфхаков, фичей, макетов, тестов! Все представлено в виде готового кода, бери и юзай в своем проекте. 6ad1a2aabe82d4fbb0d6
نمایش بیشتر7 713
مشترکین
-624 ساعت
-187 روز
-4230 روز
آرشیو پست ها
\n\n📌В этом примере append() добавляет новый элемент в конец списка\n\nappend() удобно использовать при генерации списков, карточек, уведомлений и других динамических компонентов. В отличие от appendChild(), он может добавлять сразу несколько узлов или строки текста, что делает его более гибким","datePublished":"2026-09-10T11:54:19Z","dateModified":"2026-09-10T11:54:19Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":2,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":645},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":7},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2}]}},{"@type":"ListItem","position":8,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4005","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4005","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4005","headline":"Различие между Object.freeze() и const const и Object.freeze – две разные фичи JavaScript. const применяется…","articleBody":"Различие между Object.freeze() и const\n\nconst и Object.freeze – две разные фичи JavaScript. const применяется только для неизменяемой ссылки на ячейку памяти со значением, что означает невозможность задать новое значение для переменной.\n\nObject.freeze работает со значениями объектов. Делает объект неизменяемым, то есть изменить его свойства невозможно.","datePublished":"2026-09-09T14:06:17Z","dateModified":"2026-09-09T14:06:17Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"image":["https://n1.tlmtr.cc/p/5233692734701376971?ty=l"],"commentCount":1,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":699},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":10},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":1},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1}]}},{"@type":"ListItem","position":9,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4004","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4004","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4004","headline":"OpenAI потеряли $38,5 млрд в 2025 году — это почти втрое больше их выручки. Отчет о финансовом положении комп…","articleBody":"OpenAI потеряли $38,5 млрд в 2025 году — это почти втрое больше их выручки. Отчет о финансовом положении компании оказался в сети.\n\nНадежность данных подтвердили в Financial Times. Всего за год чистый убыток создателей ChatGPT вырос почти в 8 раз. При этом они активно готовятся к выходу на биржу.\n\nДействительно некоммерческая компания.","datePublished":"2026-09-08T10:04:54Z","dateModified":"2026-09-08T10:04:54Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"image":["https://n3.tlmtr.cc/p/_y58rydzW1P9i4jW12kgklSjWaqRUX4c6xttYCAqH68E?ty=l"],"commentCount":2,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":770},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":5},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2}]}},{"@type":"ListItem","position":10,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4003","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4003","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4003","headline":"Claude Cowork теперь в браузере и на телефоне, работа не останавливается когда вы закрываете ноутбук Cowork э…","articleBody":"Claude Cowork теперь в браузере и на телефоне, работа не останавливается когда вы закрываете ноутбук\n\nCowork это режим, где вы даете Claude задачу целиком, а он сам ковыряется в файлах, календаре, почте и вебе, пока не доведет до конца. Раньше он жил только на компьютере, поэтому все замирало как только вы закрывали ноутбук.\n\nТеперь задача идет за вами по устройствам, продолжается в фоне даже с выключенным ноутбуком, а когда нужен ваш выбор, вопрос прилетает уведомлением на телефон.\n\nНапример, ставите подготовку к встрече на 6 утра понедельника, Claude читает переписку, транскрипты созвонов и свежие новости по клиенту, собирает бриф и накидывает черновик письма. Утром просто открываете готовое.\n\nПо данным самой Anthropic больше 90% задач в Cowork это не код, а офисная рутина, сведение расходов, трекеры договоров, сборка презентаций из транскриптов встреч.\n\nБета раскатывается волнами, первыми получают пользователи тарифа Max. Лимиты Cowork удвоены до 5 августа.","datePublished":"2026-09-07T14:20:31Z","dateModified":"2026-09-07T14:20:31Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":772},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":8},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3}]}},{"@type":"ListItem","position":11,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4002","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4002","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4002","headline":"Настраиваем иерархию стилей в проекте! Когда проект растёт, стили начинают перебиваться и путаться. CSS дал р…","articleBody":"Настраиваем иерархию стилей в проекте!\n\nКогда проект растёт, стили начинают перебиваться и путаться. CSS дал решение - каскадные слои.\n\nСоздайте слои с приоритетом:\n@lаyer reset, base, components, utilities;\n\nТеперь порядок каскада становится управляемым: слои идут строго в указанной последовательности, а внутри слоя продолжают работать обычные правила (специфичность и порядок объявления).\n\nНапример, базовые стили:\n@lаyer base {\nbutton {\nfont-size: 1rem;\n}}\n\nКомпоненты идут выше по приоритету:\n@lаyer components {\n.btn-primary {\nfont-size: 1.1rem;\n}}\n\nИ утилиты завершают каскад:\n@lаyer utilities {\n.fs-lg {\nfont-size: 1.25rem;\n}}\n\n🔥 Так исчезают конфликты слоёв, приоритеты всегда предсказуемы, проще мигрировать и рефакторить большие проекты.","datePublished":"2026-09-06T10:55:52Z","dateModified":"2026-09-06T10:55:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":722},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":7},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":6}]}},{"@type":"ListItem","position":12,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4001","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4001","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4001","headline":"HTML-совет Не используй input type=\"number\" для важных числовых полей — типа почтового индекса, номера карты…","articleBody":"HTML-совет\n\nНе используй input type=\"number\" для важных числовых полей — типа почтового индекса, номера карты и т.п.\n\nПочему?\n- На десктопе появляется ненужный спиннер.\n- Значение может случайно измениться при прокрутке мыши или нажатии клавиш вверх/вниз.\n\nВместо этого — используй inputmode=\"numeric\" + pattern\n\n✅ Показывает цифровую клавиатуру на мобильных устройствах — лучше UX.\n✅ Добавляет валидацию на цифры.","datePublished":"2026-09-06T10:52:30Z","dateModified":"2026-09-06T10:52:30Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":624},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":6},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":4}]}},{"@type":"ListItem","position":13,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4000","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4000","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/4000","headline":"📂 Напоминалка для работы с React.js! Например, useState помогает хранить состояние компонента, а useEffect —…","articleBody":"📂 Напоминалка для работы с React.js!\n\nНапример, useState помогает хранить состояние компонента, а useEffect — работать с побочными эффектами и запросами к API.\n\nНа картинке — основные темы и приёмы, которые чаще всего используются в React-разработке: хуки, рендеринг, формы, роутинг, стилизация и оптимизация.\n\nСохрани, чтобы не забыть!","datePublished":"2026-09-05T10:54:52Z","dateModified":"2026-09-05T10:54:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":1,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":670},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":10},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":3},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1}]}},{"@type":"ListItem","position":14,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3999","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3999","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3999","headline":"CEO Y Combinator выкатил свой сетап для Claude Code Это целая виртуальная команда из 10+ ролей, которая живёт…","articleBody":"CEO Y Combinator выкатил свой сетап для Claude Code\n\nЭто целая виртуальная команда из 10+ ролей, которая живёт внутри CLI. Теперь мы живем в реальности, где один человек гоняет 5–10 агентов параллельно: они пишут код, тесты, сами находят баги и фиксят их. У самого Гарри получается до 10–20к строк кода в день при работе «параллельно с CEO».\n\nПо факту это превращает Claude в управляемый софтверный завод с ролями, процессами и гейтами.","datePublished":"2026-09-05T09:36:24Z","dateModified":"2026-09-05T09:36:24Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":1,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":739},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":6},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":5},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1}]}},{"@type":"ListItem","position":15,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3998","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3998","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3998","headline":"Напоминалка для работы с Git. Например, git push отправляет твои изменения на сервер, а git checkout позволяе…","articleBody":"Напоминалка для работы с Git.\n\nНапример, git push отправляет твои изменения на сервер, а git checkout позволяет быстро переключаться между ветками.\n\nНа картинке — 12 самых нужных команд, которые стоит держать под рукой.\n\nСохрани, чтобы не забыть!","datePublished":"2026-09-04T10:54:52Z","dateModified":"2026-09-04T10:54:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":2,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":743},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":7},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":10},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2}]}},{"@type":"ListItem","position":16,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3997","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3997","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3997","headline":"Растягивай абсолютные элементы в одну строку — через inset! Многие задают абсолютным элементам растяжение вру…","articleBody":"Растягивай абсолютные элементы в одну строку — через inset!\n\nМногие задают абсолютным элементам растяжение вручную:\n.block::before {\n position: absolute;\n top: 0; right: 0; bottom: 0; left: 0;\n content: \"\";\n}\n\nНо то же самое можно записать короче — одной строкой:\n.block {\n position: relative;\n}\n.block::before {\n position: absolute;\n inset: 0;\n content: \"\";\n}\n\ninset: 0 означает сразу: top: 0; right: 0; bottom: 0; left: 0; — элемент растянется по родителю.\n\n🔥 Полезно для оверлеев, эффектов, декоративных слоёв и background-паттернов.","datePublished":"2026-09-03T10:54:52Z","dateModified":"2026-09-03T10:54:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":2,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":731},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":5},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":5},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2}]}},{"@type":"ListItem","position":17,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3996","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3996","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3996","headline":"😂👍","articleBody":"😂👍","datePublished":"2026-09-02T10:53:52Z","dateModified":"2026-09-02T10:53:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":762},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":14},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":18,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3995","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3995","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3995","headline":"Возможно, вы не знали, что можно напрямую получить значение числового input-поля как число с помощью valueAsN…","articleBody":"Возможно, вы не знали, что можно напрямую получить значение числового input-поля как число с помощью valueAsNumber. Ручное преобразование не требуется\n\nСвойство value у HTMLInputElement всегда возвращает строку.\n\nПоэтому для числовых полей нам приходится вручную преобразовывать значение в число с помощью parseInt(), parseFloat(), Number() или оператора +.\n\nМы можем упростить это, используя valueAsNumber. Оно напрямую возвращает значение как число.","datePublished":"2026-09-01T10:53:52Z","dateModified":"2026-09-01T10:53:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":821},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":6},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2}]}},{"@type":"ListItem","position":19,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3994","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3994","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3994","headline":"Фронтенд Гайд","datePublished":"2026-08-31T10:55:52Z","dateModified":"2026-08-31T10:55:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":1,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":799},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":13},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":2},{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1}]}},{"@type":"ListItem","position":20,"item":{"@type":"SocialMediaPosting","@id":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3993","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3993","mainEntityOfPage":"https://telemetr.io/fa/channels/1681900587-frontend_dev5/posts/3993","headline":"Напоминалка для работы с DOM! DOM — это то, через что JavaScript управляет HTML: ищет элементы, создаёт новые…","articleBody":"Напоминалка для работы с DOM!\n\nDOM — это то, через что JavaScript управляет HTML: ищет элементы, создаёт новые узлы, вешает события и реагирует на действия пользователя.\n\nНа картинке — базовые методы document и node, а также самые часто используемые события мыши, клавиатуры и форм.\n\nСохрани, чтобы не забыть!","datePublished":"2026-08-30T10:53:52Z","dateModified":"2026-08-30T10:53:52Z","author":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"publisher":{"@type":"Organization","name":"Фронтенд Гайд","url":"https://telemetr.io/fa/channels/1681900587-frontend_dev5","image":"https://img.tlmtr.io/c/1PP5aP/5339498914732170172?ty=x"},"commentCount":0,"interactionStatistic":[{"@type":"InteractionCounter","interactionType":"https://schema.org/ViewAction","userInteractionCount":817},{"@type":"InteractionCounter","interactionType":"https://schema.org/LikeAction","userInteractionCount":10},{"@type":"InteractionCounter","interactionType":"https://schema.org/ShareAction","userInteractionCount":4}]}}]}


































7 713
🎠 Карусель с CSS без JavaScript
CSS Scroll Snap позволяет автоматически фиксировать прокрутку на ближайшей карточке.
Настраиваем горизонтальный контейнер:
.slider {
display: flex;
gap: 16px;
overflow-x: auto;
scroll-snap-type: x mandatory;
}
Затем указываем точку фиксации для каждой карточки:
.slide {
flex: 0 0 80%;
scroll-snap-align: start;
}
Теперь после прокрутки ближайшая карточка сама выровняется по началу контейнера.
Для более плавного поведения можно добавить:
.slider {
scroll-behavior: smooth;
}
Подходит для мобильных подборок, галерей, отзывов и карточек товаров.
#css #frontend #вебразработка7 713
💬 Всплывающее окно без JavaScript
Нативный Popover API позволяет создавать меню, подсказки и небольшие всплывающие панели средствами HTML.
Добавляем кнопку:
<button popovertarget="menu">
Открыть
</button>
Создаём всплывающий элемент:
<div id="menu" popover>
Содержимое
</div>
После нажатия браузер самостоятельно откроет элемент. Повторное нажатие, клик снаружи или клавиша Escape закроют его.
При необходимости окно можно оформить через CSS:
[popover] {
padding: 20px;
border: 0;
border-radius: 12px;
box-shadow: 0 12px 40px #0004;
}
Меньше JavaScript — проще управление состоянием и базовой доступностью интерфейса.
#html #frontend #webdev7 713
⛔️ Как отменить fetch-запрос
Если пользователь изменил поисковый запрос, покинул страницу или закрыл компонент, предыдущий запрос может стать ненужным.
Отменить его можно через
AbortController.
Создаём контроллер:
const controller = new AbortController();
Передаём его сигнал в fetch:
fetch(url, {
signal: controller.signal
});
Когда запрос больше не нужен — отменяем:
controller.abort();
При отмене fetch завершится с ошибкой AbortError, которую можно обработать отдельно:
try {
await fetch(url, {
signal: controller.signal
});
} catch (error) {
if (error.name !== 'AbortError') {
throw error;
}
}
Особенно полезно для поиска, фильтров, переходов между страницами и размонтирования компонентов.
#javascript #frontend #fetch7 713
📐 Адаптивный размер текста с CSS
clamp()
Чтобы текст плавно менялся вместе с шириной экрана, необязательно создавать несколько media-запросов.
Функция clamp() принимает три значения:
.title {
font-size: clamp(24px, 5vw, 64px);
}
Здесь:
• 24px — минимальный размер;
• 5vw — гибкое значение;
• 64px — максимальный размер.
На маленьком экране заголовок не станет меньше 24px, а на большом — не превысит 64px.
clamp() подходит не только для текста:
.card {
padding: clamp(16px, 4vw, 40px);
gap: clamp(8px, 2vw, 24px);
}
Удобный способ создавать адаптивные интерфейсы с меньшим количеством media-запросов.
Сохраняйте, чтобы не потерять 📎
#css #frontend #вебразработка7 713
Как менять стиль родителя с помощью CSS
:has()
Раньше CSS умел выбирать только сам элемент или его потомков. Чтобы изменить родителя в зависимости от содержимого, часто приходилось использовать JavaScript.
Теперь это можно сделать через псевдокласс :has().
Например, подсветим поле, внутри которого есть невалидный input:
.field:has(input:invalid) {
border-color: #ff4d4f;
background: #fff2f2;
}
Можно изменить карточку при наведении на кнопку:
.card:has(.card__button:hover) {
transform: translateY(-4px);
box-shadow: 0 12px 30px #0002;
}
Или убрать нижний отступ у блока, если внутри нет описания:
.card:not(:has(.card__description)) {
padding-bottom: 16px;
}
Также :has() удобно использовать для форм, меню, карточек и переключателей:
.form:has(input:focus) {
outline: 2px solid #2684ff;
}
Главное преимущество — интерфейс реагирует на состояние вложенных элементов без дополнительных классов и JavaScript.
Сохраняйте, чтобы не потерять 📎
#css #frontend #вебразработка7 713
Как адаптировать компонент по ширине контейнера, а не экрана
Обычные
media-запросы ориентируются на ширину окна браузера. Но один и тот же компонент может находиться в широкой секции, узком сайдбаре или сетке карточек.
Для таких случаев в CSS есть контейнерные запросы.
Сначала нужно объявить родительский элемент контейнером:
.card-wrapper {
container-type: inline-size;
}
После этого стили компонента можно менять в зависимости от ширины именно этого контейнера:
.card {
display: grid;
grid-template-columns: 1fr;
}
@container (min-width: 560px) {
.card {
grid-template-columns: 160px 1fr;
}
}
Теперь карточка сама переключит компоновку, когда для неё появится достаточно места — независимо от ширины всего экрана.
Контейнерные запросы особенно удобны для карточек, виджетов, сайдбаров и переиспользуемых компонентов в больших интерфейсах.7 713
❓ Зачем используется метод
append() в JavaScript и когда его применять?
Метод append() добавляет один или несколько элементов или текст в конец указанного DOM-элемента. Это современный и удобный способ динамически изменять содержимое страницы.
✅Пример:
<ul id="list"></ul>
<script>
const list = document.getElementById("list");
const newItem = document.createElement("li");
newItem.textContent = "Новый элемент";
list.append(newItem);
</script>
📌В этом примере append() добавляет новый элемент <li> в конец списка
append() удобно использовать при генерации списков, карточек, уведомлений и других динамических компонентов. В отличие от appendChild(), он может добавлять сразу несколько узлов или строки текста, что делает его более гибким
7 713
Различие между Object.freeze() и const
const и Object.freeze – две разные фичи JavaScript. const применяется только для неизменяемой ссылки на ячейку памяти со значением, что означает невозможность задать новое значение для переменной.
Object.freeze работает со значениями объектов. Делает объект неизменяемым, то есть изменить его свойства невозможно.7 713
OpenAI потеряли $38,5 млрд в 2025 году — это почти втрое больше их выручки. Отчет о финансовом положении компании оказался в сети.
Надежность данных подтвердили в Financial Times. Всего за год чистый убыток создателей ChatGPT вырос почти в 8 раз. При этом они активно готовятся к выходу на биржу.
Действительно некоммерческая компания.
7 713
Claude Cowork теперь в браузере и на телефоне, работа не останавливается когда вы закрываете ноутбук
Cowork это режим, где вы даете Claude задачу целиком, а он сам ковыряется в файлах, календаре, почте и вебе, пока не доведет до конца. Раньше он жил только на компьютере, поэтому все замирало как только вы закрывали ноутбук.
Теперь задача идет за вами по устройствам, продолжается в фоне даже с выключенным ноутбуком, а когда нужен ваш выбор, вопрос прилетает уведомлением на телефон.
Например, ставите подготовку к встрече на 6 утра понедельника, Claude читает переписку, транскрипты созвонов и свежие новости по клиенту, собирает бриф и накидывает черновик письма. Утром просто открываете готовое.
По данным самой Anthropic больше 90% задач в Cowork это не код, а офисная рутина, сведение расходов, трекеры договоров, сборка презентаций из транскриптов встреч.
Бета раскатывается волнами, первыми получают пользователи тарифа Max. Лимиты Cowork удвоены до 5 августа.
7 713
Настраиваем иерархию стилей в проекте!
Когда проект растёт, стили начинают перебиваться и путаться. CSS дал решение - каскадные слои.
Создайте слои с приоритетом:
@lаyer reset, base, components, utilities;
Теперь порядок каскада становится управляемым: слои идут строго в указанной последовательности, а внутри слоя продолжают работать обычные правила (специфичность и порядок объявления).
Например, базовые стили:
@lаyer base {
button {
font-size: 1rem;
}}
Компоненты идут выше по приоритету:
@lаyer components {
.btn-primary {
font-size: 1.1rem;
}}
И утилиты завершают каскад:
@lаyer utilities {
.fs-lg {
font-size: 1.25rem;
}}
🔥 Так исчезают конфликты слоёв, приоритеты всегда предсказуемы, проще мигрировать и рефакторить большие проекты.
7 713
HTML-совет
Не используй
input type="number" для важных числовых полей — типа почтового индекса, номера карты и т.п.
Почему?
- На десктопе появляется ненужный спиннер.
- Значение может случайно измениться при прокрутке мыши или нажатии клавиш вверх/вниз.
Вместо этого — используй inputmode="numeric" + pattern
✅ Показывает цифровую клавиатуру на мобильных устройствах — лучше UX.
✅ Добавляет валидацию на цифры.7 713
📂 Напоминалка для работы с React.js!
Например,
useState помогает хранить состояние компонента, а useEffect — работать с побочными эффектами и запросами к API.
На картинке — основные темы и приёмы, которые чаще всего используются в React-разработке: хуки, рендеринг, формы, роутинг, стилизация и оптимизация.
Сохрани, чтобы не забыть!7 713
CEO Y Combinator выкатил свой сетап для Claude Code
Это целая виртуальная команда из 10+ ролей, которая живёт внутри CLI. Теперь мы живем в реальности, где один человек гоняет 5–10 агентов параллельно: они пишут код, тесты, сами находят баги и фиксят их. У самого Гарри получается до 10–20к строк кода в день при работе «параллельно с CEO».
По факту это превращает Claude в управляемый софтверный завод с ролями, процессами и гейтами.
7 713
Напоминалка для работы с Git.
Например, git push отправляет твои изменения на сервер, а git checkout позволяет быстро переключаться между ветками.
На картинке — 12 самых нужных команд, которые стоит держать под рукой.
Сохрани, чтобы не забыть!
7 713
Растягивай абсолютные элементы в одну строку — через inset!
Многие задают абсолютным элементам растяжение вручную:
.block::before {
position: absolute;
top: 0; right: 0; bottom: 0; left: 0;
content: "";
}
Но то же самое можно записать короче — одной строкой:
.block {
position: relative;
}
.block::before {
position: absolute;
inset: 0;
content: "";
}
inset: 0 означает сразу: top: 0; right: 0; bottom: 0; left: 0; — элемент растянется по родителю.
🔥 Полезно для оверлеев, эффектов, декоративных слоёв и background-паттернов.
7 713
Возможно, вы не знали, что можно напрямую получить значение числового input-поля как число с помощью
valueAsNumber. Ручное преобразование не требуется
Свойство value у HTMLInputElement всегда возвращает строку.
Поэтому для числовых полей нам приходится вручную преобразовывать значение в число с помощью parseInt(), parseFloat(), Number() или оператора +.
Мы можем упростить это, используя valueAsNumber. Оно напрямую возвращает значение как число.7 713
Напоминалка для работы с DOM!
DOM — это то, через что JavaScript управляет HTML: ищет элементы, создаёт новые узлы, вешает события и реагирует на действия пользователя.
На картинке — базовые методы document и node, а также самые часто используемые события мыши, клавиатуры и форм.
Сохрани, чтобы не забыть!
