es
Feedback
Code Ready | Frontend

Code Ready | Frontend

Ir al canal en Telegram

Авторский канал по Frontend разработке. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_c РКН: https://clck.ru/3NJCKs

Mostrar más

📈 Análisis del canal de Telegram Code Ready | Frontend

El canal Code Ready | Frontend (@code_ready) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 21 606 suscriptores, ocupando la posición 6 128 en la categoría Tecnologías y Aplicaciones y el puesto 30 793 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 21 606 suscriptores.

Según los últimos datos del 20 julio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -306, y en las últimas 24 horas de -12, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 8.42%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 4.83% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 820 visualizaciones. En el primer día suele acumular 1 044 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 19.
  • Intereses temáticos: El contenido se centra en temas clave como css, браузер, интерфейс, загрузка, api.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Авторский канал по Frontend разработке. Ресурсы, гайды, задачи, шпаргалки. Информация ежедневно пополняется! Автор: @energy_c РКН: https://clck.ru/3NJCKs

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 21 julio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

21 606
Suscriptores
-1224 horas
-647 días
-30630 días
Atraer Suscriptores
julio '26
julio '26
+52
en 28 canales
junio '26
+123
en 19 canales
Get PRO
mayo '26
+159
en 31 canales
Get PRO
abril '26
+90
en 31 canales
Get PRO
marzo '26
+234
en 68 canales
Get PRO
febrero '26
+220
en 22 canales
Get PRO
enero '26
+1 062
en 125 canales
Get PRO
diciembre '25
+433
en 124 canales
Get PRO
noviembre '25
+1 202
en 266 canales
Get PRO
octubre '25
+733
en 100 canales
Get PRO
septiembre '25
+1 126
en 108 canales
Get PRO
agosto '25
+1 117
en 240 canales
Get PRO
julio '25
+897
en 55 canales
Get PRO
junio '25
+1 017
en 87 canales
Get PRO
mayo '25
+2 027
en 323 canales
Get PRO
abril '25
+117
en 1 canales
Get PRO
marzo '25
+130
en 2 canales
Get PRO
febrero '25
+125
en 0 canales
Get PRO
enero '25
+130
en 3 canales
Get PRO
diciembre '24
+234
en 5 canales
Get PRO
noviembre '24
+259
en 7 canales
Get PRO
octubre '24
+2 497
en 247 canales
Get PRO
septiembre '24
+3 493
en 269 canales
Get PRO
agosto '24
+337
en 2 canales
Get PRO
julio '24
+140
en 1 canales
Get PRO
junio '24
+793
en 7 canales
Get PRO
mayo '24
+2 442
en 26 canales
Get PRO
abril '24
+2 945
en 37 canales
Get PRO
marzo '24
+1 802
en 42 canales
Get PRO
febrero '24
+1 591
en 37 canales
Get PRO
enero '24
+4 288
en 28 canales
Get PRO
diciembre '23
+795
en 23 canales
Get PRO
noviembre '23
+693
en 31 canales
Get PRO
octubre '23
+443
en 12 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
21 julio+6
20 julio+1
19 julio+1
18 julio0
17 julio+1
16 julio0
15 julio+9
14 julio+18
13 julio0
12 julio+1
11 julio+1
10 julio+5
09 julio0
08 julio0
07 julio+1
06 julio+2
05 julio+2
04 julio0
03 julio+2
02 julio+2
01 julio0
Publicaciones del Canal
CSS.escape() — экранирование динамических значений для CSS-селекторов! При работе с DOM часто приходится искать элементы по динамическим значениям: id, class, значениям атрибутов. И здесь есть один важный момент: querySelector() и querySelectorAll() принимают не просто строки, а полноценные CSS-селекторы. Поэтому если часть селектора формируется динамически, нужно учитывать правила синтаксиса CSS. Например:
const id = "user:123";

