mefody.dev – Telegram
mefody.dev
5.31K subscribers
14 photos
1 video
3 files
425 links
Доброжелюбный бородач про фронтенд, тимлидство, спикерство.
Автор — @dark_mefody

Канал про работу: @mefody_work.

Не размещаю рекламу в своём канале. Даже за деньги. Даже большие.
Download Telegram
Работа с буфером обмена при помощи JavaScript

Короткий цикл статей Реймонда Кэмдена про то, как работать с буфером обмена в веб-приложениях. Когда-то у нас для таких целей был Flash, но сейчас его в браузере так просто не запустишь, даже если очень надо.

Реймонд рассказывает про Clipboard API, как с его помощью читать HTML-код, как обрабатывать бинарные файлы (например, картинки) и что там с безопасностью вообще. Понравился пример, как можно скопировать в буфер обмена урл и сразу же записать в буфер QR-код с этим урлом.

Про чтение: https://frontendmasters.com/blog/reading-from-the-clipboard-in-javanoscript/
Про запись: https://frontendmasters.com/blog/writing-to-the-clipboard-in-javanoscript/
👍28🔥12❤‍🔥42
Нужен ли режим сепии по умолчанию?

Татьяна Фокина на примерах очень хорошо объясняет, почему тёмной и светлой тем недостаточно для комфортной работы с сайтом.

Часто при разработке темы для сайта тестируют контрастность — и это уже хорошо. Но есть люди с астигматизмом, для которых повышенная контрастность вызывает гало-эффект, то есть буквы и строки начинают двоиться. Эффект сепии как раз убирает излишнюю контрастность, поэтому на тексте проще сфокусироваться.

Многие операционные системы поддерживают похожий режим для всего интерфейса сразу, когда цвета становятся более тёплыми.

Астигматизм — очень распространённая особенность зрения у взрослых, поэтому, возможно, не помешает в браузерах добавить какую-то дополнительную настройку доступности. Но пока такого нет, есть смысл для заботы о пользователях добавить третью тему. Таня верно в статье замечает, что менеджеры такому «обрадуются», конечно. К тому же кому-то тёмная тема как раз более комфортна для зрения, чем режим сепии. Но задуматься о том, что доступность — это не только про контрастность, важно.

https://a11y-blog.dev/ru/articles/is-sepia-mode-essential/
👍2413🤣5🤯1
Анимирование высоты при помощи CSS

Про эту новость в соц. сетях не написал только ленивый, кажется. Но я же не ленивый, поэтому тоже напишу.

В прошлом году у меня был доклад про то, как многие вещи, которые мы привыкли делать при помощи JS, на самом деле уже можно делать на чистом CSS. Но мне тогда задали очень правильный вопрос: «А без костылей плавную анимацию раскрытия details уже можно как-то сделать?» Я тогда что-то невнятное ответил, что есть черновики спецификаций, можно поиграться с max-height, то есть способы есть, но не все удобные.

Так вот, свершилось. В CSS теперь завезли свойство interpolate-size. И если вы зададите interpolate-size: allow-keywords, то тогда вы действительно можете анимировать из и в height: auto. Больше не нужно хаков с расчётом высоты на JS, подстановкой в атрибут style, потом после анимации не забыть убрать. Браузер в этот момент знает, что высоту надо посчитать, прямо до пикселей.

Да, пока это только браузеры на основе Chromium. Да, пока это можно использовать только как прогрессивное улучшение. С другой стороны, прогрессивное улучшение на половине ваших пользователей, когда раньше не было вообще ничего — это же классно. А ещё это новое свойство вместе с функцией calc-size() уже предлагают добавить в Interop 2025, на что я очень надеюсь.

https://gomakethings.com/animating-height-with-only-css/
🔥53😱24🤔63🎉3💯2😍1
Почему фронтендерам много платят

Видео выходного дня. С жёлтым заголовком. Я в принципе такие видео редко смотрю, потому что они чаще всего создаются, чтобы зацепить внимание аудитории, которую потом можно продавать рекламодателям. Но тут состав участников такой, что не смог пропустить — большую часть лично знаю.

