Как избавиться от подмен в типографике?
Когда кастомный шрифт не успевает загрузиться, браузер подставляет свой стандартный
Но ещё хуже, когда
Современный CSS даёт более аккуратный и предсказуемый вариант, используй
🔥 Так даже если кастомный шрифт не загрузился, пользователь увидит чистую системную типографику - ту же, что в интерфейсе его устройства.
📣 Code Ready | #совет
Когда кастомный шрифт не успевает загрузиться, браузер подставляет свой стандартный
generic sans-serif. Это может испортить вид интерфейса: body {
font-family: "PT Sans", sans-serif;
}Но ещё хуже, когда
fallback вообще не задан, тогда интерфейс может внезапно превратиться в дефолтный serif (на Windows это часто Times New Roman):body {
font-family: "PT Sans";
}Современный CSS даёт более аккуратный и предсказуемый вариант, используй
system-ui, чтобы браузер подставил нативный системный шрифт ОС:body {
font-family: "PT Sans", system-ui;
}Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27❤11👍10
Отменяем старые fetch-запросы — оставляем только актуальные данные!
В поиске, автокомплите и живых фильтрах ответы от сервера могут приходить не по порядку, из-за чего показывается не самый свежий результат. Один из простых и надёжных способов избежать этого — отменять предыдущий запрос через
Проверяем поддержку:
Делаем контроллер и отправляем запрос:
Используем при вводе:
🔥 Такой приём устраняет гонки запросов, экономит сеть и гарантирует, что отображаются только последние данные — критично для поисковых полей и
📣 Code Ready | #практика
В поиске, автокомплите и живых фильтрах ответы от сервера могут приходить не по порядку, из-за чего показывается не самый свежий результат. Один из простых и надёжных способов избежать этого — отменять предыдущий запрос через
AbortController.Проверяем поддержку:
console.log("AbortController" in window);Делаем контроллер и отправляем запрос:
let controller;
function load(url) {
if (controller) controller.abort();
controller = new AbortController();
return fetch(url, { signal: controller.signal });
}
Используем при вводе:
field.addEventListener("input", () => {
load("/api/search?q=" + field.value)
.then(r => r.json())
.then(data => console.log("Актуальный ответ:", data))
.catch(e => e.name === "AbortError" || console.error(e));
});real-time UI.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👍11🤝8❤1👎1
Привет! В этом гайде создаём компактную панель поиска, которая фильтрует элементы списка по мере ввода.
Ключевые моменты:
• HTML: контейнер, поле ввода и список элементов для фильтрации.
• CSS: стеклянный эффект, аккуратные тени и анимированное скрытие элементов.
• JS: обработка ввода, сравнение подстрок и переключение видимости элементов через класс hide.
Такой компонент отлично подходит для каталогов, списков технологий, фильтров настроек, интерфейсов выбора и любых UI, где требуется быстрый интерактивный поиск.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31❤15🔥13🤝6
This media is not supported in your browser
VIEW IN TELEGRAM
REST Client - расширение, которое превращает редактор в удобный инструмент для работы с HTTP-запросами. Можно тут же получать ответ от сервера. Плагин поддерживает переменные и окружения, так что можно хранить токены, URL или параметры для разных проектов и легко подставлять их в запросы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥8👍7😁2
В этой фишке используется всего один псевдо-элемент, который проходит по надписи и создаёт впечатление “сканирования” — без JS.
Как работает:
• ::before становится движущейся полосой, перекрывающей текст;
• mix-blend-mode: difference инвертирует цвет и создаёт яркий акцент;
• keyframes slide задаёт траекторию движения от края до края.
Приём отлично подходит для лоадеров, hero-титров, UI-сигналов и любых сценариев, где нужно живое, цепляющее движение.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥10❤9🤝4
Нативная проверка, находится ли элемент в зоне видимости!
Когда нужно показать подсказку только если элемент действительно в зоне просмотра, подсветить активный пункт меню, автоплейнуть видео или зафиксировать секцию — можно использовать нативный
Проверяем частичную вертикальную видимость элемента в зоне просмотра:
Использование:
Наблюдение за видимостью при скролле:
Мини-вариант для группы элементов:
🔥 Подходит для ленивых анимаций, подсветки активных блоков и аналитики скролла. А если нужен более точный и энергоэффективный вариант — используйте
📣 Code Ready | #практика
Когда нужно показать подсказку только если элемент действительно в зоне просмотра, подсветить активный пункт меню, автоплейнуть видео или зафиксировать секцию — можно использовать нативный
getBoundingClientRect().Проверяем частичную вертикальную видимость элемента в зоне просмотра:
function isVisible(el) {
const r = el.getBoundingClientRect();
return r.top < window.innerHeight && r.bottom > 0;
}Использование:
const box = document.querySelector(".box");
console.log("Виден:", isVisible(box));Наблюдение за видимостью при скролле:
window.addEventListener("scroll", () => {
if (isVisible(box)) {
console.log("Элемент в зоне просмотра");
}
});Мини-вариант для группы элементов:
document.querySelectorAll(".item").forEach(el => {
if (isVisible(el)) {
el.classList.add("active");
}
});IntersectionObserver.Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍12🔥11
currentColor — ключевое слово, которое берёт текущий color элемента и позволяет использовать его в других свойствах, например в рамке, тени или заливке.Примеры использования:
• border: 2px solid currentColor; — рамка того же цвета, что и текст;
• box-shadow: 0 0 10px currentColor; — тень с цветом текста;
• fill: currentColor; — окрашивает SVG в цвет шрифта;
• outline-color: currentColor; — обводка совпадает с текстом.
Это полезно для упрощения стилей: если изменить
color, все зависящие элементы автоматически обновят свой цвет.Please open Telegram to view this post
VIEW IN TELEGRAM
🤝18👍11🔥8❤2
На мобильных
100vh считает и адресную строку, поэтому блок получается выше видимой области, появляется лишний скролл:.hero {
min-height: 100vh;
}Современные браузеры дают точную единицу измерения —
dvh:.hero {
min-height: 100dvh;
}vh, 100dvh учитывает реальную доступную высоту без вмешательства UI браузера. Поддержка уже широкая, а где нужно, можно оставить vh как fallback.Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥11❤9🤝2😁1
Шпаргалка по браузерным API, которые помогают получать размеры, координаты и полные измерения контента, а также анализировать итоговые CSS-стили. Включает инструменты для управления анимациями через requestAnimationFrame. Подходит для задач, связанных с позиционированием, динамической версткой, оптимизацией анимаций и отладкой поведения элементов в интерфейсе.Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥9❤6🤝2
Например,
git push отправляет твои изменения на сервер, а git checkout позволяет быстро переключаться между ветками.На картинке — 12 самых нужных команд, которые стоит держать под рукой.
Сохрани, чтобы не забыть!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤12👍9🤝1