Будни разработчика
14.6K subscribers
1.14K photos
319 videos
7 files
1.96K links
Блог Lead JS-разработчика из Хельсинки
Автор: @bekharsky

По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv

Чат: https://t.me/htmlshitchat

№5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
Download Telegram
#фишка дня

Если вам в React потребовалось по требованию ESLint включить в зависимости useEffect не только нечто внешнее, но и текущий внутренний стейт, вы гарантированно получите бесконечный цикл и переполнение буфера.

Чтобы этого не произошло, ставьте ссылку на стейт, а не сам стейт. И всё. Пример на скриншоте.

Вышеупомянутое ESLint-правило react-hooks/exhaustive-deps действительно может раздражать (мы ведь все умнее машины, правда?), но количество ошибок проектирования, от которых оно избавляет, несчётно: https://typeofnan.dev/you-probably-shouldnt-ignore-react-hooks-exhaustive-deps-warnings/

#react #js #hooks
#codepen дня

Почти по всей Европе Рождество, а поэтому…

Вот вам ёлка, которая выводит свой собственный код!

https://codepen.io/finnhvman/pen/abLVZNY

Скажите теперь, что CSS — это не язык программирования 😬

#css #trick
#дайджест недели

Пн. Баг в переносах в Chrome 96 на macOS Monterey: https://t.me/htmlshit/882

Вт. Пара забавных UI-китов: https://t.me/htmlshit/884

Ср. Находка недели, книга о паттернах проектирования: https://t.me/htmlshit/885

Чт. Как выглядят вообще все элементы HTML5? Вот так: https://t.me/htmlshit/886

Пт. Как правильно устанавливать стейт в React, зависящий от своего предыдущего состояния? Вот так: https://t.me/htmlshit/887

Сб. Ёлка на CSS, выводящая свой код: https://t.me/htmlshit/888

Stay tuned!
This media is not supported in your browser
VIEW IN TELEGRAM
#игра дня

Люблю я эту рубрику. Сегодня будет аж три примера.

Первая игра напоминает Лого Миры (олды тут?): проведите робота через уровни, программируя его шаги на JavaScript: https://lab.reaal.me/jsrobot/

Вторая сильно хардкорнее и не настолько красива визуально и состоит в программировании лифта: https://play.elevatorsaga.com/

Волк, коза и капуста на максималках, в общем.

Ну и на закуску — нечто максимально глобальное: ММО Screeps. Программируйте свои юниты и доминируйте: https://store.steampowered.com/app/464350/Screeps_World/

Игра открыта, платная версия поддерживает сообщество.

В общем, есть чем занять ближайшие выходные. Тем, у кого они есть, конечно же :)

#js #game
#фишка дня

Новинки ESNext в stage 3 (короче, почти-почти): новые методы массива groupBy и groupByToMap.

На скриншоте прекрасно видно, для чего нужны. Больше не надо изголяться с reduce.

Уже доступны в полифилле core-js: https://github.com/zloirock/core-js#array-grouping

Скоро залетят и в TypeScript.

#js #array #esnext
#статья дня

Хотите резко обновить свои знания вёрстки? Я бы даже сказал, актуализировать. Тогда Designcember — для вас: https://web.dev/how-we-built-designcember/

CSS Grid, спрайты, маски, прекрасно поданные контейнерные запросы с полифиллом, навигация с клавиатуры и общая прекрасная доступность, оптимизация изображений через консольный Squoosh, тёмная тема. Для совсем космополитов — компоненты и статика через Astro.

Очень качественный буст знаний.

#css #grid #squoosh #astro
This media is not supported in your browser
VIEW IN TELEGRAM
#статья дня

Соскучились по геометрии? Да не врите, по ней невозможно не соскучиться.

Представьте такую задачу: вам надо бесконечно скроллить всего 3-5 слайдов. Причём, скроллить нативно, без дёрганий. Как обычный скролл на мобилах, в общем.

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

Я же предлагаю мыслить в 3d: расположите карусель как… как реальную карусель с задолбавшими всех лошадками. И сделайте её достаточно большой, чтобы нивелировать искажение перспективы.

Не знаете, как? Да вот так же: https://3dtransforms.desandro.com/carousel

freeMode уж сами допишете.

Острожно — геометрия! И CSS 3d-преобразования 🤪

Великолепная статья, такие в школе надо преподавать.

#css #js #carousel #3d
Media is too big
VIEW IN TELEGRAM
#codepen дня

Больше снежинок богу снежинок!

С новым годом, товарищи подписчики :)

Как всегда, кодпен не столько эффектный, сколько полезный: WebGL на Three.js и максимально простой код генерации снежинок и физики на Cannon.js

Каждая снежинка уникальна, как же иначе.

https://codepen.io/terabaud/pen/NWaXvoy
This media is not supported in your browser
VIEW IN TELEGRAM
#ссылка дня

Сегодня я подобрал максимально красивый ресурс: набор демок на WebGL: https://ykob.github.io/sketch-threejs/

Эффекты глитча, игры с частицами, огонь, солнце, вода! Огонь, кстати, выглядит пугающе натурально.

Все примеры с исходными кодами, есть и весьма практичные, вроде галереи.

