Получи случайную криптовалюту за регистрацию!

Будни разработчика

Логотип телеграм канала @htmlshit — Будни разработчика Б
Логотип телеграм канала @htmlshit — Будни разработчика
Адрес канала: @htmlshit
Категории: Дизайн , Технологии
Язык: Русский
Количество подписчиков: 11.63K
Описание канала:

Блог Senior JS-разработчика из Хельсинки
Автор: @bekharsky
По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.me/it_adv
Чат: https://t.me/htmlshitchat

Рейтинги и Отзывы

3.00

3 отзыва

Оценить канал htmlshit и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

0

4 звезд

0

3 звезд

3

2 звезд

0

1 звезд

0


Последние сообщения 102

2021-05-19 13:17:16 #заметка дня

А давайте сегодня стилизуем выбор файла. Ну то бишь input[type="file"]. С чего вдруг? Да просто в целом это можно делать как минимум двумя способами! Два лучше чем один, очевидно.

Итак, классический способ: label>input+span.

Я не очень люблю атрибут for, ибо он заставляет меня придумывать id, но for может дать вам больше гибкости в размещении элементов и/или избавить от дополнительных span-ов.

Поехали:

1. Скрываем input техникой visually hidden, чтобы скринридеры его не потеряли.

2. Вешаем на span атрибут tabindex для фокуса с клавиатуры и role=“button” чтобы указать, что он будет интерактивным. Почему не кнопка? Потому что кнопка перехватит на себя клик по label, нам это не надо.

3. Оформляем span.

Собственно, это всё. Но оформляя таким способом, мы теряем мета-информацию. Как минимум, хотелось бы иметь название файла. Значит, добавляем пункт номер…

4. Вешаем слушатель события change на наш выбор файла и демонстрируем пользователю информацию о файле.

Итак, что же получилось: https://codepen.io/alinaki/pen/poeNzqd

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

Так вот, с некоторых пор мы можем обращаться к псевдоэлементу ::file-seleсtor-button! Вот и MDN по этому поводу: https://developer.mozilla.org/en-US/docs/Web/CSS/::file-selector-button

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

Впрочем, когда-то кнопка называлась -webkit-file-upload-button, так что допишем и этот вариант, тогда и в старых Chrome и нынешнем Safari тоже заработает.

Описывать тут нечего, сразу результат: https://codepen.io/alinaki/pen/NWpbgGg

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

#css #file #upload
860 viewsedited  10:17
Открыть/Комментировать
2021-05-18 17:00:05
#codepen дня

Невероятно! Apple iMac стал настолько тонкий, что уместился в один CodePen: https://codepen.io/Adir-SL/pen/JjWXZEq

Крутится вокруг своей оси, из интерактива — смена набора цветов.

К слову, чтобы научиться создавать такие же примеры — стоит понять, как делать параллелепипеды на CSS, а об этом я писал совсем недавно: https://t.me/htmlshit/612

#css #3d
604 views14:00
Открыть/Комментировать
2021-05-18 13:00:38
Интересуетесь современными технологиями?

@digital_epoch – cвежайшие новости и инсайды от ведущих IT-гигантов публикуются тут. Автор канала – программист с многолетним опытом, каждый день мониторит 20+ интернет-источников и выбирает исключительно полезный и интересный материал.

А для тех, кто уже в теме и следит за IT-сферой:

– бесплатные интесивы
– анонсы конференций
– обзоры IT&Digital курсов
– инсайды от IT-гигантов

Подписывайтесь на канал и получайте инсайды первыми

#реклама
774 views10:00
Открыть/Комментировать
2021-05-17 22:07:00
#wtf дня

Только что обнаружил, что открытые Chrome DevTools предотвращают выключение экрана на MacBook. Учитывая, сколько окон инспектора у меня их открыто каждый день — немудрено, что ноутбук не выключает экран.

Это, мягко говоря, раздражает. И началось не так давно.

Если кто знает, как это исправить — буду очень рад предложениям.

Upd. 1