В «600к в секунду» ребята обсудили, действительно ли мы достойны получать свои зарплаты. Фронтендеры же просто формочки делают да кнопки двигают, за что там платить. Вот в этих ваших бекендах настоящее программирование, они там алгоритмы применяют, с базами данных общаются, огромные массивы данных обрабатывают…

В подкасте ребята хорошо прошлись по тому, как развивалась индустрия, почему фронтенд в 2024 году уже не просто формочки и кнопки, а полноценные приложения, да и фулстеков никто не отменял. Обсудили, почему сложность современного фронтенда такая высокая (тут хочется вставить мем с гусём «А кто фронтенд таким сложным сделал? Кто, я спрашиваю?»), хотя порог входа в профессию до сих пор достаточно низкий. И даже зацепили сложную тему «чем фронтенд-разработчик отличается от инженера».

В некоторые моменты хотелось ворваться в комменты под видео, написать «Да нет, не так всё, вы вообще неправильно всё обсуждаете!». Значит, эмоции зацепили, хорошее видео.

Дальше будет имхо. В любой профессии есть те, кто мало делает и зарабатывает много. И есть те, кто делает очень много, а платят гроши. В тех же медицине и образовании. И да, нам в какой-то степени повезло заниматься тем, что интересно, красиво, зачастую не очень сложно, но за это прилично платят. Но, как и в любой профессии, чтобы выйти из центра колокола нормального распределения на его окраину, нужно пахать. И если за это хорошо платят — ну и отлично же! Особенно если эти деньги потом можно тратить на добрые дела.

https://news.1rj.ru/str/itsmirnov/634
62👍20😐7🔥5👌1
Бенчмарк производительности @​property

Брамус рассказывает об интересном исследовании производительности зарегистрированных кастомных свойств в CSS. Напомню, в CSS теперь во всех браузерах можно явно задавать тип кастомного свойства. И по сути это позволяет браузеру понимать, как воспринимать то, что раньше было просто строкой текста.


@property --color-primary {
syntax: '<color>';
inherits: true;
initial-value: tomato;
}


Суть бенчмарка в том, чтобы проверить, ускоряется ли работа по инвалидации значений, если использовать эту новомодную фичу. Дело в том, что при изменении любого CSS-свойства браузер по разным правилам вынужден обновить целое дерево других значений, что не бесплатно. А иногда и всю страницу целиком перерисовать. В рамках исследования было проведено три замера.

1. Сравнение обычного наследуемого свойства, незарегистрированного кастомного свойства и зарегистрированного наследуемого кастомного свойства (`inherits: true`).
В целом, разница для кастомных свойств небольшая. Кастомные свойства в любом случае обрабатываются быстрее, чем обычное свойство. Но зарегистрированные свойства всё-таки чууууть-чуть медленнее.

2. Сравнение обычного ненаследуемого свойства и зарегистрированного ненаследуемого кастомного свойства (`inherits: false`).
Тут уже интереснее. Конечно, логично, что наследование замедляет инвалидацию. Но тут бенчмарк показывает прирост производительности на 1780% (прописью: тысяча семьсот восемьдесят) для обычных свойств! И 848% — для кастомных. При этом обычные свойства производительнее, чем кастомные.

3. Замер времени на обработку 25000 регистраций кастомных свойств.
Почти никак не влияет. Так как регистрация свойств происходит в самом начале загрузки приложения, то результат в 30ms на обработку 25000 регистраций — ничто по сравнению с загрузкой самого CSS, эти регистрации содержащего.

Выводы:
- Если есть возможность задать кастомному свойству inherits: false — задайте. Прирост производительности при наличии большого количества кастомных свойств будет колоссальный. А с современными дизайн-системами у вас скорее всего таких свойств много.
- Лучше зарегистрировать свойство, чем не зарегистрировать. Время на обработку таких конструкций мизерное, зато на выходе получаете полноценное свойство с понятным браузеру значением. Но тут надо внимательно следить за размером CSS-бандла, потому что он точно распухнет.

https://web.dev/blog/at-property-performance
16👍7🤔3🔥1
Потратил целый день на оптимизацию производительности CSS-селекторов