#js #webgl
#игра дня

Такое развидеть нельзя. Нет, это не описание, это буквально — название игры: https://cantunsee.space/

Хорошая тренировка ваших UI/UX способностей. Но есть нюанс — она направлена сугубо на Material Design, потому некоторые моменты в целом могут быть спорные. Но впечатление не портится.

Удачи!

#game #ux #ui
#статья дня

Понятие “доступности” включает в себя не только доступ с клавиатуры и контастные цвета, но и уважение к пользователям, не желающим или не могущим воспринимать анимации.

Да, некоторые ваши прекрасные анимации вполне могут вызвать приступ тошноты не в переносном смысле.

Поэтому к анимациям надо подходить ответственно. “Могу” не значит “надо”:

1. Решает ли анимация проблему?
2. Отвлекает ли она от контента?
3. Может ли пользователь отказаться от неё?

На все эти вопросы нужно подготовить ответы заранее. И вот к слову, процесс отказа — принципиального или ситуационного — описывается в свежей статье Кэсси Эванс: https://css-tricks.com/empathetic-animation/

Не мешайте вашим пользователям. Помогайте им.

#css #animation #js
#codepen дня

Сколько div-ов на иллюстрации? Если ты ответил, что сколько и квадратов — ты ошибся.

Один там. И куча градиентов :)

А вот количеством и размером кубов легко можно управлять через пользовательские свойства: https://codepen.io/t_afif/pen/PoJeqwN

Пугающе гениальная штука :)

#css #var #gradient
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня

Quine (квайн) — компьютерная программа, которая выдаёт на выходе точную копию своего исходного текста.

Ну что же, на JavaScript это проще простого: https://jsfiddle.net/fxi/1x3any9o/

А с setInterval превращается в нечто максимально новогоднее.

#js #quine
#инструмент дня

Текучая типографика. Адаптивная типографика. Шлюзы.

Это все названия для одной крутой вещи — плавного изменения размера шрифта и вертикального ритма в зависимости от размера экрана. С одним нюансом: есть контрольные точки, где формула может меняться. Или нужно «зажать» размер в некотором диапазоне.

И это логично, ведь надо предотвратить слишком мелкий или слишком крупный шрифт.

И вот инструмент для этого: https://modern-fluid-typography.vercel.app/

#font #clamp
#статья дня

Экспорты по-умолчанию это плохо, пнятненько? Сейчас поясню.

Дал я тут более опытному товарищу свой пет-проект на ревью и заставил он меня импортировать React как пространство имён (namespace, неймспейс кто привык). Ну т. е. так:

import * as React from “react”;

Причина в том самом дефолтном экспорте: React импортируется целиком в ваш проект, даже когда нужно не все. И этим страдают многие библиотеки. Невозможно реализовать алгоритм т. н. treeshake — удаления ненужного из сборки.

Это, конечно, не единственный минус дефолтных экспортов. Подробнее почему не стоит их вообще использовать — эта статья:

https://humanwhocodes.com/blog/2019/01/stop-using-default-exports-javascript-module/

Если коротко и отбросить тришейкинг: снижается когнитивная нагрузка.

#js #export #import
#codepen дня

В этом весьма красивом и технически сложном кодпене по мотивам "Унесённых призраками" меня больше всего веселит ставший уже классическим приём наложения большой кучи полосок сверху чтобы по ховеру на них изменять параметры лежащих ниже узлов.

Казалось бы, обычный ~, а каков эффект: https://codepen.io/cobra_winfrey/pen/GRMdwwG

#css #hover
#фишка дня

Если вам не пофиг на удобство пользования формами и сайтами вообще, то вы хоть раз, но задумывались о порядке перехода клавишей Tab по полям, ссылкам и кнопкам. Сидели, расставляли tabindex, что-то игнорировали, где-то ставили ловушки фокуса... Потом сидишь, как дурак, табаешь. Так вот.

И в Chrome, и в Firefox можно включить отображение порядка tabindex! Причём, в Firefox проще: DevTools — Accessibility — Show Tabbing Order. Осторожно, на больших сайтах рендер занимает время!

А вот в Chrome называется и работает похожая опция иначе: Show source order. Почему не Tabbing? Потому что суть у неё малость иная.

В то время, как Tabbing order показывает порядок следования по всем интерактивным элементам, Source order показывает порядок следования узлов в выбранном родителе. Но свои задачи решает хорошо.

А так ещё можно воспользоваться расширениями вроде Polypane или Taba11y.

#a11y #firefox #chrome
#тред дня

В Twitter проходит очередной челендж: требуется уместить паттерн в 280 символов.

https://twitter.com/anatudor/status/1479135302925041671

Примеры можно увидеть на иллюстрации, в треде есть ещё.

Ну коллекция кодпенов для вдохновения: https://codepen.io/thebabydino/full/OJmpzya

#twitter #css #pattern #contest #challenge
This media is not supported in your browser
VIEW IN TELEGRAM
Давайте расслабимся немного и обойдёмся сегодня без поста о разработке.

Я тут отдал нашему CEO запоздалый рождественский подарок «со смыслом». Я ожидал чего угодно…

Но только не того, что он парализует работу компании на пару часов 🤡