Определяем системную тему пользователя!
Современные браузеры умеют определять системные предпочтения пользователя — например, светлую или тёмную тему. Это позволяет интерфейсу автоматически адаптироваться под окружение без лишних настроек.
Проверим текущие настройки:
Реагируем на изменение темы:
И сразу применяем тему при загрузке:
🔥 Такой пример полезен для практики работы с браузерными API, реакцией на системные события и динамическим управлением интерфейсом.
📣 Code Ready | #практика
Современные браузеры умеют определять системные предпочтения пользователя — например, светлую или тёмную тему. Это позволяет интерфейсу автоматически адаптироваться под окружение без лишних настроек.
Проверим текущие настройки:
const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
console.log(isDark ? "🌙 Тёмная тема" : "☀️ Светлая тема");Реагируем на изменение темы:
const mq = window.matchMedia("(prefers-color-scheme: dark)");
mq.addEventListener("change", e => {
document.body.dataset.theme = e.matches ? "dark" : "light";
console.log(`🎨 Тема: ${e.matches ? "dark" : "light"}`);
});И сразу применяем тему при загрузке:
document.body.dataset.theme = isDark ? "dark" : "light";
🔥 Такой пример полезен для практики работы с браузерными API, реакцией на системные события и динамическим управлением интерфейсом.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21👍11🔥10
Все размеры заданы в rem?
Значит, масштабировать дизайн можно одним изменением:
html {
font-size: 62.5%; /* 1rem = 10px при базовых 16px */
}Хочешь увеличить всю страницу на 20% — достаточно поменять одно значение:
html {
font-size: 75%;
}Всё: шрифты, отступы, кнопки, автоматически подстроятся, если их размеры заданы в rem:
h1 {
font-size: 2.4rem; /* 24px при font-size:10px */
}
.button {
padding: 1.2rem 2rem;
}Подходит для дизайн-систем, адаптива и гибкой настройки интерфейса под пользователя.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍11❤10🤝1
Хотите добавить на сайт мини-анимацию заряда без скриптов? Этот приём наглядно показывает, как работают
@keyframes и плавные переходы между цветами.Принцип работы:
• Контейнер батареи создаётся с помощью border и border-radius;
• Внутри него элемент .charge, который заполняется снизу вверх;
• Анимация@keyframesbattery меняет высоту и цвет по мере «зарядки».
Пригодится для лендингов, дашбордов, экранов загрузки или просто визуальных эффектов в UI.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥14❤10🤝3
Методы и объекты File, Blob, FormData и URL, с помощью которых можно получать и читать файлы, создавать собственные, формировать бинарные данные и генерировать временные ссылки. Используется для реализации загрузки, предпросмотра и генерации файлов на клиенте.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥12❤7
Привет! В этом гайде создаём компактное меню, где при клике на кнопку
+ плавно появляются дополнительные действия — микрофон, редактирование и вложение.Ключевые моменты:
• HTML: простая структура — основная кнопка и панель с иконками.
• CSS: плавное раскрытие и минималистичный стиль.
• JS: переключение состояния через класс.openдля открытия и закрытия меню.
Такое меню отлично подойдёт для интерфейсов с быстрыми действиями — заметки, чаты, панель инструментов или мобильные кнопки навигации.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥12🤝7❤5👎2
This media is not supported in your browser
VIEW IN TELEGRAM
VS Code Google Translate — помогает перевести выделенный фрагмент, получить варианты перевода и даже использовать его для именования функций, переменных или комментариев. Особенно удобно, если работаешь с мультиязычными проектами или документацией.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤9🔥7
В этом посте — простой, но полезный приём, который можно внедрить в любой сайт или форму без JavaScript-файлов.
Как работает:
• При первом клике кнопка становится неактивной.
• Больше её нажать нельзя — предотвращает повторную отправку формы.
• Работает без JS-файлов, просто onclick.
Полезно при отправке форм и заказов — меньше багов, меньше повторов, больше контроля!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥38👍16❤11😁3
Определяем, активна ли вкладка!
Когда вкладка не в фокусе, нет смысла выполнять тяжёлые операции — можно приостановить рендер, обновления данных или анимации. Для этого существует событие
Проверим текущую видимость:
Реагируем на изменение состояния вкладки:
Для удобства можно оформить в небольшую утилиту:
Вызываем сразу, чтобы получить текущее состояние при инициализации:
Пример использования:
🔥 Такой подход лежит в основе умного управления активностью приложения — автоматической паузы фоновых процессов, оптимизации real-time обновлений и снижения нагрузки.
📣 Code Ready | #практика
Когда вкладка не в фокусе, нет смысла выполнять тяжёлые операции — можно приостановить рендер, обновления данных или анимации. Для этого существует событие
visibilitychange.Проверим текущую видимость:
console.log(document.visibilityState);
// Обычно "visible" или "hidden"
Реагируем на изменение состояния вкладки:
document.addEventListener("visibilitychange", () => {
if (document.hidden) {
console.log("Вкладка неактивна — ставим процесс на паузу");
stopRendering();
} else {
console.log("Вкладка снова активна — продолжаем работу");
resumeRendering();
}
});Для удобства можно оформить в небольшую утилиту:
function onVisibilityChange(callback) {
const handler = () => callback(!document.hidden);Вызываем сразу, чтобы получить текущее состояние при инициализации:
callback(!document.hidden);
document.addEventListener("visibilitychange", handler);
return () => document.removeEventListener("visibilitychange", handler);
}
Пример использования:
const unsubscribe = onVisibilityChange(isVisible => {
console.log(`Вкладка ${isVisible ? "активна" : "скрыта"}`);
});Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍15❤9
Разбираем Web API, который пришел на смену History API. С его помощью можно программно управлять переходами, историей и состоянием приложения без перезагрузки страницы, перехватывать и обрабатывать навигации и реализовывать нативный SPA-роутинг. Поддержка: Chrome 102+, Edge 102+, Opera 88+; Safari и Firefox — либо отсутствует, либо экспериментальна.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤11🔥11