Трис Мадфорд делится поучительной историей о том, как они с коллегой нашли во вкладке Performance в девтулзах галочку «Enable CSS selector stats (slow)» и увидели, что работа с селекторами занимает целых 270 мс.

Трис слышал, что в современном мире париться по поводу производительности селекторов вообще не стоит, поэтому его сильно смутило такое большое значение. Он переписал всякие непроизводительные селекторы на классы и атрибуты, запустил аудит ещё раз, увидел экономию в 230 мс, обрадовался. Затем проверил то же самое на WebPageTest — а там изначально было около 12 мс, а стало около 10 мс.

Выводы:
- Всегда проверяйте не лабораторные замеры, а RUM (Real user monitoring). Трису это позволило понять, что он потратил целый день почти впустую.
- Галочка «Enable CSS selector stats (slow)» реально замедляет сам процесс профилирования, поэтому её нельзя воспринимать как часть замеров общего перфоманса, слишком большое влияние. Надпись «slow» как будто должна была натолкнуть на правильные мысли, но я бы тоже ошибся, потому что обычно эта надпись говорит про то, что само профилирование будет идти дольше.
- С одной стороны перфоманс селекторов и правда почти никак не влияет на общий перфоманс страницы. Но если вы разрабатываете сервис, где каждая миллисекунда загрузки стоит больших денег бизнесу, то всё-таки 2 мс Трису удалось выиграть всего за день.

https://www.trysmudford.com/blog/i-spent-a-day-making-the-website-go-2ms-faster/
🔥25👍10🤨93🏆2🤣1
Доке — 3 года!

Искренне люблю Доку — проект, где разработчики делятся с другими разработчиками, как работает веб. Хороших обучающих материалов по фронтенду много не бывает, а у Доки их много. Внимательно наблюдал за ребятами, ещё когда они только придумывали идею, собирали редакцию, и вот им уже исполнилось три годика.

В честь своего дня рождения Дока завтра проведёт онлайн-митап, где спикеры расскажут про пет-проекты, использование сервис-воркеров для тестирования и не только, создание фронтендерских соревнований. Отдельный респект организаторам за то, что к ним можно просто прийти, без всяких регистраций со сбором емэйлов и контактов.

https://teletype.in/@doka_guide/MmnpSofIQSH
🎉92👍18❤‍🔥1472👏2🥴1
CSS @scope

Мириам Сюзанн объясняет, в чём разница между обычным сложным селектором и относительно новой директивой @scope в CSS. Напомню, в CSS теперь можно задать область применения CSS-правил относительно какого-то родителя. И если раньше мы это делали банальным перечислением классов, то сейчас есть другой способ.

- Специфичность псевдокласса :scope, который позволяет обратиться к тому самому ограничивающему элементу, всегда равна [0, 1, 0].
- При этом вложенные в @scope селекторы не увеличивают свою специфичность. Это позволяет решить ту проблему, которую долгое время помогал решать БЭМ — борьба со специфичностью в проекте.
- При помощи синтаксиса @scope (.from) to (.to) можно задать «бублик» применения стилей. То есть стили начнут применяться по дереву внутри .from, но не будут залазить внутрь .to. Это вполне себе полезно для различных сложных компонентов со слотовой структурой.
- Чем ближе @scope по DOM-дереву, тем значимее стиль. Ещё раз, при нескольких @scope на странице, применимых к одному блоку применится не тот, что ниже в CSS-файле, а тот, что ближе к элементу по DOM-дереву. Это принципиально другой подход к стилизации.
- <style>@scope {...}</style> — гига-фича, позволяющая привязать стили к родительскому над style элементу. Я таким образом демки для слайдов начал собирать, чтобы не париться с iframe. Никаким наследованием такое не сделать. Как CSS-модули, только нативное и без предобработки.

Жду, когда эта крутая фича станет доступна не только в Chromium, но для демок в докладах пока хватает.

https://12daysofweb.dev/2023/css-scope/
🔥298👍1
Введение в Shared Compression Dictionaries

Новый интересный способ сжатия поверх HTTP подъехал. Точнее, относительно новый и относительно подъехал, но обо всё по порядку.

