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

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

Чат: https://t.iss.one/htmlshitchat

№5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
#фишка дня

Хотите самый простой способ анимирования появления/исчезания элементов? Их есть у меня!

Правда, как всегда, пока только в Chrome. Но требующиеся изменения настолько мелкие, что это вообще неважно.

Итак, встречайте: View Transitions API. Вот даже ссылочка на MDN: https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API

1. Задали имя вашего слоя: style="view-transition-name: unique-name"
2. Вынесли добавление HTML в отдельную функцию aka mutate()
3. Вызвали её коллбеком в document.startViewTransition(() => mutate())
4. ...
5. Вы прекрасны!

Вот накидал вам быстрый пример: https://codepen.io/alinaki/pen/VwqLpvX

Основан на вот этих двух: раз и два.

Самое классное, оно просто работает как работало во всех остальных браузерах, потому что никакой дополнительной обработки нод не требуется. Да, есть забавные баги, но это временно.

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

#css #view #transition
👍9🤩52
This media is not supported in your browser
VIEW IN TELEGRAM
#статья дня

Итак, ты решил анимировать скрытие элемента aka display: none...

.box {
background: goldenrod;
width: 300px;
height: 300px;
margin: 30px auto;
transition: all 2s linear;
display: block;
}

.hidden {
display: none;
opacity: 0;
}


И получил в щи: элемент моментально скрылся и всё тут. Потому что display: none не анимируется.

И начинается: игры с таймаутами, попытки в анимацию по ключевым кадрам, transitionend, я уже молчу о каком-то дичайшем количестве кода под React просто чтобы плавно убрать элемент с глаз долой и с DOMа вон.

Но мы дождались подвижек. Что принёс нам Chrome 116? Вот что: анимируемые display и content-visibility.

Пример: https://codepen.io/web-dot-dev/pen/qBQeojK

Ну и статья, в которой, помимо прочего, описывается ещё много новых плюшек: https://developer.chrome.com/blog/entry-exit-animations/

Например, @starting-style для описания поведения элемента при вставке в DOM.

Хорошие времена нас ждут. Пусть только Safari и Firefox подтянутся 🙂

#css #animation
👍27🤩5
#заметка дня

Что-то я оборзел, пять дней без постов. Зато вы не отписываетесь. Устроил себе длинные выходные.

Знаете, чего я ждал? Выхода Firefox 117, чтобы в очередной раз поворчать!

Итак, начиная этой версии Firefox поддерживает нативный CSS nesting aka вложенность. Да-да, как практически любой из препроцессоров. То есть:


.nesting {
color: hotpink;

> .is {
color: rebeccapurple;

.awesome {
color: deeppink;
}
}

&.alt {
color: cyan;
}
}


Амперсанд (&) здесь ссылка на родителя, которую, очевидно, можно использовать где угодно. Но нельзя кешировать :(

А теперь, внимание, клоунада! 🤡

Firefox 117 поддерживает последнюю версию спецификации, в то время как текущие Chrome и Safari — предыдущую. Что это значит?

То, что клятый амперсанд надо ставить даже в определении вложенных селекторов, а не только в композиции. Но не надо перед селекторами потомков и соседей — это >, + и ~:


.nesting {
color: hotpink;

> .is {
color: rebeccapurple;

& .awesome {
color: deeppink;
}
}

&.alt {
color: cyan;
}
}


Потому без магии PostCSS опять не обойтись, используйте плагин postcss-nesting. Или оставайтесь на SCSS.

Ну и на закуску, моё мнение о нестинге вообще: https://t.iss.one/htmlshit/697 Не то чтоб вы его просили, но я такой.

#css #nesting
👍14
#инструмент дня

Я когда готовил пример для поста про View Transition API, обратил внимание, как написан один из CodePen'ов, на которые я опирался. Конкретно, вот этот: https://codepen.io/argyleink/pen/GRPRJyM

Что же с ним не так? Да вроде всё так, но он импортирует нечто под названием open-props и потом использует какие-то переменные в коде...

Итак, оказалось, это — прости, господи — субатомные стили под названием Open Props: https://open-props.style/

Как можно догадаться, названы они так в пику атомным стилям типа Tailwind CSS, Assembler CSS, Tachyons или Windi CSS. Или любой другой попытке бакендеров сделать свой UI-кит.

Вот только вышеописанные наборы оперируют классами, а Open Props — переменными. Они предлагают интересный набор из цветов, размерностей, анимаций, теней и даже градиентов. Особенно меня порадовали типографические шлюзы aka clamp (Fluid sizes в терминологии фреймворка).

Получается что-то такое:


.card {
border-radius: var(--radius-2);
padding: var(--size-fluid-3);
box-shadow: var(--shadow-2);

&:hover {
box-shadow: var(--shadow-3);
}

@media (--motionOK) {
animation: var(--animation-fade-in);
}
}


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

В общем, интересный подход. Точно имеет право на жизнь.

#css #var #variables #ui #kit
👍14🤡61
#ссылка дня

Я не удивлюсь, если в комментариях напишут: "Ну ты чо вообще, все это знают", но тем не менее.

У Google помимо прекрасных блогов разработчиков (того же Chrome) и весьма неплохой документации на их проекты имеется и простая обучающая платформа — Code Labs.

https://codelabs.developers.google.com/

Повторю, это не тайна, но я не знал, что материалов настолько много. От дизайна и веба до Flutter и ИИ. Ну и всеми любимый Python, куда ж без него.

Прошел несколько примеров по Flutter. Да, это в основном "пиши вот так", но на то оно и простая платформа. На некий путь вполне может навести, руку набить. Ну и бесплатно при этом.

Моя рекомендация, в общем.

#google #dev #education #бородач
👍36
This media is not supported in your browser
VIEW IN TELEGRAM
#codepen дня

Какой самый приятный момент ведения канала по веб-разработке? inb4 Когда заказывают рекламу

Конечно же когда кто-то из подписчиков присылает свои измышления и эксперименты! Как будто у нас тут с вами настоящее сообщество!

Итак, сегодня — очередная вариация на тему из игры World of Goo. Жидкие перекаты 🙂

Предыдущий пост был вот: https://t.iss.one/htmlshit/1867

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

Итак, встречайте: https://codepen.io/mdss/pen/qBLZeya?editors=1100

Автор честно признаётся, что анимация украдена с https://maps.mel.fm/ Вот только у них там SVG. Пример с SVG можете увидеть по ссылке на чат или на сайте.

В общем, вдохновлять людей — приятно. Рекомендую!

#css #goo #filter #svg
👍91
Журнал "XOR" – мастхев для любого программиста. Освещаем новости, обновления, мемы и много кодинга. 

Присоединяйся к самому большому сообществу программистов: @xor_journal
🤡10👍1
This media is not supported in your browser
VIEW IN TELEGRAM
#игра дня

Хотите стать почти дизайнером и, наконец, понять, как работают кривые Безье и инструмент Pen в, буквально, всех векторных редакторах?

Вы по адресу!

Интерактивное руководство: https://bezier.method.ac/

Я, правда, так ничего и не понял. Ничего не получилось. 🙁

#vector #bezier #tool #learn #бородач
4👎1
#инструмент дня

Что быстрее всех на свете?

Неправильно! Быстрее всех на свете Lightning CSS. В чём конкретно быстрее это сейчас не важно :)

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

