#библиотека дня
Я тут такое нашёл, закачаешься. Очередные выкрутасы с Shadow DOM. На сей раз — метаязык для описания паттернов.
Короче говоря, можно шикарные фоны делать не ограничивая себя возможностями градиентов.
Называется это всё <css-doodle/>: https://css-doodle.com/
Описываем нужный нам паттерн используя правила CSS и простые функции типа flip, reverse, shape, random и так далее, там полновесный декларативный язык.
Огромное число примеров, большое сообщество. Вот, например, автор описывает как сделать классический китайский орнамент на простых flip-invert-reverse функциях: https://yuanchuan.dev/flip-invert-reverse
В общем, потрясающая штука.
#css #pattern #doodle
Я тут такое нашёл, закачаешься. Очередные выкрутасы с Shadow DOM. На сей раз — метаязык для описания паттернов.
Короче говоря, можно шикарные фоны делать не ограничивая себя возможностями градиентов.
Называется это всё <css-doodle/>: https://css-doodle.com/
Описываем нужный нам паттерн используя правила CSS и простые функции типа flip, reverse, shape, random и так далее, там полновесный декларативный язык.
Огромное число примеров, большое сообщество. Вот, например, автор описывает как сделать классический китайский орнамент на простых flip-invert-reverse функциях: https://yuanchuan.dev/flip-invert-reverse
В общем, потрясающая штука.
#css #pattern #doodle
🔥13👍2
#инструмент дня
Помните пост про плейсхолдеры? https://t.me/htmlshit/431
Помимо задачи поставить временное изображение, существует и задача отобразить что-то, пока грузится основная картинка.
Для этого можно или поставить серое поле, или применить различные техники под общим названием LQIP — Low Quality Image Preview: https://github.com/zouhir/lqip
Например, SQIP: https://github.com/axe312ger/sqip (произносится сквиб, Гарри Поттер объяснит).
Задача показать вместо оригинального изображения что-то передающее хоть какую-то информацию об исходнике.
И вот новое: BlurHash от Wolt: https://blurha.sh/
Для генерации используется хеш вида LEHV6nWB2yk8pyo0adR*.7kCMdnj (ограниченный набор из 83 доступных символов). Плагины есть под любые мыслимые средства, от Eleventy до Flutter.
Если в вашем приложении или сайте требуется загрузить огромное число изображений — подобные техники очень вам помогут ускорить процесс загрузки для пользователя, попутно сделав его более, кхрм, цветным.
#css #img #placeholder
Помните пост про плейсхолдеры? https://t.me/htmlshit/431
Помимо задачи поставить временное изображение, существует и задача отобразить что-то, пока грузится основная картинка.
Для этого можно или поставить серое поле, или применить различные техники под общим названием LQIP — Low Quality Image Preview: https://github.com/zouhir/lqip
Например, SQIP: https://github.com/axe312ger/sqip (произносится сквиб, Гарри Поттер объяснит).
Задача показать вместо оригинального изображения что-то передающее хоть какую-то информацию об исходнике.
И вот новое: BlurHash от Wolt: https://blurha.sh/
Для генерации используется хеш вида LEHV6nWB2yk8pyo0adR*.7kCMdnj (ограниченный набор из 83 доступных символов). Плагины есть под любые мыслимые средства, от Eleventy до Flutter.
Если в вашем приложении или сайте требуется загрузить огромное число изображений — подобные техники очень вам помогут ускорить процесс загрузки для пользователя, попутно сделав его более, кхрм, цветным.
#css #img #placeholder
👍13🔥2
#фишка дня
Не так давно я писал о доступном внедрении таблицы в документ: https://t.me/htmlshit/1285
Суть была в том, чтобы дать контейнеру таблицы возможность принимать фокус. Для скроллинга и т. д.
Но что если для вашего UX критично понимать, что произошёл фокус внутрь контейнера?
Например, при фокусе внутрь группы полей ввода на форме надо показать некое предупреждение.
Решение есть! Смотрим: https://codepen.io/alinaki/pen/PoRrVom
Здесь
Событийный элемент содержит в себе следующий — мы попали в группу. Ясное дело, это существует не только для onBlur.
Подробнее:
Focus-события: https://udn.realityripple.com/docs/Web/API/FocusEvent/relatedTarget
События мыши: https://udn.realityripple.com/docs/Web/API/MouseEvent/relatedTarget
#event #focus #blur #mouse #js
Не так давно я писал о доступном внедрении таблицы в документ: https://t.me/htmlshit/1285
Суть была в том, чтобы дать контейнеру таблицы возможность принимать фокус. Для скроллинга и т. д.
Но что если для вашего UX критично понимать, что произошёл фокус внутрь контейнера?
Например, при фокусе внутрь группы полей ввода на форме надо показать некое предупреждение.
Решение есть! Смотрим: https://codepen.io/alinaki/pen/PoRrVom
Здесь
event.currentTarget
это непосредственно элемент, в котором произошло событие, а relatedTarget
— элемент, принимающий следующее событие того же вида, если такой присутствует в документе.Событийный элемент содержит в себе следующий — мы попали в группу. Ясное дело, это существует не только для onBlur.
Подробнее:
Focus-события: https://udn.realityripple.com/docs/Web/API/FocusEvent/relatedTarget
События мыши: https://udn.realityripple.com/docs/Web/API/MouseEvent/relatedTarget
#event #focus #blur #mouse #js
👍5
#новость дня
Скорее, #такое дня.
В мае я выкупил по договорённости у одного человека более подходящий никнейм для канала. Повесил там визитку и стал думать, как бы перенести всё без потерь и обыграть тему «Будней разработчика» правильно, не потерять статистику и аудиторию.
Чтобы заранее убрать вопросы: тот человек не был киберсквоттером, у них был хакатон с похожим названием.
И на днях Дуров и Ко его у меня отобрали: https://habr.com/ru/news/t/685288/
Ни один публичный сервис себе такого не позволял. Твиттер удалял никнеймы, но за нарушение правил. Телеграм же как платформа резко упал в моих глазах.
Думаю, стоит восстановить дублирование постов с канала на сайт. Я не хочу всё потерять, даже пусть большинство вещей тут просто дублируют моё избранное.
Это крайне мерзкое поведение :(
Скорее, #такое дня.
В мае я выкупил по договорённости у одного человека более подходящий никнейм для канала. Повесил там визитку и стал думать, как бы перенести всё без потерь и обыграть тему «Будней разработчика» правильно, не потерять статистику и аудиторию.
Чтобы заранее убрать вопросы: тот человек не был киберсквоттером, у них был хакатон с похожим названием.
И на днях Дуров и Ко его у меня отобрали: https://habr.com/ru/news/t/685288/
Ни один публичный сервис себе такого не позволял. Твиттер удалял никнеймы, но за нарушение правил. Телеграм же как платформа резко упал в моих глазах.
Думаю, стоит восстановить дублирование постов с канала на сайт. Я не хочу всё потерять, даже пусть большинство вещей тут просто дублируют моё избранное.
Это крайне мерзкое поведение :(
Хабр
Дуров: Telegram провёл чистку никнеймов каналов, неактивных последний год, чтобы продать самые красивые
Павел Дуров рассказал , что Telegram провёл чистку никнеймов каналов, которые были пусты или неактивны в течение последнего года. По его словам, около 70% всех юзернеймов Telegram были...
🤬12😢10👍3😱1
#ссылка дня
Олды тут?
Когда я начал официальную рабочую карьеру как верстальщик, в 2006 году, не было в интернете ресурса круче по CSS чем http://cssplay.co.uk/
И что-то мне подсказывает, что и нет.
Автору уже тогда было под 60, сейчас 74, но он фигачил и фигачит потрясающе сложные и при этом простые для понимания примеры вёрстки.
В 2009 году, например, в моде были выпадающие мега-меню, у него десятки их примеров. Естественно, без хаков для IE6 тогда не обходилось вообще ничего. Before, after? Забудьте. Flex? Забудьте. Float во все поля.
Коллекция меню поражает воображение. И до сих пор обновляется!
Раскладки на любой вкус и браузер. Всё категоризировано. Тоже обновляется!
Ну и он один из первопроходцев игр на CSS: http://www.cssplay.co.uk/menu/cssplay-whack-a-rat.html
В общем, без тени сомнения, Стюарт когда-то буквально стартанул мою карьеру и поддерживает веру в выбранное направление.
Не старейте, котаны.
Олды тут?
Когда я начал официальную рабочую карьеру как верстальщик, в 2006 году, не было в интернете ресурса круче по CSS чем http://cssplay.co.uk/
И что-то мне подсказывает, что и нет.
Автору уже тогда было под 60, сейчас 74, но он фигачил и фигачит потрясающе сложные и при этом простые для понимания примеры вёрстки.
В 2009 году, например, в моде были выпадающие мега-меню, у него десятки их примеров. Естественно, без хаков для IE6 тогда не обходилось вообще ничего. Before, after? Забудьте. Flex? Забудьте. Float во все поля.
Коллекция меню поражает воображение. И до сих пор обновляется!
Раскладки на любой вкус и браузер. Всё категоризировано. Тоже обновляется!
Ну и он один из первопроходцев игр на CSS: http://www.cssplay.co.uk/menu/cssplay-whack-a-rat.html
В общем, без тени сомнения, Стюарт когда-то буквально стартанул мою карьеру и поддерживает веру в выбранное направление.
Не старейте, котаны.
cssplay.co.uk
Stu Nicholls | CSSplay | Experiments with cascading style sheets | Doing it with Style
CSS ~ Cutting edge Cascading Style Sheets. Experiments in CSS
❤29🔥10👍6⚡2👏2🕊2
#инструмент дня
Sorry old chap. Increase the width of your browser to view this site.
…именно эту фразу вы увидите, открыв представленную ссылку на телефоне.
Но на самом деле, это красивая интерактивная история, игра если хотите, обучающая основам Git. Крайне рекомендую заварить чаю и пройти её вечерком.
https://git.bradwoods.io/
#git
Sorry old chap. Increase the width of your browser to view this site.
…именно эту фразу вы увидите, открыв представленную ссылку на телефоне.
Но на самом деле, это красивая интерактивная история, игра если хотите, обучающая основам Git. Крайне рекомендую заварить чаю и пройти её вечерком.
https://git.bradwoods.io/
#git
👍13
#совет дня
Буду краток.
Когда верстаете проект, расставляйте
Хрен с ней, с доступностью. Просто потом не будете сидеть как я и заполнять action name для системы трекинга на каждый чих 😭
Буду краток.
Когда верстаете проект, расставляйте
aria-label
на интерактивных элементах сразу. Хрен с ней, с доступностью. Просто потом не будете сидеть как я и заполнять action name для системы трекинга на каждый чих 😭
🤔11👍3😁2😱1
#статья дня
Что произойдёт, если посетитель вашего сайта или веб-приложения отключит куки?
Давайте перефразирую: обернули ли вы в try-catch все ваши вызовы localStorage, sessionStorage, IndexedDB? Нет? А почему?
Почему я до сих пор в тестовых вижу сырые вызовы localStorage? Опустим тот факт, что многие там ещё и токены хранят…
Так вот: если пользователь отключит куки, он получит такое веселье, как на скриншоте выше. И пустой экран заодно. Оно вам надо? Обработайте ошибку и предупредите нормально.
Ошибаются все, даже MDN. Вот собственно обзорная статья об этом: https://blog.tomayac.com/2022/08/30/things-not-available-when-someone-blocks-all-cookies/
Я тоже огрёб как-то раз, забыв обернуть localStorage в try-catch и выкатив код на продакшен. Оказалось, среди клиентов много параноиков.
Ну что делать.
#cookie #localStorage
Что произойдёт, если посетитель вашего сайта или веб-приложения отключит куки?
Давайте перефразирую: обернули ли вы в try-catch все ваши вызовы localStorage, sessionStorage, IndexedDB? Нет? А почему?
Почему я до сих пор в тестовых вижу сырые вызовы localStorage? Опустим тот факт, что многие там ещё и токены хранят…
Так вот: если пользователь отключит куки, он получит такое веселье, как на скриншоте выше. И пустой экран заодно. Оно вам надо? Обработайте ошибку и предупредите нормально.
Ошибаются все, даже MDN. Вот собственно обзорная статья об этом: https://blog.tomayac.com/2022/08/30/things-not-available-when-someone-blocks-all-cookies/
Я тоже огрёб как-то раз, забыв обернуть localStorage в try-catch и выкатив код на продакшен. Оказалось, среди клиентов много параноиков.
Ну что делать.
#cookie #localStorage
👍28🤔4⚡1
#шпаргалка дня
Не понимаете CSS-селекторы? Их есть у меня! А точнее, у автора.
https://raw.githubusercontent.com/eludadev/css-docs/main/assets/css_selectors.png
P. S. дежурное напоминание о том, что шпаргалки полезны только тому, кто их пишет.
Хотите пользы от шпаргалки? Хотя бы повторите её.
Вот возьмите и сделайте из этой кодпен и зашлите нам, с удовольствием выкатим.
#css #cheatsheet
Не понимаете CSS-селекторы? Их есть у меня! А точнее, у автора.
https://raw.githubusercontent.com/eludadev/css-docs/main/assets/css_selectors.png
P. S. дежурное напоминание о том, что шпаргалки полезны только тому, кто их пишет.
Хотите пользы от шпаргалки? Хотя бы повторите её.
Вот возьмите и сделайте из этой кодпен и зашлите нам, с удовольствием выкатим.
#css #cheatsheet
👍23
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня
Глядите-ка, один из подписчиков воспринял предыдущий пост всерьёз и таки выкатил интерактивную шпаргалку: https://codepen.io/mdss/pen/yLjBMEX
Просто прекрасно! Спасибо :)
Не стесняемся, котаны. Дополняем и расширяем. nth-child кто добавит?
#css #selectors #cheatsheet
Глядите-ка, один из подписчиков воспринял предыдущий пост всерьёз и таки выкатил интерактивную шпаргалку: https://codepen.io/mdss/pen/yLjBMEX
Просто прекрасно! Спасибо :)
Не стесняемся, котаны. Дополняем и расширяем. nth-child кто добавит?
#css #selectors #cheatsheet
👍30🔥13
Media is too big
VIEW IN TELEGRAM
#видео дня
Давно стоило и пересмотреть это видео, и выкатить в канал.
Многим из вас знакома концепция DRY: Don't Repeat Yourself. Вот только многие доводят её до абсурда, плодя абстракцию за абстракцией и пытаясь объять необъятное (сам таким был).
Но есть и другой подход, буквально — WET.
Write Everything Twice.
Да-да, пиши-повторяй. Стоит ли тратить время на объединение разных сущностей до того, как это вообще понадобится, или лучше потратить его на закрытие бизнес-потребности?
И вот об этом доклад Дэна наше всё Абрамова на конференции Deconstruct'2019.
Есть транскрипт, кстати: https://www.deconstructconf.com/2019/dan-abramov-the-wet-codebase
В общем, думайте, так ли вам нужны максимально универсальные компоненты и логика. Может, стоит сначала реализовать задачу, избежав дырявых абстракций?
#video #conference #dry #wet
Давно стоило и пересмотреть это видео, и выкатить в канал.
Многим из вас знакома концепция DRY: Don't Repeat Yourself. Вот только многие доводят её до абсурда, плодя абстракцию за абстракцией и пытаясь объять необъятное (сам таким был).
Но есть и другой подход, буквально — WET.
Write Everything Twice.
Да-да, пиши-повторяй. Стоит ли тратить время на объединение разных сущностей до того, как это вообще понадобится, или лучше потратить его на закрытие бизнес-потребности?
И вот об этом доклад Дэна наше всё Абрамова на конференции Deconstruct'2019.
Есть транскрипт, кстати: https://www.deconstructconf.com/2019/dan-abramov-the-wet-codebase
В общем, думайте, так ли вам нужны максимально универсальные компоненты и логика. Может, стоит сначала реализовать задачу, избежав дырявых абстракций?
#video #conference #dry #wet
👍15
#стрим дня
…который будет 6 сентября.
В общем, есть тип такой, Джейсон Ленсторф, он ведёт обучающие стримы по веб-технологиям.
И у него на стриме 6 сентябра будет создатель курсов по TypeScript, Мэтт Покок: https://www.learnwithjason.dev/advanced-typescript-let-s-learn-generics
Тема стрима — дженерики в TS. Без вопроса по дженерикам не обходится ни одно интервью.
Залетаем, смотрим, учимся.
#ts #generics
…который будет 6 сентября.
В общем, есть тип такой, Джейсон Ленсторф, он ведёт обучающие стримы по веб-технологиям.
И у него на стриме 6 сентябра будет создатель курсов по TypeScript, Мэтт Покок: https://www.learnwithjason.dev/advanced-typescript-let-s-learn-generics
Тема стрима — дженерики в TS. Без вопроса по дженерикам не обходится ни одно интервью.
Залетаем, смотрим, учимся.
#ts #generics
⚡2👍1
#фишка дня
Многие (к сожалению, не все) кто хоть раз разрабатывал формы, сталкивались с элементом label (лейбл, ярлык, как вам угодно). И знают, что при правильном его использовании пользователю не приходится целиться мышью в галочку или радиокнопку.
Кто-то добавит при этом, что скринридеры могут ассоциировать лейбл с элементом ввода и пользователи с нарушением зрения могут легко сориентироваться в вашей форме.
Но не все знают, что лейбл можно повесить и на элемент button: https://codepen.io/alinaki/pen/XWjLedQ
Да, возможно, кнопке свой ярлык не нужен и даже MDN сообщает нам об этом, но!
Но в лейбл можно добавить дополнительную информацию, которая будет однозначно и семантично связана с кнопкой и поможет, например, скринридерам или при создании тултипа.
Лейблом можно продублировать кнопку без внесения лишней когнитивной нагрузки (но не стоит, фокус он не примет). Пожалуй, для каких-нибудь игровых интерфейсов вполне может быть приемлемо.
А вот если вы не используете кнопки и балуетесь role=“button” на div-ах (в лучшем случае) — этой возможности вы лишены в принципе.
#html #button #label
Многие (к сожалению, не все) кто хоть раз разрабатывал формы, сталкивались с элементом label (лейбл, ярлык, как вам угодно). И знают, что при правильном его использовании пользователю не приходится целиться мышью в галочку или радиокнопку.
Кто-то добавит при этом, что скринридеры могут ассоциировать лейбл с элементом ввода и пользователи с нарушением зрения могут легко сориентироваться в вашей форме.
Но не все знают, что лейбл можно повесить и на элемент button: https://codepen.io/alinaki/pen/XWjLedQ
Да, возможно, кнопке свой ярлык не нужен и даже MDN сообщает нам об этом, но!
Но в лейбл можно добавить дополнительную информацию, которая будет однозначно и семантично связана с кнопкой и поможет, например, скринридерам или при создании тултипа.
Лейблом можно продублировать кнопку без внесения лишней когнитивной нагрузки (но не стоит, фокус он не примет). Пожалуй, для каких-нибудь игровых интерфейсов вполне может быть приемлемо.
А вот если вы не используете кнопки и балуетесь role=“button” на div-ах (в лучшем случае) — этой возможности вы лишены в принципе.
#html #button #label
👍14
#обман дня
Не так давно мы с вами радостно приветствовали введение штатной «ленивой» загрузки для тегов img и iframe. Был добавлен атрибут loading, который может принимать значение lazy и eager. Перевод, думаю, не требуется.
И блоги разработчиков и соиздателей браузеров радостно кричали: «Теперь ленивая загрузка картинок возможна даже при отключённом в браузере JS». Пруф (04.09.2022): https://web.dev/browser-level-image-lazy-loading/#:~:text=still%20works%20even%20if%20javascript%20is%20disabled
Хрена с два. Мы тут с пользователем Твиттера Стефаном Юдисом выяснили, что ленивая загрузка в Chrome таки отключается. Как и обещал нам MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-loading
Статья в блоге Chrome на днях будет исправлена. А вы пока попробуйте предположить, почему так. Это очень забавно.
#js #lazy #img
Не так давно мы с вами радостно приветствовали введение штатной «ленивой» загрузки для тегов img и iframe. Был добавлен атрибут loading, который может принимать значение lazy и eager. Перевод, думаю, не требуется.
И блоги разработчиков и соиздателей браузеров радостно кричали: «Теперь ленивая загрузка картинок возможна даже при отключённом в браузере JS». Пруф (04.09.2022): https://web.dev/browser-level-image-lazy-loading/#:~:text=still%20works%20even%20if%20javascript%20is%20disabled
Хрена с два. Мы тут с пользователем Твиттера Стефаном Юдисом выяснили, что ленивая загрузка в Chrome таки отключается. Как и обещал нам MDN: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-loading
Статья в блоге Chrome на днях будет исправлена. А вы пока попробуйте предположить, почему так. Это очень забавно.
#js #lazy #img
web.dev
Browser-level image lazy loading for the web | Articles | web.dev
This post covers the loading attribute and how it can be used to control the loading of images.
😱7👍4
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня
Вам никогда не казалось, что подвалы сайтов незаслуженно обижены?
Скроллишь, скроллишь себе бесконечную загрузку твитов или постов в ленте, футер появляется на секунду — и тут же снова улетает с экрана, не успев сообщить что-то важное…
Стив Гарднер попытался визуализировать происходящее, вышло офигенно, целая история: https://codepen.io/ste-vg/pen/PoQgvBK
#scroll
Вам никогда не казалось, что подвалы сайтов незаслуженно обижены?
Скроллишь, скроллишь себе бесконечную загрузку твитов или постов в ленте, футер появляется на секунду — и тут же снова улетает с экрана, не успев сообщить что-то важное…
Стив Гарднер попытался визуализировать происходящее, вышло офигенно, целая история: https://codepen.io/ste-vg/pen/PoQgvBK
#scroll
👍28😢3😁2❤1
#такое дня
По всей видимости, последняя ревизия клавиатурного механизма «бабочка» от Apple была достаточно надёжной 🤣
Но не судьба.
По всей видимости, последняя ревизия клавиатурного механизма «бабочка» от Apple была достаточно надёжной 🤣
Но не судьба.
😱10👍5
#инструмент дня
Кто соскучился по новым фреймворкам? Поднимите руки!
🙋🙋♂️🙋♀️🙋🙋♂️🙋♀️
Вижу лес рук. Прекрасно.
Итак, вашему вниманию предлагается Enhance.
Что он такое? Это основанный на веб-компонентах (web-components) фреймворк, использующий файловый роутинг и свой собственный менеджер состояний.
Похоже на React и Lit одновременно? Ну кто бы мог подумать.
Цель проекта — нести веб-компоненты в массы, сделать их переиспользование и структуру проекта вообще максимально простой (привет, классовый Lit). Кроме менеджера состояний поставляется ещё и атомарный CSS-фреймворк (зачем? брали бы уж Tailwind, хайповать так хайповать).
В общем, как всегда, внимания стоит. Как минимум, простые наброски делать должно быть одно удовольствие.
Тут SSR из коробки, кстати. Может стать неплохой альтернативой 11ty.
#js #components
Кто соскучился по новым фреймворкам? Поднимите руки!
🙋🙋♂️🙋♀️🙋🙋♂️🙋♀️
Вижу лес рук. Прекрасно.
Итак, вашему вниманию предлагается Enhance.
Что он такое? Это основанный на веб-компонентах (web-components) фреймворк, использующий файловый роутинг и свой собственный менеджер состояний.
Похоже на React и Lit одновременно? Ну кто бы мог подумать.
Цель проекта — нести веб-компоненты в массы, сделать их переиспользование и структуру проекта вообще максимально простой (привет, классовый Lit). Кроме менеджера состояний поставляется ещё и атомарный CSS-фреймворк (зачем? брали бы уж Tailwind, хайповать так хайповать).
В общем, как всегда, внимания стоит. Как минимум, простые наброски делать должно быть одно удовольствие.
Тут SSR из коробки, кстати. Может стать неплохой альтернативой 11ty.
#js #components
❤5👍5
#статья дня
Disclaimer: мне не нравится решение, представленное в статье, которую я сейчас опишу. Почему же я её упоминаю? Потому что идея-то классная, но недожали.
Я писал о масштабировании интерфейса пару раз. Всё сводилось к следующему: берём ширину дизайн-макета за 100% и считаем единицы размеров относительно размера видимой ширины экрана:
Раз: https://t.me/htmlshit/1182
Два: https://t.me/htmlshit/1183
Три: https://t.me/htmlshit/1229
Но с момента первой публикации этих постов (начало 2021 года) прошло достаточно много времени, инструменты вроде clamp и адаптивной типографики начали захватывать мир: https://t.me/htmlshit/902
Так вот, ребята из статьи на CSS Tricks примерно в то же время решили применить оба подхода, заодно показав нативное CSS-решение прямого масштабирования: https://css-tricks.com/how-to-get-a-pixel-perfect-linearly-scaled-ui/
Так что же с ней не так?
Они наступили на те же грабли, что я когда-то с vw/vh: потеряли возможность масштабирования в браузере. А это жирный минус на десктопах (на мобилах такой проблемы нет).
Тем не менее, направление-то классное, надо подумать на досуге, как это сделать умнее.
Но не забывайте, что CSS-то развивается, появились запросы от контейнера и родительский селектор. Pixel-perfect вёрстке давно пора умереть в глобальном смысле.
#css #layout #design
Disclaimer: мне не нравится решение, представленное в статье, которую я сейчас опишу. Почему же я её упоминаю? Потому что идея-то классная, но недожали.
Я писал о масштабировании интерфейса пару раз. Всё сводилось к следующему: берём ширину дизайн-макета за 100% и считаем единицы размеров относительно размера видимой ширины экрана:
Раз: https://t.me/htmlshit/1182
Два: https://t.me/htmlshit/1183
Три: https://t.me/htmlshit/1229
Но с момента первой публикации этих постов (начало 2021 года) прошло достаточно много времени, инструменты вроде clamp и адаптивной типографики начали захватывать мир: https://t.me/htmlshit/902
Так вот, ребята из статьи на CSS Tricks примерно в то же время решили применить оба подхода, заодно показав нативное CSS-решение прямого масштабирования: https://css-tricks.com/how-to-get-a-pixel-perfect-linearly-scaled-ui/
Так что же с ней не так?
Они наступили на те же грабли, что я когда-то с vw/vh: потеряли возможность масштабирования в браузере. А это жирный минус на десктопах (на мобилах такой проблемы нет).
Тем не менее, направление-то классное, надо подумать на досуге, как это сделать умнее.
Но не забывайте, что CSS-то развивается, появились запросы от контейнера и родительский селектор. Pixel-perfect вёрстке давно пора умереть в глобальном смысле.
#css #layout #design
🤔2❤1
#фишка дня
Заканчивайте использовать
Такой метод игнорирует даты, неопределённые значения и не работает с циклическими зависимостями.
Уже достаточно давно имеется structuredClone.
Наличествует во всех современных браузерах, есть полифилл.
P. S. вот тока не надо мне про лодаш тут плиз) все же использовали JSON-решение из-за скорости ⚡️
#js #clone
Заканчивайте использовать
JSON.parse(JSON.stringify(obj))
для дублирования (aka глубокого копирования aka deep copy) объектов в JavaScript.Такой метод игнорирует даты, неопределённые значения и не работает с циклическими зависимостями.
Уже достаточно давно имеется structuredClone.
Наличествует во всех современных браузерах, есть полифилл.
P. S. вот тока не надо мне про лодаш тут плиз) все же использовали JSON-решение из-за скорости ⚡️
#js #clone
MDN Web Docs
Window: structuredClone() method - Web APIs | MDN
The structuredClone() method of the Window interface creates a deep clone of a given value using the structured clone algorithm.
👍23🔥3🥰1