This media is not supported in your browser
VIEW IN TELEGRAM
#ссылка дня
Да-да, я знаю, знаю, что любить иконочные шрифты нынче не в моде, а в моде дико заморачиваться с SVG, символами...
Но вот типографика же не стоит на месте. Вариативные шрифты — уже реальность. Было бы глупо не применить их для иконок.
И таки да, встречайте, Material Symbols: https://material.io/blog/introducing-symbols
Вариативный иконочный шрифт от Google. Естественно, он есть на Google Fonts: https://fonts.google.com/icons
Естественно, вы можете скачать SVG и PNG.
Ну и куда же без плагина для Figma: https://www.figma.com/community/plugin/1088610476491668236/Material-Symbols, позволяющего настроить и экспортировать иконки как душе угодно.
Меня, правда, забавляет целый ползунок на fill, если вы понимаете, о чём я. Вообще, с ползунками на Google Fonts всё очень плохо... но речь не о них.
К слову, nice touch: там присутствуют специальные символы для iOS, они вариативности не подвластны. Забавный жест.
#fonts #icons #google #material
Да-да, я знаю, знаю, что любить иконочные шрифты нынче не в моде, а в моде дико заморачиваться с SVG, символами...
Но вот типографика же не стоит на месте. Вариативные шрифты — уже реальность. Было бы глупо не применить их для иконок.
И таки да, встречайте, Material Symbols: https://material.io/blog/introducing-symbols
Вариативный иконочный шрифт от Google. Естественно, он есть на Google Fonts: https://fonts.google.com/icons
Естественно, вы можете скачать SVG и PNG.
Ну и куда же без плагина для Figma: https://www.figma.com/community/plugin/1088610476491668236/Material-Symbols, позволяющего настроить и экспортировать иконки как душе угодно.
Меня, правда, забавляет целый ползунок на fill, если вы понимаете, о чём я. Вообще, с ползунками на Google Fonts всё очень плохо... но речь не о них.
К слову, nice touch: там присутствуют специальные символы для iOS, они вариативности не подвластны. Забавный жест.
#fonts #icons #google #material
🔥14👍4👎1
#заметка дня
Если вы делаете тестовое и вариантах приёмки сказано: «Архив или ссылка на репозиторий» всегда делайте репозиторий.
Оценивающему всё равно, сколько было потрачено времени. А вот процесс — интересен. Прислав архив вы сразу получаете мнимый минус. Его же надо распаковать, открыть в редакторе…
В репозитории на гитхабе достаточно нажать точку.
Ну и, очевидно, не пихайте всё одним коммитом.
Ну и читайте мою копию треда про собеседования, конечно: https://t.iss.one/htmlshit/1326
Не ссыте, котаны. Рассылайте резюме и ищите работу мечты.
Тока с умом.
#work
Если вы делаете тестовое и вариантах приёмки сказано: «Архив или ссылка на репозиторий» всегда делайте репозиторий.
Оценивающему всё равно, сколько было потрачено времени. А вот процесс — интересен. Прислав архив вы сразу получаете мнимый минус. Его же надо распаковать, открыть в редакторе…
В репозитории на гитхабе достаточно нажать точку.
Ну и, очевидно, не пихайте всё одним коммитом.
Ну и читайте мою копию треда про собеседования, конечно: https://t.iss.one/htmlshit/1326
Не ссыте, котаны. Рассылайте резюме и ищите работу мечты.
Тока с умом.
#work
❤16👍6👎1
#такое дня
Что-то меня задело сегодня высказывание, что я тут мало по вёрстке выкладываю.
По-моему, я тут только про вёрстку и выкладываю. И лично мне хотелось бы больше хардкора и историй за жизнь.
Но ок, завтра будет хардкор по вёрстке. Всё и сразу. Надо немного подготовиться только. Держитесь там.
Ну и как всегда — делитесь, что хотели бы увидеть.
#css #js #geometry
Что-то меня задело сегодня высказывание, что я тут мало по вёрстке выкладываю.
По-моему, я тут только про вёрстку и выкладываю. И лично мне хотелось бы больше хардкора и историй за жизнь.
Но ок, завтра будет хардкор по вёрстке. Всё и сразу. Надо немного подготовиться только. Держитесь там.
Ну и как всегда — делитесь, что хотели бы увидеть.
#css #js #geometry
❤13👍8❤🔥2😱2
#заметка дня
Что-то мы совсем забыли про полезные кусочки кода.
Например, как сделать красивую градиентную тень?
Да очень просто! Как и всегда, ответ на этот вопрос – псевдоэлемент. Поместили, подвинули, размыли. Готово.
Вот даже живой пример: https://codepen.io/argyleink/pen/WNxeBKa
Похоже на Philips Ambilight, не правда ли?
Добавляйте в ваши коллекции, но лучше – запоминайте принцип.
#css #gradient #shadow
Что-то мы совсем забыли про полезные кусочки кода.
Например, как сделать красивую градиентную тень?
Да очень просто! Как и всегда, ответ на этот вопрос – псевдоэлемент. Поместили, подвинули, размыли. Готово.
Вот даже живой пример: https://codepen.io/argyleink/pen/WNxeBKa
Похоже на Philips Ambilight, не правда ли?
Добавляйте в ваши коллекции, но лучше – запоминайте принцип.
#css #gradient #shadow
👍25👎1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
#заметка дня и #codepen
Лет шесть назад поступил мне заказ от агентства, работающего на некий автозавод. Они хотели «разрезать» машину под углом, представив её в двух ипостасях: для отдыха и для работы.
К сожалению, набор браузеров не позволял просто взять clip-path. Поэтому я даже немного завидую людям, который вошли в мир промо-сайтов в последние пару-тройку лет.
Что же пришлось делать? Немного геометрии! И забавных визуальных хаков.
Повернуть контейнер, сдвинуть его, чтобы совместить части. А вот внутреннюю часть контейнера — повернуть в обратном направлении и обратно же сдвигать на те же значения.
Где-то у меня даже завалялась бумажка с расчётами… если интересно будет кому — можно восстановить.
Ну и, конечно, с использованием CSS-переменных код стал в два раза меньше только за счёт того, что не пришлось клеить строки стилей.
Десктоп: https://codepen.io/alinaki/pen/MWGMLey?editors=0010
P. S. если вам нужны подобные совмещённые изображения — ищите по запросу macos dynamic wallpaper.
#css #geometry
Лет шесть назад поступил мне заказ от агентства, работающего на некий автозавод. Они хотели «разрезать» машину под углом, представив её в двух ипостасях: для отдыха и для работы.
К сожалению, набор браузеров не позволял просто взять clip-path. Поэтому я даже немного завидую людям, который вошли в мир промо-сайтов в последние пару-тройку лет.
Что же пришлось делать? Немного геометрии! И забавных визуальных хаков.
Повернуть контейнер, сдвинуть его, чтобы совместить части. А вот внутреннюю часть контейнера — повернуть в обратном направлении и обратно же сдвигать на те же значения.
Где-то у меня даже завалялась бумажка с расчётами… если интересно будет кому — можно восстановить.
Ну и, конечно, с использованием CSS-переменных код стал в два раза меньше только за счёт того, что не пришлось клеить строки стилей.
Десктоп: https://codepen.io/alinaki/pen/MWGMLey?editors=0010
P. S. если вам нужны подобные совмещённые изображения — ищите по запросу macos dynamic wallpaper.
#css #geometry
👍20🔥9
#статья дня
На сайте последней конференции по Next.js многих поразила WebGL-реализация прохождения света через призму. Возможно, не самая физически точная, но от этого не менее потрясающая.
Подобные вещи на промо-сайтах и лендингах определенно точно привлекают внимание не только широкой аудитории «на поиграться», но и разработчиков.
Вот только подробные посты о том, как это делать, выходят довольно редко. Почему-то чаще легче встретить достойное видео от того же Юрия Артюха, чем хорошую статью.
Да даже мой предыдущий пост должен был стать большой статьей… но лень да и формат Телеграма просто не позволяют это сделать.
Поэтому рекомендую обратить пристальное внимание на статью от, собственно, авторов призмы: https://vercel.com/blog/building-an-interactive-webgl-experience-in-next-js
Все шаги, от прототипа и расчетов до оптимизации производительности. Делается все на react-three-fiber. Настоятельно рекомендую пойти и пройти их самостоятельно.
#webgl #react
На сайте последней конференции по Next.js многих поразила WebGL-реализация прохождения света через призму. Возможно, не самая физически точная, но от этого не менее потрясающая.
Подобные вещи на промо-сайтах и лендингах определенно точно привлекают внимание не только широкой аудитории «на поиграться», но и разработчиков.
Вот только подробные посты о том, как это делать, выходят довольно редко. Почему-то чаще легче встретить достойное видео от того же Юрия Артюха, чем хорошую статью.
Да даже мой предыдущий пост должен был стать большой статьей… но лень да и формат Телеграма просто не позволяют это сделать.
Поэтому рекомендую обратить пристальное внимание на статью от, собственно, авторов призмы: https://vercel.com/blog/building-an-interactive-webgl-experience-in-next-js
Все шаги, от прототипа и расчетов до оптимизации производительности. Делается все на react-three-fiber. Настоятельно рекомендую пойти и пройти их самостоятельно.
#webgl #react
👍15
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня
Признавайтесь, кто в TikTok часы проводит за скроллингом ленты?
Но я вообще не за тем пришёл. Меня их прелоадер заинтересовал. Яркий пример режима смешивания цветов со слоями ниже, mix-blend-mode: multiply.
Без него анимация была бы совсем простой: https://codepen.io/frontendcorn/pen/poWZObX
Кстати, прекрасная статья есть с примерами: https://web.dev/learn/css/blend-modes/
А тут разобрана вся их математика: https://www.w3.org/TR/compositing-1/
А тут вся математика разобрана еще более подробно: https://css-tricks.com/taming-blend-modes-difference-and-exclusion/
И перевод от Ильи Стрельцына: https://css-live.ru/tricks/ukroshhaem-rezhimy-nalozheniya-difference-i-exclusion.html
А самое забавное, что с видео это тоже работает: https://codepen.io/jcoulterdesign/pen/QagxgJ
#css #mixblendmode
Признавайтесь, кто в TikTok часы проводит за скроллингом ленты?
Но я вообще не за тем пришёл. Меня их прелоадер заинтересовал. Яркий пример режима смешивания цветов со слоями ниже, mix-blend-mode: multiply.
Без него анимация была бы совсем простой: https://codepen.io/frontendcorn/pen/poWZObX
Кстати, прекрасная статья есть с примерами: https://web.dev/learn/css/blend-modes/
А тут разобрана вся их математика: https://www.w3.org/TR/compositing-1/
А тут вся математика разобрана еще более подробно: https://css-tricks.com/taming-blend-modes-difference-and-exclusion/
И перевод от Ильи Стрельцына: https://css-live.ru/tricks/ukroshhaem-rezhimy-nalozheniya-difference-i-exclusion.html
А самое забавное, что с видео это тоже работает: https://codepen.io/jcoulterdesign/pen/QagxgJ
#css #mixblendmode
👍12🔥5
#фишка дня
Пластмассовый мир победил, XML оказался сильней…
Но почему? Неужели всё настолько плохо?
Ну, на самом деле, нет. Если выупоро упёртый любитель контекстов и отрицаете любые внешние стейт-менеджеры, то запросто можете оказаться в подобной ситуации. Да даже если и не отрицаете, всё равно пара-тройка контекстов там будет.
Но погодите, ведь любой компонент в React это просто функция?
А значит, мы можем сообразить их композицию!
И получить красоту: https://codesandbox.io/s/gprovider-composition-fkn93e?file=/src/App.js
Естественно, подход по своей сути применим ко всем компонентам.
Всё есть функция, котаны.
#react #fp #context #compose
Пластмассовый мир победил, XML оказался сильней…
Но почему? Неужели всё настолько плохо?
Ну, на самом деле, нет. Если вы
Но погодите, ведь любой компонент в React это просто функция?
А значит, мы можем сообразить их композицию!
const AppProvider = compose(
UserProvider,
ThemeProvider.
MenusProvider,
SupportProvider,
ErrorProvider,
StateProvider,
);
И получить красоту: https://codesandbox.io/s/gprovider-composition-fkn93e?file=/src/App.js
Естественно, подход по своей сути применим ко всем компонентам.
Всё есть функция, котаны.
#react #fp #context #compose
👍23🤮3❤1👎1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня
Итак, проблема. У вас десятки видео на странице, но вам лень готовить каждому постер и прописывать его.
Казалось бы, ну и что такого? Все браузеры подгрузят первый кадр видео и покажут его.
Да. Но нет. Safari не подгрузит. И что делать, если нужен не первый кадр?
Всё очень просто! Крис Койер пишет: «Просто добавьте
Да, это заставит браузер сделать запрос к видео за ключевым кадром, но постер так-то тоже грузить надо.
К слову, в некоторых промо-проектах бывает весьма сподручно заменять анимации и 3D на контролируемое видео. Чтобы не происходило скачка при начале проигрывания — как раз лучше отказаться от постера и прибегнуть к технике с t.
Вот свежий и яркий пример — книга рецептов-игра: https://www.themagicalpantry.com/
Весь интерактив сделан на видео.
#video #safari #poster
Итак, проблема. У вас десятки видео на странице, но вам лень готовить каждому постер и прописывать его.
Казалось бы, ну и что такого? Все браузеры подгрузят первый кадр видео и покажут его.
Да. Но нет. Safari не подгрузит. И что делать, если нужен не первый кадр?
Всё очень просто! Крис Койер пишет: «Просто добавьте
#t=0.01
к урлу (в src)». Смотрим видео — работает :) Кто не понял — это просто проход по таймлайну.Да, это заставит браузер сделать запрос к видео за ключевым кадром, но постер так-то тоже грузить надо.
К слову, в некоторых промо-проектах бывает весьма сподручно заменять анимации и 3D на контролируемое видео. Чтобы не происходило скачка при начале проигрывания — как раз лучше отказаться от постера и прибегнуть к технике с t.
Вот свежий и яркий пример — книга рецептов-игра: https://www.themagicalpantry.com/
Весь интерактив сделан на видео.
#video #safari #poster
👍40🔥2🤩1
#инструмент дня
Забавный обучающий проект посвящённый DOM Events (событиям объектной модели документа). Кликам и фокусам, короче.
Что такое target, bubble, propagation? Всё показано максимально наглядно.
Если, правда, вы с концепцией уже знакомы, может быть даже чересчур наглядно. Но тем не менее.
Итак, встречайте: https://domevents.dev/
#js #dom #education
Забавный обучающий проект посвящённый DOM Events (событиям объектной модели документа). Кликам и фокусам, короче.
Что такое target, bubble, propagation? Всё показано максимально наглядно.
Если, правда, вы с концепцией уже знакомы, может быть даже чересчур наглядно. Но тем не менее.
Итак, встречайте: https://domevents.dev/
#js #dom #education
domevents.dev
Explore DOM Events
A visualizer to help you learn how the DOM Event system works through exploration
👍17🔥6
#заметка дня
Часто приходится делать таблицы в GitHub Markdown? Тогда лови это знание, пригодится.
Списки и контейнеры не могут и не должны отображаться внутри таблиц, набранных "палочками" (||). Палочки — только для текстового контента, для данных. Точка.
Нужен табличный, кхрм, макет (ну список изменений там запихать) – используй HTML таблицы.
Но есть нюанс.
Чтобы правильно использовать Markdown внутри HTML-таблиц, нужно этот самый контент с двух сторон обложить переводами строки, вот так:
...и будет норм.
#markdown
Часто приходится делать таблицы в GitHub Markdown? Тогда лови это знание, пригодится.
Списки и контейнеры не могут и не должны отображаться внутри таблиц, набранных "палочками" (||). Палочки — только для текстового контента, для данных. Точка.
Нужен табличный, кхрм, макет (ну список изменений там запихать) – используй HTML таблицы.
Но есть нюанс.
Чтобы правильно использовать Markdown внутри HTML-таблиц, нужно этот самый контент с двух сторон обложить переводами строки, вот так:
<td>
_markdown_ **тут**
</td>
...и будет норм.
#markdown
👍9👎1
This media is not supported in your browser
VIEW IN TELEGRAM
#прекрасное дня
Ни больше ни меньше. Прекрасное. Потому что я не могу это описать каким-то другим словом.
Я вообще сел другой пост писать, но наткнулся на эти карточки в моей твиттер-ленте.
Не, я понимаю, мода на 3D-карточки в лендингах давно прошла, все эти перевороты и шевеления мышкой… Это всё прошлое десятилетие.
Но ребят, я за всю свою карьеру и представить не мог, что можно настолько точно передать эффект переливающейся металлизированной карточки настолько точно манипулируя одним только положением фона! Это какое-то безумное умение сочитать mix-blend-mode, градиенты и SVG-фильтры.
Вам срочно надо зайти и посмотреть самим: https://deck-24abcd.netlify.app/
Ну и гитхаб, конечно: https://github.com/simeydotme/pokemon-cards-css
Крышу сносит, потрясающе. И без WebGL.
#css #3d #gradient
Ни больше ни меньше. Прекрасное. Потому что я не могу это описать каким-то другим словом.
Я вообще сел другой пост писать, но наткнулся на эти карточки в моей твиттер-ленте.
Не, я понимаю, мода на 3D-карточки в лендингах давно прошла, все эти перевороты и шевеления мышкой… Это всё прошлое десятилетие.
Но ребят, я за всю свою карьеру и представить не мог, что можно настолько точно передать эффект переливающейся металлизированной карточки настолько точно манипулируя одним только положением фона! Это какое-то безумное умение сочитать mix-blend-mode, градиенты и SVG-фильтры.
Вам срочно надо зайти и посмотреть самим: https://deck-24abcd.netlify.app/
Ну и гитхаб, конечно: https://github.com/simeydotme/pokemon-cards-css
Крышу сносит, потрясающе. И без WebGL.
#css #3d #gradient
👍26🔥7😍3
#книга дня
Какой материал подъехал, вы не поверите!
https://www.patterns.dev/
Бесплатная, прекрасно иллюстрированная и снабжённая подробными примерами книга о паттернах проектирования и их применении в React-приложениях.
Просто огонь 🔥
Если кто не понял — книга бесплатная. Сумму оплаты можно выбрать на LeanPub, а можно в ноль.
#book #react #js #patterns
Какой материал подъехал, вы не поверите!
https://www.patterns.dev/
Бесплатная, прекрасно иллюстрированная и снабжённая подробными примерами книга о паттернах проектирования и их применении в React-приложениях.
Просто огонь 🔥
Если кто не понял — книга бесплатная. Сумму оплаты можно выбрать на LeanPub, а можно в ноль.
#book #react #js #patterns
🔥32👍5👎1
#заметка дня
Вы думали, я забыл про своё приложение-пульт для телевизора?
Ну вот ещё, нет, конечно. Месяц выдался тяжёлым, но UI давно готов и пришла пора сетевой части.
Начнём с простого. Как вообще найти телевизор в локальной сети? Как быстро узнать его IP, список сервисов, которые телевизор предоставляет, идентификаторы и методы подписи?
На помощь придут протоколы SSDP (Simple Service Discovery Protocol) и UPnP (Universal Plug-n-Play). Вот с SSDP сегодня и начнём.
SSDP предназначен для быстрого поиска устройств и предоставляемых ими протоколов управления по сети. Чаще всего при обнаружении устройства можно получить ссылку на XML-файл с описанием нужного API.
Каждое устройство, поддерживающее SSDP, держит открытым порт 1900 и откликается на особым образом составленный запрос.
Всё, что нам требуется, это отправить в эфир широковещательное сообщение, собрать ответы устройств и найти среди них нужный нам сервис.
Вот пример кода для Node.js: https://gist.github.com/bekharsky/3e6fd2dd265b89817d5f08ff21f3f544
Я его честно взял из реализации подобного сервиса для React Native, поскольку нашей целью не является хакинг всего протокола телевизора.
Если вы возьмёте пример и бездумно запустите сразу — вряд ли что получите, поисковая строка там заточена под телевизоры Samsung. Но вы можете послать запрос
Собственно, меня, как вы уже поняли если открыли код, волнует сервис RemoteControlReceiver. О том, что это такое и как с ним поступить — в следующих постах.
А моя задача пока переписать JS-код на Dart под Flutter и вывести список телевизоров в настройках.
До связи, котаны.
#tv #remote #protocol #ssdp
Вы думали, я забыл про своё приложение-пульт для телевизора?
Ну вот ещё, нет, конечно. Месяц выдался тяжёлым, но UI давно готов и пришла пора сетевой части.
Начнём с простого. Как вообще найти телевизор в локальной сети? Как быстро узнать его IP, список сервисов, которые телевизор предоставляет, идентификаторы и методы подписи?
На помощь придут протоколы SSDP (Simple Service Discovery Protocol) и UPnP (Universal Plug-n-Play). Вот с SSDP сегодня и начнём.
SSDP предназначен для быстрого поиска устройств и предоставляемых ими протоколов управления по сети. Чаще всего при обнаружении устройства можно получить ссылку на XML-файл с описанием нужного API.
Каждое устройство, поддерживающее SSDP, держит открытым порт 1900 и откликается на особым образом составленный запрос.
Всё, что нам требуется, это отправить в эфир широковещательное сообщение, собрать ответы устройств и найти среди них нужный нам сервис.
Вот пример кода для Node.js: https://gist.github.com/bekharsky/3e6fd2dd265b89817d5f08ff21f3f544
Я его честно взял из реализации подобного сервиса для React Native, поскольку нашей целью не является хакинг всего протокола телевизора.
Если вы возьмёте пример и бездумно запустите сразу — вряд ли что получите, поисковая строка там заточена под телевизоры Samsung. Но вы можете послать запрос
ssdp:all
, который выдаст вам список всех устройств и сервисов в вашей сети. Попробуйте, это забавно. Откроете для себя много нового :) Например, что ваш роутер умнее, чем кажется.Собственно, меня, как вы уже поняли если открыли код, волнует сервис RemoteControlReceiver. О том, что это такое и как с ним поступить — в следующих постах.
А моя задача пока переписать JS-код на Dart под Flutter и вывести список телевизоров в настройках.
До связи, котаны.
#tv #remote #protocol #ssdp
👍25🔥4⚡1
#codepen дня
Давайте немного развлечёмся. Кто-то не так давно в чате канала выкатил большой SCSS-цикл для анимации, но саму анимацию зажал (ай-яй-яй).
Давайте исправим положение и сделаем что-то насущное.
Например, сымитируем табло в аэропорту… С его задержками смены линий при смене языка.
Поехали: https://codepen.io/alinaki/pen/ZEaOdKq
Заодно использована интересная фишка CSS Grid: наложить две ячейки друг на друга без абсолюта.
#css #grid #animation #scss
Давайте немного развлечёмся. Кто-то не так давно в чате канала выкатил большой SCSS-цикл для анимации, но саму анимацию зажал (ай-яй-яй).
Давайте исправим положение и сделаем что-то насущное.
Например, сымитируем табло в аэропорту… С его задержками смены линий при смене языка.
Поехали: https://codepen.io/alinaki/pen/ZEaOdKq
Заодно использована интересная фишка CSS Grid: наложить две ячейки друг на друга без абсолюта.
#css #grid #animation #scss
👍16