• На каких технологиях создан сайт сериала тьма?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Крайне любопытен с точки зрения визуальной составляющей.
    Мне бы хотелось понимать, посредством каких технологий он был сделан.


    Не глядя в код, можно предположить использование следующих технологий:
    1. Волны абстрактные и на фотографиях, шум на фоне - WebGL, шейдеры. Вода на первом экране - скорее всего моделируется как идеальная жидкость, волны на фотографиях - чисто геометрические.
    2. Обведение текста в овал, трилистник с пунктиром, стрелки на карте - SVG, рисование линии по такому принципу.
    3. Плавные переходы между экранами можно делать по-разному, даже забытый модными фронтендерами pjax будет к месту. Можно познакомиться с barba.js - это если не самый популярный, то один из популярных инструментов для работы с плавными переходами. Можно использовать роутеры из SPA-фреймворков, не принципиально. Самое сложное здесь - все синхронизировать.
    4. Карта с персонажами - это может быть обычная верстка, подложенная под канвас с шумом. Самый простой вариант.
    5. Есть небольшое покачивание элементов вслед за мышкой, логично предположить, что это банальная CSS-трансформация на mousemove.
    6. Рисование дуг из точек - это может быть либо SVG, как в п.2, только эта линия будет маской, либо можно это строить как графики.
    7. Ну и немного стандартных CSS-анимаций там тоже есть.


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

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    У вас неправильный синтаксис keyframes - двоеточия и лишние скобки. Должно быть как-то так:

    @keyframes load {
        0% {
            width: 0%;
            background: #f00;
        }
        50% {
            width: 70%;
            background: #00f;
        }
        100% {
            width: 100%;
            background: #0f0;
        }
    }
    Ответ написан
    2 комментария
  • Как сделать так, чтобы тень не налазила на буквы?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Можно заменить тень на фильтр:



    Но такие штуки не отличаются хорошей кроссбраузерностью, а светлое будущее наступило еще не везде, так что в общем случае я бы рекомендовал использовать SVG-картинки.
    Ответ написан
    Комментировать
  • Что означает ошибка Largest Contentful Paint?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    У Google есть инициатива под названием Web Vitals. Они там решили унифицировать разные метрики для сайтов, выделить что-то основное и человеко-понятное (названия, конечно, не очень интуитивные выбрали). Там сейчас есть три основных метрики:

    • LCP - Largest contentful paint. Грубо говоря это время загрузки первого экрана контента (не начала, а именно полной загрузки первого экрана, с картинками).
    • FID - First input delay. Время полной загрузки страницы, по идее со всеми скриптами, после чего можно полноценно взаимодействовать с ней.
    • CLS - Cumulative layout shift. Общая производительность, насколько быстро перерисовывается страница при изменении layout. Это не 1/FPS, но один из факторов, определяющих отзывчивость страницы, насколько она фризит или не фризит.

    Если кликнуть на синюю ленточку рядом с соответствующим пунктом, то откроется страница с более подробной информацией о том, что это такое и на что там стоит обращать внимание.
    Ответ написан
    Комментировать
  • Какие вы используете инструменты для ускорения верстки макетов?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Есть несколько сторон вопроса:

    1. Часто повторяющиеся рутинные действия, вроде копирования файлов, выделения critical css или обработки картинок. Для этого есть gulp + плагины под конкретные задачи.
    2. Разделение кода по модулям, добавление синтаксических возможностей, убирание мусора из кода. Вопрос удобства и ускорения ориентирования по нему. Обычно это pug, less, postcss, в частности autoprefixer, ну и babel, куда без него.
    3. Это все нужно собрать. Тут webpack или снова gulp + плагины. Можно webpack запускать через gulp, как одну из задач. Ну и browsersync, чтобы руками не перезагружать страницу.
    4. Ускорение написания кода. Тут emmet + умение работать с текстовым форматом как таковым. Порой vim с множественными курсорами кажется чем-то космическим.
    5. Страховки от ошибок - w3c validator, stylelint, doiuse, eslint, sonarjs. Сильно недооцененная тема, но экономит много времени на отладке.


    Конкретные инструменты - это всегда вопрос личных предпочтений, но общий посыл должен быть понятен - автоматизируем все, что можно, предохраняемся по максимуму, и потом учимся работать с текстом. А дальше упираемся в то, что руки работают быстрее головы. И чем сложнее дизайн, чем сильнее задачи выходят за рамки повседневности, тем меньше значение скорости, там эти все инструменты скорее дают просто комфорт. Не нужно думать о том, о чем думать не обязательно.
    Ответ написан
    Комментировать
  • Как сделать 3D анимацию такого плана как на сайте?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Саму птицу, как уже верно заметили, можно соорудить на WebGL. Как пример подобной штуки, только без частиц вокруг и без ядреного шума на самих крыльях:
    Ответ написан
    Комментировать
  • Можно ли писать имя класса и ID на русском языке?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Технически можно использовать практически все unicode символы, за исключением самых первых, управляющих. То есть это не только буквы, но и всевозможные символы вроде ∑∜♫ и.т.д. Они могут отсутствовать в каких-то шрифтах, но на функциональность CSS не повлияют. Как говорил Chris Coyier еще 10 лет назад: "yes-it-works-in-IE6™ & yes-it-validates™".

    Другой вопрос - это практичность использования "альтернативных" селекторов. Тут есть несколько минусов:

    • Есть устоявшиеся английские названия для всех стандартных элементов интерфейса и вспомогательных оберток. Использование других названий (в том числе на другом языке) приведет к потере скорости чтения кода, придется привыкать к новым именованиям.
    • Придется постоянно переключаться между раскладками при написании кода. Минус к удобству.
    • В любимой IDE вашего коллеги может быть шрифт, не поддерживающий ваши альтернативные non-ascii символы. Ему будет плохо.


    Так что да, использовать можно, но как только у вас появятся коллеги, ваш код скорее всего начнут сравнивать с языком YoptaScript и вам придется переучиться на использование английского, чтобы "быть как все" и соответствовать общепринятым стандартам.
    Ответ написан
    2 комментария
  • Как сделать эффект волны картинке на gsap?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Поскольку мы видим неравномерные искажения картинки - варианты реализации этого на CSS и SVG отпадают. Единственный вариант - canvas и манипуляции с пикселями. С точки зрения производительности - лучше сразу смотреть в сторону WebGL и шейдеров. В этом контексте задача разделяется на четыре:

    • Отобразить картинку на плоскости в WebGL контексте, оставив по краям немного прозрачности (чтобы был простор для искажений).
    • Волны - это смещения пикселей. Характер может быть разным, но скорее всего будет что-то в духе "смещение пикселя = синус(положение пикселя + время)". Похожий пример есть вот в этой статье.
    • Покраснение - при задании цвета пикселя во фрагментном шейдере увеличиваем значение R в рамках RGBA (в зависимости от времени).
    • Дальше заменяем время на нужный нам параметр (скролл с верха страницы например, ну или что там вам нужно).


    И да, GSAP к шейдерам не имеет никакого отношения. Он может быть применен для изменения упомянутого параметра (который заменяет время), но саму анимацию этот инструмент вам не сделает.
    Ответ написан
  • Почему программисту нужен английский?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Программирование - понятие растяжимое. Есть разные области. Например в рекламных сайтах и вообще в вопросах современной верстки "на острие":

    • Документация к инструментам в 90% есть только на английском.
    • Профессиональная движуха - 99% на английском.
    • Статьи по теме - переводят лишь малую часть, обычно спустя месяцы.
    • Видео лекций и туториалов - не переводят почти никогда.
    • Поиск ошибок в сети - условно треть ответов находится на SO (естественно на английском), треть - на GitHub (в обсуждениях на английском), треть - на англоязычных форумах.


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

    А есть, например, мир 1C. Там все ровно наоборот.
    Ответ написан
    Комментировать
  • Как создать переменную со значением, которое будет обернуто в кавычки?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Есть три варианта:
    const a = '"#512534"';   // <-- Другие кавычки
    const b = "\"#512534\""; // <-- Экранизация
    const c = `"#512534"`;   // <-- Шаблонные строки
    Ответ написан
    3 комментария
  • Как сделать градиент?

    sfi0zy
    @sfi0zy Куратор тега Вёрстка
    Creative frontend developer
    Самый простой и быстрый способ - вставить картинкой. Да, некрасиво, но зато дешево и надежно. В теории можно такую штуку сделать и на чистом CSS с помощью нескольких градиентов, но это дольше и могут возникнуть разные артефакты, которые не всегда получится скрыть. Хотя если фон однотонный и эта штука постоянно в движении, то такой вариант тоже может сработать:
    Ответ написан
    1 комментарий
  • CSS ошибка keyframe?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Вы не указали % у первого фрейма. Безразмерное значение "0" некорректно. Умные браузеры могут добавить символ процента за вас, или могут просто пропустить "дефектный" фрейм, из-за чего будет казаться, что все работает, но полагаться на это не стоит.
    Ответ написан
    Комментировать
  • Не могу спрятать псевдоэлемент за родителя, что не так?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Можно убрать у второй кнопки z-index, он там все равно не нужен:
    .btn1 {
    	// z-index: 1;
    }
    Ответ написан
  • Как реализовать этот кусок шаблона?

    sfi0zy
    @sfi0zy Куратор тега Вёрстка
    Creative frontend developer
    Подобные штуки гуглятся по запросу CSS timeline. Есть неплохая подборка примеров на freefrontend.com, в которой можно набраться идей по реализации.
    Ответ написан
    Комментировать
  • Что может Gulp без плагинов?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Gulp по своей сути - это таск-раннер. Он не умеет ничего, кроме как запускать таски. Он может запускать их последовательно или параллельно, может передавать поток данных от одной таски в другую, может эти данные записать в файл. На этом его возможности заканчиваются. Больше он ничего не умеет. Та функциональность, которую от предоставляет, позволяет удобно организовать большое количество небольших программ, которые могут быть нужны при сборке или деплое проекта, но сами программы его не касаются. Ему сказали запустить - он запускает, не более того.

    Дальше мы уже можем делать программы, таски, под свои задачи, в том числе дополняя их плагинами для Gulp, которые по сути своей - такие же независимые программы, просто соответствующие определенным соглашениям о том, как работать с вводом-выводом данных.
    Ответ написан
    Комментировать
  • Как сделать волну?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Самый простой и универсальный вариант - SVG картинка с белой волной на всю ширину страницы, которая налезает на секцию с фоном. Формат SVG хорош тем, что для такой простой по форме и однотонной штуки, он весит меньше, чем растровая картинка нужного размера. А еще есть готовые инструменты, вроде getwaves.io, для генерации таких волн. Разместить картинку так можно по-разному, в зависимости от соглашений по коду в проекте - отрицательные марджины, абсолютное позиционирование и.т.д.
    Ответ написан
    Комментировать
  • Как реализовать данную полосу?

    sfi0zy
    @sfi0zy Куратор тега Вёрстка
    Creative frontend developer
    В соседнем ответе есть решение с помощью дополнительного элемента и псевдоэлементов. Альтернативно можно нарисовать такой бордер с помощью градиентов на фоне:
    Ответ написан
    1 комментарий
  • Как сделать такую штуку?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Вариантов в целом много. Если пойти по пути псевдоэлементов с абсолютным позиционированием и аккуратного выравнивания, то получится что-то такое:
    Ответ написан
    Комментировать
  • Почему данный пример не работает?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Вы забыли подключить jQuery UI. На CodePen библиотеку можно легко подключить введя ее название в поле "search CDNs..." в окошке для подключения скриптов - она есть на cdnjs, так что вы сразу увидите ее в выпадающем списке.
    Ответ написан
    5 комментариев
  • Прорисовка SVG?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Нужно с помощью метода getTotalLength() узнать длину path (она равна 3904) и подставить ее везде, вместо вашего магического числа 1000.
    Ответ написан
    5 комментариев