const element = document.querySelector(
  `#${id}`
);
После подстановки браузер получает:
#user:123
На первый взгляд кажется, что мы ищем элемент с id="user:123". Но для CSS символ : имеет специальное значение. Он используется для псевдоклассов:
:hover
:focus
:checked
Поэтому CSS-парсер воспринимает : не как часть значения, а как элемент синтаксиса селектора. Для таких случаев существует стандартный метод CSS.escape():
const id = "user:123";

const element = document.querySelector(
  `#${CSS.escape(id)}`
);
Теперь значение будет преобразовано в корректный CSS-идентификатор:
#user\:123
Браузер понимает, что : является частью значения, а не специальной конструкцией CSS. Такая проблема возникает не только с двоеточием. CSS имеет множество специальных символов, которые могут изменить смысл селектора:
const id = "product.item#42";

const element = document.querySelector(
  `#${CSS.escape(id)}`
);
Без экранирования символы ., # и другие будут интерпретироваться как часть CSS-селектора. То же самое относится к динамическим классам:
const className = "theme:dark";

const element = document.querySelector(
  `.${CSS.escape(className)}`
);
CSS.escape() работает согласно правилам CSS-идентификаторов и возвращает строку, которую можно использовать внутри селектора:
CSS.escape("hello world");
// "hello\ world"

CSS.escape("item.value");
// "item\.value"

CSS.escape("a:b");
// "a\:b"
До появления этого метода часто использовали ручное экранирование:
value.replace(/:/g, "\\:");
Но такой подход быстро становится неудобным. CSS имеет много специальных случаев: разные символы, пробелы, цифры в начале идентификаторов и другие правила. CSS.escape() переносит эту логику на стандартный API браузера. Использовать его стоит в местах, где динамическое значение становится частью CSS-селектора:
document.querySelector()

document.querySelectorAll()

element.matches()

element.closest()
Важный момент: CSS.escape() не является механизмом защиты данных. Он решает только задачу корректного экранирования значения для CSS-селектора. Например:
element.innerHTML = value;
— это уже другая область: HTML и потенциальные XSS-риски. Там используются другие механизмы защиты. Если вы работаете с динамическими id, классами или значениями, которые приходят извне (например, из API), CSS.escape() помогает избежать ошибок парсинга и сохранить ожидаемое поведение DOM API. 🔥 CSS.escape() — хороший способ подготовить динамические значения перед использованием внутри CSS-селекторов. 📣 Code Ready | #практика