Вот: https://lightningcss.dev/

Объединяет в себе возможности CSSNano, ESBuild и PostCSS. Кстати, не только быстрее, но ещё и размер сжатого файла получается меньше.

Основан на коде из Firefox, поэтому назвать его появившимся из ниоткуда просто невозможно. Lightning CSS обработает CSS точно так же, как браузер, построив правильную CSSOM (Object Model, по аналогии с DOM), с учётом типов токенов.

Естественно, имеется разлапистая поддержка плагинов и CSS-модулей.

Кстати, молния понимает @import, за бандл не беспокойтесь.

И вообще, сам Андрей Ситник предлагает мигрировать с PostCSS: https://web-standards.ru/podcast/381/#01:17:39

Пробуем?

#css #lightningcss #rust
👍175
#заметка дня

Как разместить иконки на странице или в web-приложении?

Очевидно — картинкой. Шрифтом ещё. CSS-спрайтом. SVG... Но один из наиболее удобных и универсальных способов — это SVG-спрайты.

По сути всё просто: работаем с элементом symbol. Символ — это буквально что угодно в SVG, что не отобразится сразу, но на что можно будет сослаться.

SVG-файл становится контейнером таких символов:

<svg xmlns="https://www.w3.org/2000/svg">
<symbol id="icon-circle" viewBox="0 0 32 32">
<circle cx="16" cy="16" r="16" />
</symbol>
<symbol id="icon-square" viewBox="0 0 32 32">
<rect x="0" y="0" width="32" height="32" />
</symbol>
</svg>

И кладём этот контейнер куда угодно. Например, в файл или сразу в HTML (об этом ниже). А дальше всё очень просто:

<svg xmlns="https://www.w3.org/2000/svg" width="32" height="32">
<use href="icons.svg#icon-circle" />
</svg>

Удобно отлаживать, меньше запросов. Сплошные плюсы. Понятно, что так можно не только иконки хранить.

Но как этим пользоваться, например, в React?

Как-как, компонент сделать, как всегда. Объявили компонент Icon и передаём в него id нужного спрайта. Смотрим в песочницу и запоминаем: https://codesandbox.io/s/condescending-bas-1beiol?file=/src/App.js

Так-то SVG можно встроить сразу в HTML, главное, скрыть не забыть. Но это, опять же, может стать задачей вашего любимого бандлера.

Вообще, моя любимая часть в песочнице это даже не спрайты, а ...props. Если интересно — потом расскажу, почему :)

Всем спрайт, котаны!

#svg #symbol #sprite #react #бородач
👍213
#такое дня

Лучшее времяпрепровождение на выходных? Конечно же, некромантия!

Нет ничего лучше, чем привести старую железку к современным стандартам. Особенно, если это iPod 5 aka Video. Аж 2005 года. По-моему, некоторые мои знакомые подписчики тогда даже не родились.

Итак, имеем модель с жестким диском (настоящим! только очень маленьким) на 30 Гб. Покупаем переходник на MSATA SSD, в моем случае 256 Гб. Ну и батарею побольше, на освободившееся место. С 650 mAh до 2000. Забегая вперёд скажу, что надо было брать переходник на microSD, они менее энергопрожорливые.

Ну и сверху на это все залетает прошивка Rockbox. Эдакий Linux для плееров. Правда, пришлось опять же патчить под MSATA (ещё одна причина брать переходник под карточки).

Получилось круто! Лежит, тестирует батарею. Дальше планирую поставить другую фронтальную панель и вообще ещё немного поугарать.

Некромантия — дело хорошее :)
21👍14