Есть открытый баг для Windows, не я один страдаю: https://bugs.chromium.org/p/chromium/issues/detail?id=1208711&q=prevent&can=2

Upd. 2

Если инспектор открывается внутри основного окна – запрета выключения экрана не происходит.
467 viewsedited  19:07
Открыть/Комментировать
2021-05-17 10:30:01 #заметка дня

Ну что, настало время второй части заметки про анимацию по скроллу: https://t.me/htmlshit/614

На сей раз в дело идут самые современные API.

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

Да в общем, не так много: высота документа, высота видимой области экрана, координаты "начала" и "конца" элемента относительно документа и видимой высоты экрана, статус прокрутки.

Теперь можно составить пропорцию и анимировать любое нужное нам свойство элемента, что мы и делали в прошлый раз.

Но ведь браузеру и так это всё уже известно! Неужели нельзя упростить? Так вот, можно. Ну, почти. И для этого создаются новые браузерные API под общим именем ScrollTimeline: https://wicg.github.io/scroll-animations/

Черновик, понятное дело.

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

Набросаем код для логики, описанной выше. Самое интересное: никакого псевдокода! Итак:

@scroll-timeline fill {
source: selector(body);
scroll-offsets: selector(#id) end 0, selector(#id) end 1;
time-range: 1s;
}

Давайте разбираться, что же здесь написано:

@-правило scroll-timeline сообщает браузеру, что мы собираемся использовать состояние прокрутки документа и передаём набор правил с именем fill.

source: источник данных о скролле, в данном случае, тело документа, но можно передать или body или id элемента. С классами не выйдет. Тем не менее, как вы могли догадаться, следить за скроллом можно где угодно.

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

Причём, start и end обозначают состояние полосы прокрутки (сверху вниз), а числовые значения — состояние видимости элемента, где 0 — находится за пределами видимой области экрана и 1 — хоть немного виден.

Конечно, можно и просто указать абсолютные значения, например: 100vh, 200vh.

Только такое дело... В Chrome сейчас это не работает, нужно указывать отдельно правила start и end. Баг уже заявлен.

time-range: отображение длительности нужной анимации на скролл. В сухом остатке, если ваша @keyframes-анимация длится 1 секунду, а time-range равен 2 секундам, то ваша анимация закончится ровно на половине указанного интервала прокрутки.

Ну и всё, что нам остаётся, это указать имя нашего таймлайна в анимации. Очевидно, это должно поддерживаться браузером:

animation: 1s linear forwards fill;
animation-timeline: fill;

Если вы сейчас такие довольные побежали это всё пробовать, спешу вас разочаровать: всё это в глубокой бете. Чтобы потестировать в Chrome, нужно пройти на страницу скрытых настроек и включить Experimental Web Platform Features: chrome://flags/#enable-experimental-web-platform-features

И вот теперь можно посмотреть пример: https://codepen.io/alinaki/pen/NWpqyrO

По-моему, прекрасно. Было бы, если бы работало везде.

Но не всё так грустно! Ведь помимо черновика CSS-спецификации готовится и JavaScript API. А что это значит? Что можно найти полифилл!

И ведь правда можно: https://github.com/flackr/scroll-timeline

Одна проблема: на этот полифилл нужен ещё один полифилл, потому что не все браузеры поддерживают современную объектную модель CSS. А ещё нужен Web Animations API... чота сложно.

Тем не менее, вуаля: https://codepen.io/alinaki/pen/XWMbGRa (подключение полифилла там не самое простое, задавайте ваши вопросы в @htmlshitchat; интересующий вас код — с 55 строки).

Разбираться с API оставляю вам в качестве домашнего задания. А вот в следующий раз попробуем сделать то же самое на GSAP, чтобы быть ближе к народу.

#css #animation #timeline #scroll
849 viewsedited  07:30
Открыть/Комментировать
2021-05-14 16:40:00
785 views13:40
Открыть/Комментировать
2021-05-14 12:30:17
Да-да, это не опечатка! Действительно, Skillbox дарит первые 6 месяцев обучения frontend-разработке!

Курс будет полезен, если вы только решили связать свою жизнь с IT или имеете небольшой опыт в кодинге и вёрстке.

Frontend-разработчик с нуля до PRO — это:
- онлайн-уроки и вебинары ведущих экспертов из Kaspersky, Play North, ТАСС и других компаний;
- реальные кейсы для портфолио: интернет-магазин, CRM-система и другие проекты;
- карьерные консультации и помощь в трудоустройстве.

На курсе вы научитесь:
- верстать веб-страницы;
- создавать интерактивные веб-приложения;
- работать в системе контроля версий GIT и командной строке Bash;
- применять основные алгоритмы и структуры данных в реальных проектах;
- работать с макетами в Photoshop и Figma;
- создавать серверные приложения с использованием Node.js и многому другому.

Станьте на шаг ближе к профессии мечты — регистрируйтесь на курс!
https://clc.am/7DyrnA

#реклама
974 views09:30
Открыть/Комментировать
2021-05-14 09:00:46 #ссылка дня

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

А вот создатели CSS таких ошибок наделали достаточно много. Есть даже список: https://wiki.csswg.org/ideas/mistakes

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

Ну ок, не всё в этом списке стоит квалифицировать как ошибки. Что-то просто можно было сделать лучше, а что-то вообще выстрелило случайно.

Вот краткий список того, что там есть:
1. white-space: nowrap должен был быть no-wrap
2. box-sizing должен был border-box (прим. больно, да?)
3. border-radius должен был называться corner-radius (прим. правда что, какое отношение к границе оно вообще имеет?)
4. взаимодействие flex-basis и width/height слишком сложное (прим. потребовалось две версии флексбокса чтобы всё равно сделать сложную хрень)
5. нынешнему :empty стоило бы именоваться :void, а сам :empty должен был бы игнорировать пробелы (и вот это, кстати, уже исправлено в спецификации!)

Вообще, почитайте. Там много интересного, очень круто.

#css #specification
1.0K views06:00
Открыть/Комментировать
2021-05-13 13:07:05 #заметка дня

CSS очень хочет заменить JS в декларативном описании реакции интерфейса на действия пользователя.

Очень хочет, страшно старается, но пока что получается так себе. Тем не менее, плавный скроллинг до якоря, наконец, можно сделать. Ну и меню, пожалуй.

Ну ладно, анимации по наведении и клику ещё. А по скроллу?

Вы не поверите, тоже можно! Ну, почти.

Но обо всём по порядку. Заметка здоровая, будет две части.

Давайте сначала набросаем простой пример: пользователь прокручивает блоки и в определённые моменты начинают выезжать панели. Не просто появляются, а реагируют на положение полосы прокрутки. Проще показать уже: https://codepen.io/alinaki/pen/LYWVeBV

Для упрощения демонстрации каждая секция занимает целый экран, но можете мне поверить, приведённый пример будет работать даже в случае, когда у вас секций много и они разной высоты. Если интересно, как такие вещи рассчитываются — пишите в @htmlshitchat ваши комментарии, попробую после разложить немного геометрии.

Отдельно хочу заметить, что лет пять назад Safari останавливал event loop на время прокрутки страницы. Приведённая техника просто бы не заработала!

Да, инженеры Apple таким образом очень хитро решили уменьшить энергопотребление своего браузера.

Но на любую гайку найдётся свой хитрый болт, и тогда таким болтом стал... requestAnimationFrame! Неожиданно, не правда ли? И всё ещё актуально если анимации очень тяжёлые!

Итак, секрет в том, что мы запускаем запрос кадра и внутри него слушаем всё тот же window.pageYOffset.

Почему его? Потому что document.documentElement.scrollTop тогда в Safari не обновлялся, вспоминаем остановленный event loop.

И вот выходит рабочий вариант: https://codepen.io/alinaki/pen/QWpwXNN

У него есть одна достаточно серьёзная проблема, попробуйте отгадать, какая. Но она очень и очень легко решается.

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

#css #js #scroll #animation
781 views10:07
Открыть/Комментировать