2
Опа, тут бывший сеньор одного из IT-отделов Яндекса Игорь Никитин выкатил целый канал про Python — и это лучшее, что есть в р
Опа, тут бывший сеньор одного из IT-отделов Яндекса Игорь Никитин выкатил целый канал про Python — и это лучшее, что есть в рунете по теме. Качественные гайды. Советы от известных прогеров. Тематические мемасы. Короче, ничего лишнего. Хватит душить питона, учись его кодить: https://t.me/+IzIPzvoa7p40ZTUy 🐍
823
3
👩‍💻 Группируем заголовок и обычный текст! Тег объединяет основной заголовок страницы или раздела с дополнительным
👩‍💻 Группируем заголовок и обычный текст! Тег <hgroup> объединяет основной заголовок страницы или раздела с дополнительным текстом, который его сопровождает — например, подзаголовком или кратким описанием. Чаще всего внутри <hgroup> размещают: • один из заголовков <h1>–<h6>; • дополнительные элементы текста, например <p> с пояснением. Он помогает логически связать несколько элементов заголовка, сохраняя структуру документа более понятной для браузеров и вспомогательных технологий. Не используйте <hgroup>, если вы хотите показать два независимых заголовка, — лучше оформить это через <section> или <article> 📣 Code Ready | #атрибут
1 128
4
✍️ Frontend Handbook — большая база знаний по frontend-разработке! Здесь собраны статьи, документация, шпаргалки, инструменты
✍️ Frontend Handbook — большая база знаний по frontend-разработке! Здесь собраны статьи, документация, шпаргалки, инструменты и другие ресурсы по HTML, CSS, JavaScript, TypeScript, React и многим другим технологиям. Особенно удобно, что информация хорошо структурирована, поэтому можно быстро найти нужную тему. Оставляю ссылочку: GitHub 📱 📣 Code Ready | #репозиторий
1 324
5
Intersection Observer — отслеживаем появление элементов в области видимости! Эффективная альтернатива scroll-событиям. Используется для ленивой загрузки, анимаций и инфинит-скролла. Инициализируем наблюдатель: const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); } }); }); Подключаем наблюдение: document.querySelectorAll('.anim').forEach((el) => { observer.observe(el); }); Стили для появления: .anim { opacity: 0; transform: translateY(30px); transition: 0.4s ease; } .visible { opacity: 1; transform: none; } 🔥 Простая и масштабируемая практика, которую используют в продакшене: YouTube, Medium, e-commerce. 📣 Code Ready | #практика
1 433
6
AI уже умеет писать код. Следующий шаг — поручить ему код-ревью. Большинство разработчиков используют AI как продвинутый авто
AI уже умеет писать код. Следующий шаг — поручить ему код-ревью. Большинство разработчиков используют AI как продвинутый автокомплит. Но агенты уже умеют выполнять полноценные инженерные задачи: проверять pull request, искать баги, следить за стилем и безопасностью кода. На бесплатном воркшопе покажут, как собрать такого агента своими руками и встроить его в GitHub. Что будет на практике: 🔹 Настроите AI-ревьюера на Opencode и AGENTS.md; 🔹 Разберётесь, как работают MCP, Tools и Skills; 🔹 Подключите агента к репозиторию; 🔹 Протестируете его на реальном pull request; 🔹 Получите готовый workflow, который можно использовать после воркшопа. Подойдёт разработчикам, тимлидам, DevOps, QA и всем, кто хочет внедрять AI в реальные процессы разработки, а не просто общаться с чат-ботами. 21 июля, 19:00 (МСК). Участие бесплатное. Записаться → #реклама О рекламодателе
863
7
Как создавать независимые компоненты без конфликтов CSS-переменных? В больших проектах часто используют глобальные переменные
Как создавать независимые компоненты без конфликтов CSS-переменных? В больших проектах часто используют глобальные переменные: :root { --color: blue; } Но потом один компонент случайно меняет значение, и стили начинают влиять друг на друга. CSS позволяет делать локальные токены прямо внутри компонента. .card { --color: #222; color: var(--color); } Теперь переменная действует только внутри .card и его потомков. Можно создавать полностью изолированные темы компонентов. .dark-card { --bg: #111; --text: white; } Внутренние элементы автоматически получают эти значения: .title { color: var(--text); } Без дополнительных классов и дублирования. Особенно удобно для: .theme, .component, .widget где каждый блок должен иметь свои настройки. 🔥 Локальные CSS custom properties позволяют строить компонентные дизайн-системы без огромного количества модификаторов и переопределений. 📣 Code Ready | #совет
1 254
8
🇷🇺 Разбираешься в радиочипах, оптике и связи? Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон» 🇷�
🇷🇺 Разбираешься в радиочипах, оптике и связи? Забери до 1 000 000 рублей за свои инженерные навыки на турнире «Дронкон» 🇷🇺 «Сталинские Соколы» открывают регистрацию на 4-й Всероссийский турнир «Дронкон», который пройдет с 22 по 26 августа. Турнир пройдет по направлению: - Инженерное дело: навыки программирования, сборка электронного оборудования, беспроводная связь, оптические системы + стратегия «Битва Дронов»; Призовой фонд для победителей: 🥇место – 1 000 000 рублей 🥈место – 700 000 рублей 🥉место – 500 000 рублей Награда за 4-8 места - 100 000 рублей Пройди заочный онлайн-этап и получи путевку на очный этап турнира в Республику Татарстан! Перелет, питание, проживание - за счет организаторов. 🇷🇺 Подать заявку и узнать подробности 🇷🇺
723
9
Date.parse() и неочевидные проблемы при работе с датами! При работе с датами в JavaScript часто используют Date.parse() или new Date(), чтобы преобразовать строковое значение в дату или получить timestamp. При этом важно понимать, какое значение хранится в системе: календарная дата, локальное время или конкретный момент времени. Ошибки обычно появляются, когда эти разные сценарии начинают обрабатываться одинаково. Например: const timestamp = Date.parse( '2024-01-15T10:30:00Z' ); console.log(timestamp); JavaScript возвращает количество миллисекунд от 1 января 1970 года UTC. Проблемы возникают, когда в Date.parse() передают даты в произвольном формате: Date.parse('01/15/2024'); Date.parse('15.01.2024'); Date.parse('2024/01/15'); Такие форматы не являются надёжным контрактом между системами. Их обработка может отличаться в зависимости от окружения и реализации JavaScript. Например: Date.parse('01/02/2024'); Такая запись неоднозначна. Без явного формата невозможно гарантировать одинаковый результат во всех окружениях. Поэтому при обмене датами между backend и frontend обычно используют ISO 8601 с явным указанием времени и часового пояса: new Date( '2024-01-15T10:30:00Z' ); Здесь описан конкретный момент времени. Указаны дата, время и часовой пояс (UTC), поэтому значение будет одинаково интерпретироваться независимо от локального времени пользователя. Отдельная проблема возникает при работе с датами без времени. Например: const date = new Date( '2024-01-15' ); console.log(date); Строка 2024-01-15 в JavaScript интерпретируется как UTC-дата: 2024-01-15T00:00:00.000Z После этого значение преобразуется в локальный часовой пояс пользователя. В часовом поясе UTC+3 пользователь увидит: 15.01.2024 03:00 А в UTC-5: 14.01.2024 19:00 Само значение времени остаётся одинаковым, но календарная дата при отображении может измениться. Именно здесь часто возникает ошибка в модели данных. Например, сервер возвращает дату рождения пользователя: { "birthday": "2000-01-15" } На frontend создаётся объект Date: const birthday = new Date( user.birthday ); birthday.toLocaleDateString('ru-RU'); Разработчик ожидает получить: 15.01.2000. Но пользователь в другом часовом поясе может увидеть: 14.01.2000. Причина в том, что дата рождения — это календарное значение. Она не зависит от часов, минут и часового пояса. Объект Date в JavaScript используется для работы с конкретным моментом времени, поэтому при преобразовании строк учитывается часовой пояс. Для временных событий лучше использовать полный ISO-формат: const createdAt = new Date( '2024-01-15T14:30:00Z' ); Дата создания сообщения, время оплаты или момент отправки уведомления являются событиями во времени. Для них важно передавать полное значение с часовым поясом. А вот календарные значения, например дату рождения или дату окончания периода, не всегда стоит преобразовывать в Date. В таких случаях безопаснее работать с исходным значением: const [year, month, day] = '2000-01-15'.split('-'); const formattedDate = `${day}.${month}.${year}`; Так значение останется календарной датой и не будет изменено из-за часового пояса. Также стоит учитывать, что Date.parse() не выбрасывает исключение при невозможности распознать дату: const result = Date.parse( 'invalid-date' ); console.log(result); Результат: NaN. Поэтому такие значения необходимо проверять: const timestamp = Date.parse(value); if (Number.isNaN(timestamp)) { throw new Error( 'Invalid date' ); } Основная проблема при работе с датами в JavaScript связана не с самим Date.parse(). Проблемы появляются, когда смешиваются разные типы данных: календарные даты, локальное время и конкретные моменты времени. 🔥 Перед использованием Date важно определить, что именно хранится в данных: дата, время события или значение, которое зависит от часового пояса. Только после этого стоит выбирать способ представления и обработки. 📣 Code Ready | #практика
1 114
10
Пачку офферов заказывали? О всех трудоустройствах через ИИ-ассистента Софи ребята узнают от пользователей. И какой же кайф, к
Пачку офферов заказывали? О всех трудоустройствах через ИИ-ассистента Софи ребята узнают от пользователей. И какой же кайф, когда они делятся своими историями. Вот так в чате узнали сразу о трех новых офферах: • Кейс Сергея - 2 недели в Софи и 2 оффера. • Кейс Елены - 1 неделя в Софи и оффер спустя 10 лет перерыва в работе. Елене 52 года. • Кейс Юлии - 1 месяц в Софи, свитчер из финансового аналитика в разработчика SQL. И еще один оффер🎉 Искренние поздравления ребятам и удачи им на новой работе! В следующий раз доступ в Софи откроется уже 21 июля. Если хочешь получить 3 дня бесплатного доступа - подписывайся на этот канал, все анонсы будут там.
1 031
11
🤔 HTML5Book — большой учебник по HTML, CSS и JavaScript! На сайте собрана большая база материалов по веб-разработке: подробн
🤔 HTML5Book — большой учебник по HTML, CSS и JavaScript! На сайте собрана большая база материалов по веб-разработке: подробные уроки по HTML5, CSS3, JavaScript и jQuery, а также удобные справочники по HTML- и CSS-свойствам. Здесь можно найти разбор тегов, форм, анимаций, Flexbox, Grid, DOM и других ключевых технологий фронтенда. Большое количество практических примеров, готовых решений и UI-эффектов для интерфейсов. 📌 Оставляю ссылочку: html5book.ru 📣 Code Ready | #сайт
1 333
12
CSS-вычисления теперь работают с auto и max-content! Многие знают calc(), но он не умеет вычислять auto, max-content, fit-con
CSS-вычисления теперь работают с auto и max-content! Многие знают calc(), но он не умеет вычислять auto, max-content, fit-content и min-content. Например, так написать нельзя: .panel { width: calc(max-content + 2rem); } Такое значение считается невалидным. Для этого появился calc-size(). .panel { width: calc-size(max-content, size + 2rem); } Теперь браузер сначала вычисляет max-content, а затем прибавляет к нему 2rem. Это работает и с другими размерами, зависящими от содержимого. .panel { height: calc-size(auto, size + 1rem); } Полезно, когда элемент должен сохранить естественный размер содержимого, но при этом стать немного больше без JS. 🔥 calc-size() позволяет выполнять вычисления с auto, max-content и fit-content — то, чего обычный calc() делать не умеет. 📣 Code Ready | #совет
1 392
13
1000+ свежих IT-вакансий каждый месяц в одном месте 🤘 Пока другие листают hh — мы ищем вакансии по всему рынку: каналы, сайт
1000+ свежих IT-вакансий каждый месяц в одном месте 🤘 Пока другие листают hh — мы ищем вакансии по всему рынку: каналы, сайты компаний, стартапы и закрытые источники. IT Россия IT СНГ Стажировки Digital Международка Удалёнка Python Бигтех Дизайн QA Джунам Frontend Аналитика Стартапы за рубежом DevOps Не с HH Автоотклики
1 358
14
👩‍💻 Отображаем математические формулы с помощью тега
👩‍💻 Отображаем математические формулы с помощью тега <math>! Тег <math> используется для встраивания математических выражений на веб-страницу с помощью языка MathML. Он позволяет отображать дроби, степени, корни, индексы, матрицы и другие математические конструкции без изображений. Кроме глобальных атрибутов, <math> поддерживает: • display="inline" — формула отображается внутри строки (по умолчанию). • display="block" — формула выводится отдельным блочным элементом. • alttext — альтернативное текстовое описание формулы. Все теги MathML чувствительны к регистру: используйте строго строчные (<msup>, а не <MSUP>). Для лучшего внешнего вида можно подключать стили к формуле, но аккуратно, некоторые свойства не работают 📣 Code Ready | #атрибут
1 387
15
Node.replaceWith() — замена DOM-элемента без пересборки HTML! Когда нужно заменить элемент на странице, часто используют innerHTML, outerHTML или удаляют старый узел, а потом создают новый. В небольших интерфейсах разницы почти не видно, но внутри браузера это разные операции. Если вы работаете с динамическими интерфейсами, где есть состояние элементов и обработчики событий, такие детали становятся важными. Например: const oldElement = document.querySelector('.message'); oldElement.outerHTML = ` <div class="success"> Saved </div> `; Выглядит просто: старый элемент заменили новым. Но браузер получает строку HTML, разбирает её и создаёт новый DOM-узел. Старый элемент исчезает из DOM, а на его месте появляется другой объект. Если где-то была сохранена ссылка на старый элемент или на нём были обработчики событий, они не перейдут автоматически. Для браузера это уже другой DOM-объект. Для замены конкретного узла есть более подходящий метод: const oldElement = document.querySelector('.message'); const newElement = document.createElement('div'); newElement.textContent = 'Saved'; oldElement.replaceWith(newElement); replaceWith() работает непосредственно с DOM-узлами. Браузеру не нужно заново парсить HTML-строку — он получает готовый элемент и заменяет только нужное место в DOM-дереве. Это удобно, когда вокруг элемента есть другая разметка, которую не нужно трогать. Например: const button = document.querySelector('.button'); const loader = document.createElement('span'); loader.textContent = 'Loading...'; button.replaceWith(loader); Меняется только button. Родительский элемент, соседние узлы и остальная структура страницы остаются без изменений. Разница хорошо заметна, если сравнить с innerHTML. Например: const container = document.querySelector('.container'); container.innerHTML = ` <div class="card"> New content </div> `; Здесь браузер заново создаёт содержимое контейнера из строки. Даже если часть элементов выглядит так же, это могут быть уже новые DOM-объекты. Например: const input = document.querySelector('.search'); input.value = 'frontend'; container.innerHTML += ` <div> New block </div> `; Если input находится внутри container, старый элемент будет пересоздан вместе с содержимым. Можно потерять значение поля, обработчики событий и ссылки на старые DOM-объекты. Именно поэтому innerHTML += часто становится причиной багов. replaceWith() такого поведения не создаёт, потому что меняет только указанный узел. Например: const title = document.querySelector('.title'); const newTitle = document.createElement('h2'); newTitle.textContent = 'New title'; title.replaceWith(newTitle); Это удобно, когда один элемент интерфейса переходит в другое состояние: загрузка заменяется результатом, временный блок заменяется данными с сервера или один компонент меняется на другой. Но важно учитывать: новый элемент не наследует обработчики старого. Например: const button = document.querySelector('.button'); button.addEventListener('click', handleClick); const newButton = document.createElement('button'); button.replaceWith(newButton); После замены новый button будет другим объектом, поэтому старый обработчик к нему не относится. Если нужно сохранить поведение, обработчик нужно добавить заново: newButton.addEventListener('click', handleClick); Также replaceWith() может принимать несколько узлов: element.replaceWith(title, text, button); Браузер удалит старый элемент и вставит переданные узлы на его место. Причём это могут быть не только элементы, но и текстовые узлы: element.replaceWith('Hello'); 🔥 Подведем итог: replaceWith() удобен для точечной замены DOM-элементов без повторного парсинга HTML и пересоздания всей окружающей структуры. В отличие от innerHTML, он работает напрямую с узлами и даёт больше контроля над изменениями DOM. 📣 Code Ready | #практика
1 282
16
IT мероприятия 🤘 Всё самое интересное для карьеры в IT: митапы, хакатоны, конференции, стажировки и обучение. Подписывайся �
IT мероприятия 🤘 Всё самое интересное для карьеры в IT: митапы, хакатоны, конференции, стажировки и обучение. Подписывайся 🤘 1. Москва 2. Санкт-Петербург 3. Для стажеров и студентов
1 146
17
Крутая статья попалась на Хабре: «HTML Sanitizer API: конец эпохи DOMPurify и XSS-страданий»! В этой статье: • Разбирается, п
Крутая статья попалась на Хабре: «HTML Sanitizer API: конец эпохи DOMPurify и XSS-страданий»! В этой статье: • Разбирается, почему привычные способы защиты от XSS становятся сложнее и какие проблемы есть у старых подходов вроде DOMPurify; • Показывается новый HTML Sanitizer API, который позволяет безопаснее работать с пользовательским HTML прямо на уровне браузера; • Объясняется, как современные веб-разработчики могут упростить код и повысить безопасность приложений. 🔊 Продолжай читать на Habr! 📣 Code Ready | #статья
1 361
18
Проверяем интернет-скорость! Хочешь узнать, насколько быстрый у тебя интернет? Для этого есть готовый пакет speedtest-net, который позволяет получить скорость загрузки, отдачи и пинга. Такой скрипт можно встроить в мониторинг или просто проверить сеть без браузера. Шаг 1 — импортируем: const speedTest = require('speedtest-net'); Шаг 2 — запускаем тест: (async () => { const res = await speedTest({ acceptLicense: true }); })(); Шаг 3 — форматируем и выводим результаты: // Загрузка console.log(`Download: ${(res.download.bandwidth / 125000).toFixed(2)} Mbps`); // Выгрузка console.log(`Upload: ${(res.upload.bandwidth / 125000).toFixed(2)} Mbps`); // Пинг console.log(`Ping: ${res.ping.latency} ms`); 🔥 Теперь у тебя свой speedtest прямо в коде. Можно запускать вручную или добавить в cron для регулярного замера. 📣 Code Ready | #практика
1 466
19
Ищем новичков во фронтенд-разработке и вёрстке сайтов. Поможем добавить в портфолио проект стоимостью 50 000 рублей и получит
Ищем новичков во фронтенд-разработке и вёрстке сайтов. Поможем добавить в портфолио проект стоимостью 50 000 рублей и получить опыт работы с опытными разработчиками. А именно: - Сверстать веб-сайт на HTML + CSS; - Реализовать функционал на JavaScript; - Пощупать фронтенд-фреймворк Angular; - Подключить Backend и загрузить сайт на хостинг. Чтобы в итоге ты своими руками разработал качественный сайт, который не стыдно добавить в портфолио или продать. Такой опыт можно получить на бесплатном практикуме уже завтра с поддержкой от опытных кураторов на каждом этапе. 👉 Приходи на бесплатное обучение 🔥 Набор идёт до 21.07.
1 483
20
👩‍💻 Добавляем подсказки в поля формы с помощью атрибута placeholder! Атрибут, который подсказывает пользователю, что именно
👩‍💻 Добавляем подсказки в поля формы с помощью атрибута placeholder! Атрибут, который подсказывает пользователю, что именно нужно ввести в поле ввода (обычно это пример слова или фразы). А ещё значение атрибута исчезает, как только пользователь начинает вводить текст. Чаще всего используется с: • <input> — для текстовых полей, поиска, email, телефона и других типов ввода; • <textarea> — для подсказок в многострочных полях. Часто из-за дизайнерских решений placeholder используется для замены более семантического элемента метки. Однако это не означает, что текст-заполнитель может заменить <label>, поскольку это создаёт неудобства для пользователей с особыми потребностями. 📣 Code Ready | #атрибут
1 568