Скорее всего в ваших проектах есть автоматическое GZIP-сжатие на сервере всякого текстового, что отправляется в браузеры. Это настолько стандарт, что зачастую оно просто включено по умолчанию, даже думать про это не надо, потому что все современные браузеры в GZIP давно умеют. Это довольно простой метод сжатия на основе алгоритма DEFLATE.

Если для вашего проекта важен перфоманс, то, возможно, вы даже игрались с Brotli или Zstandard. Тут алгоритмы уже посложнее, при этом под капотом используются специальные словари, которые увеличивают вероятность того, что повторные куски текста передавать не придётся. И включить их тоже уже относительно просто, есть готовые решения почти на любой вкус.

Был ещё такой проект, SDCH (Shared Compression Dictionary over HTTP). К сожалению, его реализация была супер-небезопасной, из-за чего браузеры перестали его поддерживать.

Но работа над идеей не остановилась. А идея такая. Скорее всего у вас в проекте есть какие-то файлы, которые от релиза к релизу меняются частично. Например, вы поправили конкретную кнопку, для чего переписали немного JS и добавили новых стилей в CSS. Во время релиза у вас собрался бандл, который содержит крайне мало правок, но из-за того, что это всё же новый файл, нельзя пользоваться кэшированием браузера — пользователю приходится перекачивать весь файл целиком. (Часто здесь перфоманс-инженеры начинают играться с чанками, но универсального решения всё равно нет.)

А что было бы, если бы браузеру можно было сказать, чтобы он взял старую версию файла (из кэша, чтобы почти мгновенно), а потом поверх неё применил только дифф, как в git? И ещё сжал этот дифф, потому что он же тоже текст. Если максимально упростить и опустить море деталей, в этом и суть Delta Compression. Старую версию используем как словарь, а новая получается применением диффа.

Похожую идею можно применить и для динамических сайтов. Скорее всего у вас есть футер и шапка, какое-нибудь меню. И все они от релиза к релизу одинаковые. Можно добавить их в словарь, который браузер закэширует, а загружать для каждой страницы нужно будет только различия. Что тоже может нехило сэкономить байтики.

Лабораторные тесты показывают, что новый формат может как ничего не давать полезного вообще (тот же Brotli вполне себе мощный из коробки), так и экономить до 80% трафика. Так что не стоит бросаться внедрять просто потому что, начать стоит с пробных замеров.

И как же этим пользоваться, если всё-таки готовы?

- Поддержка нового формата появится в Chrome 130, но так как формат подразумевает фолбек на обычное скачивание обычных файлов, то можно использовать его как прогрессивное улучшение.

- Amazon CloudFront, Cloudflare и Fastly уже поддержали этот формат у себя. Думаю, другие CDN тоже скоро подтянутся, потому что это позволяет на том же железе зарабатывать в разы больше на раздаче статики. Золотая жила.

- В статье есть ссылки на рецепты, как прикрутить новый формат к себе, но там прям надо хорошо разбираться и уметь патчить запросы на уровне заголовков. Ещё и сборку проекта нехило так нужно дописать, чтобы помимо нового бандла хранить дифф со старым бандлом. Но если у вас уже настроена тонкая настройка Brotli или Zstandard, то дотюнить под новые словари будет не так сложно.

- Хоть и выглядит всё довольно сложно, верю, что автоматизацию в случае успеха в Chrome подвезут быстро. Когда-то нужно было `.gz`-версии файликов подкладывать руками рядом с обычными версиями, чтобы твой сайт работал быстрее, чем у конкурентов, а сейчас многие даже и не в курсе, что у них на сервере gzip-сжатие срабатывает автоматически.

https://www.debugbear.com/blog/shared-compression-dictionaries
👍43🔥123👏2
Цвета в console.log()

Джим Нильсен дебажил в приложении цвета, которые меняются при помощи JS, и делал это самым правильным способом: через console.log(). Но беда в том, что если написать в консоль new color is hsl(62 50% 25%), это не то чтобы полезно. Не знаю как вы, но я не умею до сих пор быстро представлять в голове цвета по числам.

