Вышла интересная статья на Хабре: «TAMA-90: тамагочи из 90-х своими руками на JavaScript»!
В этой статье:
🔊 Продолжайте читать на Habr!
📣 Code Ready | #статья
В этой статье:
• Показывается, как создать современную версию тамагочи на чистом JavaScript без фреймворков и сторонних библиотек;• Разбирается архитектура проекта, работа с Canvas, localStorage, игровой логикой, случайными событиями и мини-играми;• Объясняется, как программно рисовать пиксельных питомцев, организовать сохранения, коллекцию персонажей и систему развития без готовых спрайтов.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🤝7❤5
Тег
<abbr> используется для обозначения аббревиатур и сокращений. Благодаря атрибуту title можно указать их полную расшифровку, которую браузер обычно показывает при наведении курсора.Чаще всего <abbr> используют для:
• технических терминов (HTML, CSS, API);
• названий организаций;
• единиц измерения;
• общепринятых сокращений.
Для максимальной пользы рекомендуется всегда указывать атрибут
title с полной расшифровкой сокращения.Please open Telegram to view this post
VIEW IN TELEGRAM
❤17👍11🤝4🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Здесь разобраны основы создания веб-страниц: структура HTML-документа, теги, семантика, CSS-свойства, блочная модель, позиционирование, формы, адаптивная верстка и работа с реальными макетами. Нужно не просто читать материал, а выполнять задания: сверстать блоки, меню, формы, вкладки и полноценную страницу по макету.
Оставляю ссылочку: GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥8👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Тег
<canvas> добавляет растровый холст на страницу. Этот холст можно использовать для отрисовки 2D- или 3D-графики, анимаций, видео.Он используется для:
• интерактивных графиков и диаграмм;
• анимаций и визуальных эффектов;
• браузерных игр;
• обработки изображений;
• 2D- и 3D-графики через Canvas API и WebGL.
Для работы с холстом обычно получают один из контекстов:
• 2d — обычная двумерная графика;
• webgl — аппаратно ускоренная 3D-графика.
Элементы, нарисованные внутри
<canvas>, не являются отдельными DOM-элементами — браузер воспринимает их как единое изображениеPlease open Telegram to view this post
VIEW IN TELEGRAM
👍17❤10🔥5
🔴 Тестовое собеседование на Frontend-разработчика со старшим разработчиком ex. Сбер
13 августа(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика.
Как это будет:
📂 Даниил Дмитриев, старший разработчик в R-Vision, ex. Сбер, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Даниил будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Даниилу
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot
Реклама.
О рекламодателе.
13 августа(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Frontend-разработчика.
Как это будет:
📂 Даниил Дмитриев, старший разработчик в R-Vision, ex. Сбер, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Даниил будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Даниилу
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Frontend-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_front_bot
Реклама.
О рекламодателе.
❤1
Почему CSS-переменные раньше не анимировались?
Многие пытаются сделать так:
Но обычная CSS-переменная — это просто строка. Браузер не знает, как плавно перейти от
Регистрируем переменную через
Теперь браузер знает тип значения и умеет интерполировать его.
Остаётся использовать переменную как обычно.
И менять её значение.
Теперь поворот происходит плавно без JS.
🔥
📣 Code Ready | #совет
Многие пытаются сделать так:
.box {
transition: --angle .3s;
}Но обычная CSS-переменная — это просто строка. Браузер не знает, как плавно перейти от
0deg к 180deg, поэтому анимация не работает.Регистрируем переменную через
@property.@property --angle {
syntax: "<angle>";
}Теперь браузер знает тип значения и умеет интерполировать его.
Остаётся использовать переменную как обычно.
.box {
transform: rotate(var(--angle));
}И менять её значение.
.box:hover {
--angle: 180deg;
}Теперь поворот происходит плавно без JS.
@property превращает CSS-переменные из обычных строк в типизированные значения, которые можно валидировать и анимировать. Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥9❤7
Крутая статья недавно вышла на Хабре: «Заменяем JavaScript с помощью HTML и CSS»
В этой статье:
🔊 Продолжайте читать на Habr!
📣 Code Ready | #статья
В этой статье:
• использование `:has()` для управления состояниями компонентов;• создание модальных окон и подсказок через Popover API;• валидация форм с помощью встроенных возможностей браузера;• стилизация сложных интерактивных состояний только средствами CSS.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤8🔥6🤝2
Node.normalize(): восстановление нормализованной формы текстовых узлов в DOM!
После операций с
Для рендеринга это обычно не имеет значения:
Но для кода, который анализирует структуру дерева через
Метод
Нормализация выполняется рекурсивно и гарантирует, что в обработанном поддереве: не останется пустых текстовых узлов; не останется соседних текстовых узлов без разделяющего их элемента, комментария или другого типа узла.
При объединении данные последующих
Сохранённая ссылка
Важно и другое:
Здесь текст до и после
Метод особенно полезен после
🔥
📣 Code Ready | #практика
После операций с
Text, Range и точечной модификации DOM содержимое элемента может оказаться фрагментировано на несколько соседних текстовых узлов.const container = document.createElement('div');
const text = document.createTextNode('Hello');
container.append(text);
const tail = text.splitText(2);
console.log([...container.childNodes].map(node => node.data));
// ['He', 'llo']Для рендеринга это обычно не имеет значения:
console.log(container.textContent);
// Hello
Но для кода, который анализирует структуру дерева через
childNodes, firstChild, nextSibling или хранит ссылки на конкретные Text-узлы, такая фрагментация уже существенна.Метод
Node.normalize() приводит всё поддерево узла к нормализованной форме:container.normalize();
console.log(container.childNodes.length);
// 1
console.log(container.firstChild.data);
// Hello
Нормализация выполняется рекурсивно и гарантирует, что в обработанном поддереве: не останется пустых текстовых узлов; не останется соседних текстовых узлов без разделяющего их элемента, комментария или другого типа узла.
При объединении данные последующих
Text-узлов добавляются к первому узлу группы, а сами последующие узлы удаляются из дерева.console.log(tail.parentNode);
// null
Сохранённая ссылка
tail при этом не становится невалидной: объект продолжает существовать, но больше не является частью DOM-дерева.Важно и другое:
normalize() не объединяет весь текст элемента в один узел, если между текстовыми узлами находятся другие узлы.<p>Hello <strong>DOM</strong>!</p>
Здесь текст до и после
<strong> останется в разных Text-узлах и после нормализации.Метод особенно полезен после
splitText(), операций с Range и редакторских сценариев, где текстовые узлы регулярно разрезаются и склеиваются:const paragraph = document.createElement('p');
const text = document.createTextNode('Hello world');
paragraph.replaceChildren(text);
text.splitText(5);
console.log(paragraph.childNodes.length);
// 2
paragraph.normalize();
console.log(paragraph.childNodes.length);
// 1Node.normalize() не меняет текстовое содержимое элемента, но приводит его поддерево к нормализованной форме: без пустых и соседних текстовых узлов. Это полезно перед обходом DOM, сериализацией, сравнением структуры или выполнением алгоритмов, которые рассчитывают на предсказуемую организацию Text-узлов.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤6👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Блок для вставки на страницу контента в сторонних форматах, которые браузер отображает с помощью плагинов. Чаще всего используется для видео- и аудиоконтента. Отображение вставленного контента будет зависеть от атрибутов тега
<embed>, типа загружаемого контента и плагинов, установленных в браузере.Атрибуты:
• src — ссылка на загружаемый контент;
• type — тип загружаемого контента в формате MIME. Тип указывать не обязательно, но желательно. Так браузер будет точно знать, какой плагин использовать для отображения контента;
• width — ширина в пикселях;
• height — высота в пикселях.
<embed> не заменяет универсальное решение для всех типов контента. Например, для видео лучше использовать <video>, для аудио — <audio>, а для документов чаще применяют <iframe>.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5🤝5❤2
Код, микросервисы и LLM: чему можно научиться на онлайн-магистратуре
Завершается прием на магистратуру ИТМО в партнерстве с Яндексом «Фронтенд-, бэкенд-разработка и ИИ-решения». В программе:
• 9 треков: 4 базовых (JS, Python, Java, C++) и 5 продвинутых – с асинхронностью, микросервисами, высоконагруженными системами, Kafka, C++/Boost, NestJS и Spring Boot.
• Практика на реальных задачах партнеров программы и сервисов Яндекса, а также возможность работать над собственным проектом. В портфолио будет больше десятка кейсов.
• На всех треках: автоматизация задач разработчика с помощью ИИ (код, дебаггинг, тесты, документация и промпт-инжиниринг)
• Отдельный трек «ИИ-решения в разработке» – LLM-системы, RAG-пайплайны, мультиагентные сети, создание AI-систем и внедрение AI-компонентов в продакшен.
Обучение длится два года и полностью проходит онлайн: лекции идут по вечерам, нагрузку можно заранее планировать. А выпускники получают диплом магистра ИТМО и диплом о профпереподготовке от Яндекса.
Подать заявление можно онлайн. Поступление по рекомендательному письму для выпускников Практикума или через вступительные экзамены.
Подробнее о программах и поступлении
Завершается прием на магистратуру ИТМО в партнерстве с Яндексом «Фронтенд-, бэкенд-разработка и ИИ-решения». В программе:
• 9 треков: 4 базовых (JS, Python, Java, C++) и 5 продвинутых – с асинхронностью, микросервисами, высоконагруженными системами, Kafka, C++/Boost, NestJS и Spring Boot.
• Практика на реальных задачах партнеров программы и сервисов Яндекса, а также возможность работать над собственным проектом. В портфолио будет больше десятка кейсов.
• На всех треках: автоматизация задач разработчика с помощью ИИ (код, дебаггинг, тесты, документация и промпт-инжиниринг)
• Отдельный трек «ИИ-решения в разработке» – LLM-системы, RAG-пайплайны, мультиагентные сети, создание AI-систем и внедрение AI-компонентов в продакшен.
Обучение длится два года и полностью проходит онлайн: лекции идут по вечерам, нагрузку можно заранее планировать. А выпускники получают диплом магистра ИТМО и диплом о профпереподготовке от Яндекса.
Подать заявление можно онлайн. Поступление по рекомендательному письму для выпускников Практикума или через вступительные экзамены.
Подробнее о программах и поступлении
Проверяй возможности браузера прямо в CSS!
Многие делают такие проверки через JavaScript:
Но CSS уже давно умеет сам проверять поддержку возможностей.
Это особенно полезно при постепенном внедрении новых CSS API.
Например, можно безопасно добавить современные возможности:
Старые браузеры просто проигнорируют этот блок.
Для больших проектов это позволяет мигрировать постепенно.
🔥
📣 Code Ready | #совет
Многие делают такие проверки через JavaScript:
if ("container" in document.documentElement.style) {
// включаем новую логику
}Но CSS уже давно умеет сам проверять поддержку возможностей.
@supports (display: grid) {
.layout {
display: grid;
}
}Это особенно полезно при постепенном внедрении новых CSS API.
Например, можно безопасно добавить современные возможности:
@supports (interpolate-size: allow-keywords) {
.accordion {
interpolate-size: allow-keywords;
}
}Старые браузеры просто проигнорируют этот блок.
Для больших проектов это позволяет мигрировать постепенно.
@supports not (selector(:has(*))) {
/* fallback */
}@supports позволяет внедрять новые CSS-возможности без JS-проверок и не ломать поддержку старых браузеров.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍8❤4🤝1