This media is not supported in your browser
VIEW IN TELEGRAM
Большинство CSS-переходов плавные, но display переключается мгновенно. allow-discrete делает так, что элемент еще немного остается видимым, чтобы анимация выхода выглядела гладко, и только потом уходит в display: none.
Ключевое слово allow-discrete применяет тайминги transition к дискретным свойствам. Для exit-анимаций элемент остается видимым, проигрывает переход, а затем переключается в display: none уже после завершения transition.
Подробнее на MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/transition-behavior
Свойство overlay управляет тем, остается ли диалог в top layer во время перехода. Без него диалог сразу “провалится” назад, за другой контент.
MDN: https://developer.mozilla.org/en-US/docs/Glossary/Top_layer
CSS-сниппет:
И:
@WebDev_Plus
Ключевое слово allow-discrete применяет тайминги transition к дискретным свойствам. Для exit-анимаций элемент остается видимым, проигрывает переход, а затем переключается в display: none уже после завершения transition.
Подробнее на MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/transition-behavior
Свойство overlay управляет тем, остается ли диалог в top layer во время перехода. Без него диалог сразу “провалится” назад, за другой контент.
MDN: https://developer.mozilla.org/en-US/docs/Glossary/Top_layer
CSS-сниппет:
dialog {
opacity: 1;
scale: 1;
transition:
opacity 0.2s ease-out,
scale 0.2s ease-out,
overlay 0.2s ease-out allow-discrete,
display 0.2s ease-out allow-discrete;
@starting-style {
opacity: 0;
scale: 0.95;
}
}И:
dialog::backdrop {
background-color: rgb(0 0 0 / 0.5);
transition:
background-color 0.2s ease-out,
overlay 0.2s ease-out allow-discrete,
display 0.2s ease-out allow-discrete;
@starting-style {
background-color: rgb(0 0 0 / 0);
}
}@WebDev_Plus
❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Не допускайте появления растянутых изображений на вашем сайте.
Это выглядит ужасно! И это легко исправить с помощью одной строки CSS
@WebDev_Plus
Это выглядит ужасно! И это легко исправить с помощью одной строки CSS
@WebDev_Plus
Запускает GitHub Actions локально в VS Code.
https://github.com/SanjulaGanepola/github-local-actions/
@WebDev_Plus
https://github.com/SanjulaGanepola/github-local-actions/
@WebDev_Plus
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Делись своим localhost с кем угодно за секунды
через URL, доступный по всему миру, с HTTPS
Это альтернатива ngrok. Без регистрации и бесплатно
@WebDev_Plus
через URL, доступный по всему миру, с HTTPS
$ brew install cloudflared
$ cloudflared tunnel --url <твой-локальный-домен>
Это альтернатива ngrok. Без регистрации и бесплатно
@WebDev_Plus
🔥5❤🔥2❤1👍1
Ну всё, ребята. Этот день настал 😱
Popover на чистом CSS (элемент popover + анимации + привязка к якорю) теперь стабильно работает во всех базовых браузерах.
И да, конечно, он уже доступен в CSS-Zero.
Репозиторий:
http://github.com/lazaronixon/css-zero
Демо:
https://csszero.lazaronixon.com/lookbook/inspect/popover/default
@WebDev_Plus
Popover на чистом CSS (элемент popover + анимации + привязка к якорю) теперь стабильно работает во всех базовых браузерах.
И да, конечно, он уже доступен в CSS-Zero.
Репозиторий:
http://github.com/lazaronixon/css-zero
Демо:
https://csszero.lazaronixon.com/lookbook/inspect/popover/default
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
This media is not supported in your browser
VIEW IN TELEGRAM
В следующем обновлении языковых инструментов Vue выкатывают совершенно новую фичу Rich Hover Message.
Наводишь курсор на любой Vue-компонент и сразу видишь аккуратно отформатированные Props и Slots, все генерируется автоматически.
Сделано, чтобы прокачать DX на новый уровень. Подробности скоро, следите за обновлениями.
@WebDev_Plus
Наводишь курсор на любой Vue-компонент и сразу видишь аккуратно отформатированные Props и Slots, все генерируется автоматически.
Сделано, чтобы прокачать DX на новый уровень. Подробности скоро, следите за обновлениями.
@WebDev_Plus
❤1
CSS-совет:
Используй svh, чтобы мобильная адресная строка не перекрывала интерфейс. Эта единица гарантирует, что layout всегда помещается в реально видимую область экрана.
@WebDev_Plus
Используй svh, чтобы мобильная адресная строка не перекрывала интерфейс. Эта единица гарантирует, что layout всегда помещается в реально видимую область экрана.
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Этот эффект на CSS и JavaScript просто огонь.
Подсвечивает область, по которой проходит курсор. Очень трендовый приём в дизайне.
Исходный код и демо здесь
@WebDev_Plus
Подсвечивает область, по которой проходит курсор. Очень трендовый приём в дизайне.
Исходный код и демо здесь
@WebDev_Plus
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Прокачай любой UI красивыми анимированными фонами 🦄
Это open-source коллекция готовых компонентов анимированных фонов, которые можно сразу закидывать в проекты. Всё сделано на Tailwind CSS и JSX, поэтому они без боли встраиваются в современные React и Next.js воркфлоу.
Можно посмотреть список компонентов, превью анимаций и сразу залезть в исходники, чтобы кастомизировать под себя или переиспользовать в своих приложениях :)
github.com/Netmods/Drapes-ui
@WebDev_Plus
Это open-source коллекция готовых компонентов анимированных фонов, которые можно сразу закидывать в проекты. Всё сделано на Tailwind CSS и JSX, поэтому они без боли встраиваются в современные React и Next.js воркфлоу.
Можно посмотреть список компонентов, превью анимаций и сразу залезть в исходники, чтобы кастомизировать под себя или переиспользовать в своих приложениях :)
github.com/Netmods/Drapes-ui
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
В open source выходит jax-js - библиотека машинного обучения для веба, полностью на чистом JavaScript.
jax-js — первый ML-компилятор, который работает прямо в браузере и генерирует быстрые WebGPU-ядра. Проект написан с нуля за последний год как личный сайд-проект.
Подробности: https://ekzhang.substack.com/p/jax-js-an-ml-library-for-the-web
Python и JavaScript - самые популярные языки в мире.
Python нужен для ML,
JavaScript — нативный язык веба.
Проект пока на ранней стадии, но jax-js задумывается как по-настоящему «реальная ML-библиотека» для веба: с JIT-фьюжном ядер под WebGPU и полноценным API, а не просто рантайм.
@WebDev_Plus
jax-js — первый ML-компилятор, который работает прямо в браузере и генерирует быстрые WebGPU-ядра. Проект написан с нуля за последний год как личный сайд-проект.
Подробности: https://ekzhang.substack.com/p/jax-js-an-ml-library-for-the-web
Python и JavaScript - самые популярные языки в мире.
Python нужен для ML,
JavaScript — нативный язык веба.
Проект пока на ранней стадии, но jax-js задумывается как по-настоящему «реальная ML-библиотека» для веба: с JIT-фьюжном ядер под WebGPU и полноценным API, а не просто рантайм.
@WebDev_Plus
❤3
API шаблонов URL теперь доступен!
С его помощью можно сопоставлять URL и извлекать из них части, не изобретая собственную логику роутинга. Поддерживаются литералы, подстановки, именованные группы и даже ограничения на основе регулярных выражений.
Как это работает
@WebDev_Plus
С его помощью можно сопоставлять URL и извлекать из них части, не изобретая собственную логику роутинга. Поддерживаются литералы, подстановки, именованные группы и даже ограничения на основе регулярных выражений.
Как это работает
@WebDev_Plus
Программа для скачивания видео с более чем 1000 веб-сайтов на базе yt-dlp
https://github.com/nexmoe/VidBee/
@WebDev_Plus
https://github.com/nexmoe/VidBee/
@WebDev_Plus
👍1
Разделители в хлебных крошках должны быть в CSS, а не в HTML. Просто используйте псевдоэлемент
Селектор
Разметка при этом остается аккуратной и чистой:
Нужны другие разделители? Просто меняете
Для иконок вместо текста можно использовать фоновое изображение:
Этот подход универсальный и подходит для любых горизонтальных списков с разделителями: хлебные крошки, списки тегов, инлайн-метаданные.
@WebDev_Plus
::after.nav > ol > li:not(:last-child)::after {
content: " / ";
color: lightgray;
padding: 0 0.5em;
}Селектор
:not(:last-child) гарантирует, что после последнего элемента разделитель не появится.Разметка при этом остается аккуратной и чистой:
<nav>
<ol>
<li><a href="/">Home</a></li>
<li><a href="/products">Products</a></li>
</ol>
</nav>
Нужны другие разделители? Просто меняете
content:/* Шеврон */
li:not(:last-child)::after {
content: " › ";
}
/* Стрелка */
li:not(:last-child)::after {
content: " → ";
}
/* Вертикальная черта */
li:not(:last-child)::after {
content: " | ";
}
Для иконок вместо текста можно использовать фоновое изображение:
li:not(:last-child)::after {
content: "";
width: 1em;
height: 1em;
background: url("data:image/svg+xml,...") center / contain no-repeat;
}Этот подход универсальный и подходит для любых горизонтальных списков с разделителями: хлебные крошки, списки тегов, инлайн-метаданные.
@WebDev_Plus
👍8
This media is not supported in your browser
VIEW IN TELEGRAM
ИЗИ способ переключить сайт в тёмный режим.
Используется анимация через View Transitions.
Всего 2 строки на JavaScript и немного CSS: https://theme-toggle.rdsx.dev/
@WebDev_Plus
Используется анимация через View Transitions.
Всего 2 строки на JavaScript и немного CSS: https://theme-toggle.rdsx.dev/
@WebDev_Plus
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
Мега-новинка в CSS
Теперь можно делать анимации появления и исчезновения элементов.
Знакомься с новым правилом starting-style.
@WebDev_Plus
Теперь можно делать анимации появления и исчезновения элементов.
Знакомься с новым правилом starting-style.
@WebDev_Plus
This media is not supported in your browser
VIEW IN TELEGRAM
Хочешь легко загружать файлы на сайт?
Эта JavaScript-библиотека как раз для этого.
✓ Минимальная настройка
✓ Аккуратные и настраиваемые CSS-стили
✓ Совместима с React, Vue, Angular и jQuery
Установка →
@WebDev_Plus
Эта JavaScript-библиотека как раз для этого.
✓ Минимальная настройка
✓ Аккуратные и настраиваемые CSS-стили
✓ Совместима с React, Vue, Angular и jQuery
Установка →
npm i filepond@WebDev_Plus
👍1
Плавно “затухай” текст или картинки.
Одной строкой CSS, без лишних HTML-элементов...
Просто используй mask-image
@WebDev_Plus
Одной строкой CSS, без лишних HTML-элементов...
Просто используй mask-image
@WebDev_Plus
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Искусственная задержка записи, например при отправке формы, может дать пользователю больше уверенности, что изменения действительно применились.
В high-frequency приложениях вроде Linear это начинает раздражать, но для редких действий, типа отправки контактной формы, такой подход ощущается лучше, чем оптимистичное обновление.
Можно использовать Promise.all, чтобы запускать мутацию и задержку параллельно. Тогда пользователь ждет только то, что дольше, а не сумму задержки и времени запроса.
@WebDev_Plus
В high-frequency приложениях вроде Linear это начинает раздражать, но для редких действий, типа отправки контактной формы, такой подход ощущается лучше, чем оптимистичное обновление.
Можно использовать Promise.all, чтобы запускать мутацию и задержку параллельно. Тогда пользователь ждет только то, что дольше, а не сумму задержки и времени запроса.
// A minimum duration of `800ms`
const delay = new Promise((r) => setTimeout(r, 800));
await Promise.all([promise, delay]);
@WebDev_Plus
❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Покажи календарь на сайте или в приложении без лишнего гемора.
Называется Cally, и он годный:
✓ Мультиязычный
✓ Весит всего 9 KB
✓ Кастомизируется через CSS
✓ Работает с React, Angular, Vue и т.д.
→
@WebDev_Plus
Называется Cally, и он годный:
✓ Мультиязычный
✓ Весит всего 9 KB
✓ Кастомизируется через CSS
✓ Работает с React, Angular, Vue и т.д.
→
npm install cally@WebDev_Plus