Джим вспомнил, что ещё в 2018 году у него была заметка в блоге про то, как стилизовать вывод console.log(). На самом деле если написать console.log('%c some text', 'color: white; background-color: black'), то %c и будет указанием браузеру применить стили из второго аргумента при выводе в консоль.

Я про такой лайфхак хоть и знаю давно, всё никак не мог найти полезного применения. А ведь для дебага цветов это самое оно.

https://blog.jim-nielsen.com/2024/color-console-log/
👍54🔥82🌚1💯1
Уроки, полученные от 222 557 шрифтовых сабсетов

Стоян Стефанов задался вопросом: сколько можно экономить на размере файлов шрифтов, если оставлять в них не просто диапазон символов (латинские, кириллические и так далее), а только нужные на странице. И ответить на него решил при помощи исследования.

Он взял 1009 шрифтов из гитхаба Google Fonts, при помощи fontkit исследовал, какие глифы есть в каждом из шрифтов, затем, используя Glyphhanger, сгенерировал 222 557 отдельных файлов шрифтов, чтобы в них было от 1 до N глифов. Заморочился, конечно, знатно, но зато в статье можно найти примеры скриптов, как можно так же заморочиться.

В итоге Стоян опытным путём выяснил, что каждый глиф в среднем весит 0.1 KB, то есть если вы используете какой-то шрифт только для заголовков на статическом сайте, то есть смысл оставить только нужные символы. И если у вас нет кириллицы на сайте в принципе, то её имеет смысл вынести в отдельный сабсет.

Почему не убрать целый набор символов совсем? Потому что есть браузерный автоперевод, когда текстовый контент всё равно меняется на те символы, которые вы не предусмотрели. И если вы хотите, чтобы было красиво, то лучше оставить возможность докачать шрифт. Но чтобы не грузить всё сразу, unicode-range вам в помощь — браузер скачает только то, что есть на странице в виде символов.

https://www.phpied.com/lessons-learned-from-222557-font-file-subsets/
21🤔7👍3🔥3🐳1
Адаптивный TOC с точками-соединителями для страниц на CSS

В книжках часто используют такие специальные страницы, как Содержание. И чтобы можно было взглядом пройти от названия главы к странице, на которой она начинается, давным-давно придумали соединять их точками.

Для веба такой пример скорее бесполезен, потому что нет такого понятия, как страница. Но если вы верстаете что-то типографическое (а многие книги, на самом деле, вполне себе верстаются в веб-инструментах), то есть прекрасная спека с content: leader(dotted); — делает ровно то, что надо. Беда в том, что работает это примерно нигде. Мне в далёком 2017 году пришлось подключать PrinceXML, который умеет в печатные стили лучше браузеров.

Кристоф Грабо попробовал использовать для такого гриды и хак с переполнением контента. Получилось вполне себе адаптивно. Причём он использует точки как текст, разделяет их пробелами. Из-за этого лишние точки переносятся на следующую строку, не оставляя артефактов. Взял себе на вооружение, если вдруг снова понадобится верстать что-то печатное.

https://markentier.tech/posts/2021/03/responsive-toc-leader-lines-with-css/
👍16👌1411❤‍🔥3
Doom на CSS

Думаю, вы слышали, что Doom на чём только не запускали. На калькуляторах, градусниках и тестах для беременности было. Даже на микроорганизмах с крайне низким FPS было.

К сожалению, на HTML и CSS полноценный Doom я не видел, но наткнулся на потрясающую демку Адама Куна, где он при помощи Scroll Animation API и 3D-трансформаций сделал возможность передвигаться по 3D-карте, стрелять в монстров, всё это в узнаваемой стилистике.

По мне так потрясающий эффект, который можно применять на каких-нибудь лендингах. Потому что реализуется относительно просто, завязано на привычный скролл, механика «погулять по помещению» может много где пригодиться.

https://codepen.io/cobra_winfrey/pen/oNOMRav
🔥46🤣20😱95👏2💔21👍1
CSS Loaders

Большая коллекция (больше 600) CSS-лоадеров от Темани Афиф. Каждый всего в один элемент <div class="loader"></div>, скопировать CSS можно по клику на пример.

Люблю такие ресурсы, где можно либо вдохновиться, либо вообще взять и полностью своровать что-то полезное для своего проекта.

https://css-loaders.com/
53👍13🙏8💯6🔥5❤‍🔥3
Полупрозрачность для эффективного UI-дизайна

Дизайнеры из Злых Марсиан делятся подходом, который позволяет упростить разработку дизайна для проектов. Правда, заголовок в оригинальной статье супер-жёлтый: «Вау, opacity! Полное руководство по этому герою эффективного UI-дизайна». Почитал статью, а полного руководства и конкретных рецептов так и не нашёл. Но тем не менее интересные мысли в статье есть.

1. Для начала, имея базовый цвет и играясь с его прозрачностью, можно сразу задать hover, focus и прочие состояния элементов.

2. Мелкие линии, бордеры и прочие разделители лучше делать полупрозрачными. Сам часто сталкивался с тем, что при наложении на тёмную тему внезапно разделитель либо пропадает, либо слишком яркий, либо некрасивый. И прозрачность действительно помогала сделать хорошо.

3. Если создавать элементы на странице разными вариациями прозрачности белого и чёрного, то поверх какого-то базового цвета можно легко выстроить вполне себе безграничный для темизации интерфейс.

4. С доступностью и контрастностью тоже всё хорошо, если следить за тем, что на что накладывается. В статье есть примеры с расчётом WCAG/APCA.

5. Если полупрозрачные элементы в интерфейсе начинают накладываться друг на друга, то могут случаться казусы. За ними нужно следить, верстать уже будет немножко сложнее, надо присматриваться к каждому пикселю наложения.

В статье в конце есть верное замечание, что такое подход хорош в первую очередь тогда, когда нужно быстро что-то запустить. Один раз придумал математику наложения полупрозрачных поверхностей — и побежали за деньгами от инвесторов быстрыми дизайнами. Но всё-таки богатые и приятные интерфейсы гораздо сложнее, там нужно уметь совмещать много разных цветов, иногда в самых неожиданных комбинациях, а тут прозрачность может сыграть с вами злую шутку (зелёная и красная кнопка внезапно смешаются — и ой, шоколадное мороженое).

https://evilmartians.com/chronicles/woah-opacity-a-full-guide-to-this-badass-hero-of-efficient-ui-design
👍20🐳3🌚31❤‍🔥1
Tbilisi JS Meetup #3

Сегодня вечером буду читать свой новый доклад про работу с девтулзами Chrome, а точнее — с вкладкой Performance. Сам постоянно путаюсь, где какая панелька за что отвечает, почему каждый блок своего уникального цвета, ещё и ненужные мне детали показывает, которые отвлекают. Решил собрать все свои знания в кучку, набраться новых и рассказать об этом на митапе в Тбилиси.

Помимо моего будет ещё три доклада, все можно посмотреть в онлайн-трансляции. До встречи 😉

https://news.1rj.ru/str/tbilisi_js_chat/11654
🎉43👍18🔥127
Как мы делали Yandex Cloud на дизайн-системе Gravity UI доступнее

Пока сижу на митапе A11Y&UX Day в Тбилиси, решил поделиться с вами хорошим примером, как большая дизайн-система работает над доступностью компонентов.

Что конкретно сделала команда gravity-ui, можно прочитать в статье, но интересно как раз то, что доступность — это не просто семантика и ариа-роли. В разных браузерах скринридеры работают по-разному, какие-то проблемы пришлось «лечить» необычным способом. С лейбла «Вы здесь» в компоненте хлебных крошек улыбнулся — непривычно, но элегантно. Кстати, посмотреть все фиксы можно прямо в GitHub, потому что библиотека лежит в опенсорсе. И если знаете, как можно сделать лучше — приносите ишьи или пулл-реквесты.

https://habr.com/ru/companies/yandex_cloud_and_infra/articles/853382/
30👍5🔥3
Селекторы CSS: простые и сложные

Читал на FrontendConf доклад про то, что умеют селекторы и какие есть интересные и необычные приёмы, чтобы выбрать что-то в DOM-дереве. Казалось бы, что там можно на целый доклад собрать. А вот как начал собирать материалы, сам удивился, сколько всего в этой теме интересного есть, даже чему-то научился в процессе подготовки.

Под каждый пример есть интерактивные демки, можно с ними поиграться, чтобы лучше понять, что происходит. А в конце — квиз для проверки знаний (хотя на самом деле мне просто хотелось сделать квиз на чистом CSS, чтобы поразвлекаться с теми самыми селекторами).

Видео: https://youtu.be/uhfcGAQv7o8
Слайды: https://mefody.dev/talks/css-selectors
🔥6816🎉4
Прекрасные аутлайны для фокуса

Томас Гюнтер делится советами, как сделать хорошее выделение фокусом, если дефолтные браузерные вам не подходят.

1. Используйте :focus-visible вместо :focus. В таком случае фокусное выделение будет показываться тогда, когда оно действительно нужно.

2. Если нужно выделить только текст, без фона, можно цветом обводки сделать currentColor — в целом, смотрится неплохо. В статье есть готовый сниппет, который можно попробовать вставить в проект как умолчание, если дизайнер пока не придумал отдельно фокусные состояния интерактивных элементов.

3. Когда элемент находится на каком-то фоне, нужно помнить про контрастность, подсматривать в рекомендации WCAG. Красивая белая обводка на белом фоне — лучше уж дефолтная браузерная.

4. Обводку можно делать двойную (внутри светлое, снаружи тёмное) при помощи outline и box-shadow. Вполне себе универсальный паттерн, который будет смотреться хорошо почти на любом фоне, если вдруг не наткнётся на опасный overflow: hidden.

5. Можно в принципе не делать никакую обводку, если есть уже готовые стили для :hover, которые явно меняют внешний вид элемента, чтобы было видно, что он выделен. Заметное изменение фона, цвета текста, тени или бордера — что угодно, лишь бы было понятно, что я сфокусировался на элементе.

https://medienbaecker.com/articles/focus-outlines
33👍2
Pkl — замена YML и JSON от Apple

Оказывается, у яблочной компании есть опенсорсное решение для конфигурационных файлов. Что обычно нужно для конфигов? Понятный простой синтаксис, возможность наследоваться от базовых конфигов и расширять шаблонные, валидация схемы данных. И новый pkl (Pickle) как будто всё это умеет.
class AppConfig {
port: Int = 8080
logLevel: String = "INFO"
timeout: Duration = Duration.seconds(30)

function validate() {
port > 0 && port < 65536
}
}

api = new AppConfig {
port = 3000
timeout = Duration.minutes(2)
}

Как будто всё по коду понятно даже без объяснений. Есть наследование, есть валидация, есть схема данных, всё в понятном формате.

Конечно, менять всё в своих проектах я резко не брошусь на этот новый формат, потому что обычно в проектах вокруг конфигов есть ещё много обёрток и тулинга, а тут пока слишком молодой формат. Но поиграться в свободное время попробую.

https://www.trevorlasn.com/blog/pkl-apple-new-configuration-language
🤔31👍12🥴6👏21🎉1
Самозванцы, выгорание, границы

Видео выходного дня. Анастасия Калашникова — практикующий психолог, ведущая тренингов для айтишников, основательница проекта PSYvIT. Давно подписан на её канал, смотрю доклады и вебинары.

Есть старенький, но всё ещё актуальный доклад от Анастасии, где она глубоко погружается в темы «синдром самозванца» и «выгорание»: что это такое, как оно влияет на нашу психику и физиологию, что с этим делать. Полезно посмотреть, чтобы понять, есть ли вообще у вас этот синдром (а то сейчас почти у каждого либо синдром самозванца, либо выгорание), и в целом немножко прокачаться в осознанности. Я сейчас как раз столкнулся с ощущением «вот они все молодцы, а я сюда только пришёл, я точно хуже остальных» — доклад устаканил тревогу в голове.

https://www.youtube.com/watch?v=2BBumwv-jVY
26👍13❤‍🔥5😐2