Ответы пользователя по тегу CSS
  • Как добиться плавности высоконагруженной анимации?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Так как я уже убитый после рабочего дня и войны с кастомными скроллбарами, то полного ревью по веб-перфу дать не смогу. Но по мелочам пробежаться могу.
    1) Вот так выглядит таймлайн сайта, после полного скролла вниз, а затем вверх (смотреть на верхний график).
    YjaRo9S.png
    Если в кратце, то все печально :) На всех переходах фпс стабильно падает до 30 (и иногда ниже). Ваша цель - 60 фпс в среднем, и не ниже 40 на паре-тройке фреймов при переходах.
    Если вы чайник в замерах веб-перформанса с помощью таймлайна (и дев тулс вообще), то вам сюда:
    а) https://developers.google.com/web/fundamentals/per... - святой грааль.
    б) https://www.udacity.com/course/browser-rendering-o... - по сути дела дополнение к текстовому варианту, но только в виде отличных видео и мини-тестами. Там же на udacity есть похожил курс от Григорика.
    в) Искать другие годные статьи в дайджестах и блогах, пилить/изучать демки и все такое.
    2) Очень беглый осмотр показал, что у некоторых элементов анимация происходит с помощью изменения таких свойств как left например (вылезающий и жутко тормозящий блок справа на 3 странице). В 90% случаев для анимации движения/перемещения/отображения прилично использовать только transform/opacity, особенно когда речь идет о больших элементах. С анимацией всяких left/top/width и подобных вещей для больших элементов можете вообще забыть о 60фпс.
    3) Основную ставку вам надо будет делать на создание отдельных слоев для элементов, проще говоря юзать translateZ/backface-visibility. Но только юзать это надо с умом, и каждый раз все профилировать через таймлайн. В веб-перфе есть одна крылая фраза "Tools, not rules".
    Ответ написан
  • Какой принцып работы якорьного progress bar-a?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Примерное описание логики без реального кода:
    1) Получаете размеры секций, на которое будут ориентироваться эти навигационные якоря (height/offsetTop).
    2) Навешиваете на глобальный скролл обработчик, который на основе текущего scrollTop и сравнения с размерами и пункта 1 будет понимать, в какой же секции вы сейчас находитесь и навешивать к нужному кружочку класс active.
    3) Полируете все это дело. Нужно будет навесить обработчик на window resize, чтобы пересчитывать размеры из пункта 1. Можно будет даже сделать, чтобы из одного кружка шла линия прогресса в другому (при разных размерах секций), но это уже из разряда извращений :)
    Ответ написан
    Комментировать
  • Как сделать углы на css?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Итак, решения которые приходят в голову:
    1) CSS clip-path: polygon(%цифры или проценты%) - по идее самое идеальное решение, но поддержка браузерами вас вряд ли порадует.
    2) SVG. То есть берете прозрачный див, внутрь кладете SVG polygon/path с position: absolute и примененным к нему svg фильтром для box-shadow. Адаптивности можно легко добиться с помощью аттрибутов viewBox и preserveAspectRatio. Ну и соответственно поверх свг идет контент, который лежит внутри дива.
    3) Картинка. Ужасный вариант, забудьте :)
    4) Какие-нибудь адские хаки с :before, :after. На фоне свг вообще не боец.

    Сырая демка - codepen.io/suez/pen/2d7d1453a9d842b85ae307e4244cc237
    Ответ написан
    2 комментария
  • Как реализовать 3D изображения на сайте?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Что конкретно вы подразумеваете под 3D изображением? Если речь идет о какой-нибудь полноценной 3D модели, то вам нужен WebGL (либо архимаги 2D канваса или 3D-css без поддержки IE). Если же речь идет о чем то плоском, что нужно вращать в 3d, то можно на css+js сделать.
    Ответ написан
    1 комментарий
  • Под какие основыные размеры настраивать CSS @media screen?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Многое зависит от типа вашего сайта. Если речь идет о каком-нибудь контентном сайте (новости/блог/что-то еще с разношерстной структурой) то тут не обойтись без нескольких мобильных диапазонов (мелкие мобильники, лопаты, планшеты). Если же речь идет о каком-нибудь простом лэндинге, где вся информация представлена "линейно" в вертикальном потоке, то без особых проблем можно взять за основу один брейкпоинт max-width: 921px и делать адаптив под него. + если вы хотите сделать не абы что, вам понадобится дизайнер, который вам нарисует хотя бы мокап мобильной версии.
    Ответ написан
    Комментировать
  • Какие недостатки, неудобства или проблемы могут быть при использование AMCSS?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Если бы увидел, как кто-то на проекте юзает эту методику - убил бы тут же.
    Ответ написан
  • Обязательно ли быть верстальщиком, чтобы устроиться на работу Junior Frontend'ером?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Верстка и фронтенд это как бы неразделимые вещи. Просто при запиливании каких-нибудь SPA приложений можно обойтись css фреймворком и почти все время уделять js-коду, но от верстки макетов вам никуда не уйти, если речь идет о чем то нормальном.
    Тоже ненавидел psd>html раньше, но обожал обычную верстку (запиливать демки на кодпене так сказать "из головы" или по картинке). Сейчас без проблем и агонии верстаю из psd, как оказалось я просто не умел адекватно пользоваться фотошопом (да и щас конечно не мастер) и мне не особо хотелось этому учиться. Сейчас на руки попадают макеты от хороших дизайнеров, где все удобно и качественно сделано + я адекватно использую инструменты фш = верстка идет отлично. Конечно этот процесс все равно намного более медлителен и приятен, чем запиливание демок, но за это хотя бы платят отличные деньги :)
    Ответ написан
    1 комментарий
  • Как сделать такие кнопки?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    codepen.io/suez/pen/b7033b508fa221e1fbe4a9843a4a67fd
    Если SASS непонятен, в css секции кликните кнопку View Compiled.
    Я сделал не анкором, а button элементом. Суть кнопки простая - белый текст, синий бордер, прозрачный фон. С помощью :after делается фон, и при :hover этот :after анимирует scale() (выше 1.5) и изменение opacity до 0. Пилил на глаз, в их код не смотрел.
    Ответ написан
    Комментировать
  • Как сверстать дерево комментариев?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    За пример для подражания я бы взял https://disqus.com (там прямо на главной есть страницы, на которых комменты дискаса внизу).
    Смотрите как что сделано у них.
    По поводу большой вложенности - у всех нормальных систем комментариев есть определенный лимит на вложенность, у дискаса лимит вроде как равен 4, после чего комментарии этой ветки начинают идти ровно один под другим.
    Ответ написан
    Комментировать
  • Можно ли использовать единицы измерения rem (root em) вообще для всего в CSS?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Делаю вот так:
    html, body {
      font-size: 62.5%; // 1rem = 10px и никакой попаболи как с EM
    }

    И верстаю все только в rem уже более полугода (за исключение тонких бордеров в 2-3px и подобных микро-вещей, которые при снижении font-size для html, body могут выдавать становиться тоньше, чем надо).
    Главная фишка - возможность скейлить всю верстку под разные разрешения. Хочется сделать все на 25% больше для мониторов шире 1600px? Просто пишешь:
    html, body {
      @media (min-width: 1600px) {
        font-size: 78.125%;
      }
    }

    И вся верстка магическим образом идеально скейлится. Тоже самое касается и понижения, очень удобно в адаптивной верстке.
    Недостатки у rem есть, но они безобидные для нормальных людей - ie9+ и баг с небольшой неточностью приема 62.5% в каких-то версиях ie (вроде как в 10), что в общем то не заслуживает внимания.
    Ответ написан
    4 комментария
  • Как временно убрать css transition?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Мой ответ является расширенной версией ответа Илья Шатохин про добавление класса .no-transition.
    И он в общем то полагается на костыль, но не настолько ужасный как setTimeout.
    .no-transition {
      transition: none !important;
    }

    Затем в js пишем нечто подобное
    elem.classList.add("no-transition");
    var triggerLayout = elem.offsetHeight;
    // действия с элементом которые произойдут мгновенно

    Суть такова, что работа с DOM в браузере оптимизирована таким образом, что он "группирует" все изменения и потом применяет их одновременно. Но, если в js коде обращаться к свойстам элементов, которые триггерят лэйаут, эти группы будут "дробиться" в этом месте вызова. В итоге вот эта самая строчка "var triggerLayout = elem.offsetHeight;" вызывает триггер лэйаута и операция с элементом происходит уже так, словно к нему добавлен класс без транзишена. Точно таким же образом например анимируются элементы с display: none, которые надо показать с помощью изменения opacity. Вначале вы меняете свойство display, затем триггерите лэйаут, затем добавляете класс изменяющий опасити - у вас происходит анимация. Без триггера элемент просто моментально появится.
    Таблицу css триггеров можно найти тут - csstriggers.com
    + вот тут еще пишут про это gent.ilcore.com/2011/03/how-not-to-trigger-layout-...
    Сам по себе лэйаут нужно триггерить только тогда, когда это является лучшим способом реализации анимации, ибо это влияет на производительность. На эту тему (и многие другие вещи) вам сюда - https://developers.google.com/web/fundamentals/per...
    Ответ написан
  • Как задать анимацию блоку?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    codepen.io/suez/pen/dcbdd6e94968897628766796c3956fa6
    Первый блок со старта имеет размеры 600х300, но невидим, ибо уменьшен с помощью transform: scale(0);
    Этот метод работает быстро и он никак не будет задевать рядом стоящие элементы (они со старта будут расположены так, как будто рядом с ними стоит блок 600х300), то есть минимум нагрузки при анимации. Но из-за этого вы получите sub-pixel rendering неточность, и границы будут чуточку размытыми. Так же важно уточнить, что я использую transform-origin: 0 0; для того чтобы анимация увеличения происходила с левого верхнего угла. Если этот параметр убрать, то увеличение будет происходить относительно центра.
    Второй блок имеет на старте ширину/высоту по нулям и при наведении на картинку происходит транзишен этих параметров до заданных величин. Соответственно этот процесс будет задевать все элементы в своем потоке + транзишен размеров само по себе затратное затратное действие и если внутри будет текст, то во время анимации с ним будут происходить страшные вещи.
    Ответ написан
    Комментировать
  • Как быстро войти в технологический пик html5 верстки?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Вариант с обучением через верстку .psd макетов вас до "пика" не доведет. Максимум до уровня рядового "верстальщика". Сверстать статику может каждый второй, кто хоть иногда этим занимается. Если вы нацелены на реальный "пик", то вам надо учиться на основе живых примеров уровня www.awwwards.com www.cssdesignawards.com и www.thefwa.com
    Копайтесь, смотрите что как сделано, пытайтесь сами воссоздавать отдельные куски "не смотря под капот" (то есть только на основе того, что вы видите, не залезая в F12). Но перед этим вам надо будет нагнать основы, то есть все что связано с css трансформами, нестандартными лэйаутами и другими трендами дизайна, а то иначе когнетивный диссонанс вам обеспечен. После этого будете долго практиковать анимации, свг, 2d-canvas и в самом конце возможно даже WebGL. Обязателен к употреблению codepen.io
    Ну а если прочитав все это вы вдруг поняли, что вас на самом деле не интересуют всякие нестандартные промо-сайты, а вам просто надо уметь верстать странички для стандартных интернет-магазинов или еще чего подобного, то вам достаточно будет потратить 1-2 месяца на чтение вводных статей и начать штамповать сайты на бутстрапе. Вот.
    Ответ написан
    3 комментария
  • Какие ресурсы (желательно на русском) можно использовать для изучения применения svg в веб-разработке?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    По собственному опыту скажу, что с русскими ресурсами по свг все плохо. Знаю что Yoksel иногда пишет про свг вот тут (css.yoksel.ru) и знаю такую вот вводную.
    По англоязычным источникам:
    1) Сборная солянка №1
    2) Сборная солянка №2
    3) tutorials.jenkov.com/svg/index.html - много раз выручал этот сайт. Правда попадал я на него обычно с гугла, полностью все не читал.
    4) sarasoueidan.com/articles/index.html - ищите по SVG. Есть очень много отличнейших статей, прям эталон.
    5) Статьи на https://css-tricks.com/
    6) Конечно же великий tympanus.net/codrops
    7) Ну и самое самое важное - постоянно пилить демки и смотреть как пилят другие. Чекайте awwwards и подобные сайты, просматривайте codepen. На правах саморекламы - codepen.io/suez/tag/svg (изучаю свг третий месяц, полет нормальный).
    Ответ написан
    Комментировать
  • Как сделать тень у div четырехугольника?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Если вы хотите использовать нестандартные формы, да еще и при этом делать для них правильные тени, то вам поможет только svg. Я не уверен насчет того, можно ли это реализовать с помощью какого-нибудь svg-mask, но вот для отдельного svg элемента тень делается легко.
    Так что в вашем случае это скорее всего выглядит как явный оверкилл, и эту самую тень лучше симулировать с помощью :before допустим.
    На случай если вам интересна тема с свг, я вот даже недавно делал демку с динамической тенью для svg (треугольник по центру) - codepen.io/suez/pen/GgGMGo
    *Примечание для комментаторов оригинального сообщения: нет, box-shadow не поможет для элемента, со скошенными углами, сделанными с помощью border. Тень будет рендерится прямоугольной, относительно width/height объекта.
    Ответ написан
    8 комментариев
  • Как решить проблему с SVG?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    По ходу нашел решение на основе этого stackoverflow.com/questions/19076655/svg-sprite-ba...
    В общем в background-size: необходимо указывать не только x но и y величину. На основе того, что у вашего оригинального svg спрайта (gamma.antikvarus.ru/themes/frontend_v2/images/svg/...) значения 960/560 (основываясь на viewBox), а на сайте у вас background-size: 424px; то в итоге получил такое значение
    background-size: 424px 247px;
    Как только его поставил, позиция svg стала одинаковой в хроме и фф, а если точнее, то стала как в ff, то есть смещенная вверх.
    Тестировал на основе иконки логина (Вход), у которой по умолчанию было background-position: -65px -28px;
    Вот так с измененными значениями (-22px вместо -28) выглядит в хроме
    XXAwS7e.png
    а так в FF
    IwmW7BX.png

    Так что просто добавляете y значение для background-size и увеличиваете y значение background-position на 6px.
    Ответ написан
    2 комментария
  • Почему не работает filter invert в IE11?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Да потому-что он там и не работает caniuse.com/#feat=css-filters
    С помощью css не решите проблему для 11 осла, вам нужна какая-нибудь либа для работы с изображения на канвасе.
    Ответ написан
    2 комментария
  • Как сделать движущиеся полоски на заднем фоне?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Сделано это с помощью canvas'а, размещенного по центру. js у них минифицированный, так что вам самим все придется писать. А уж как это написать, ну это уже совсем другая история, и тут вам вряд кто-то будет такое кодить :)
    Ответ написан
    Комментировать
  • Vh - px. Как правильнее реализовать?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    1) calc про который вы уже написали сами
    2) Js (так себе вариант)
    3) Использовать padding-top: 120px для header, а nav поместить вверху с position: absolute. Внутри header создать блок с height: 100%, он в свою очередь благодаря паддингу родительского элемента займет все оставшееся пространство, вычитая паддинг. И там уже делайте что-хотите.
    Естественно у header должен быть position: relative и для элементов должен быть задан box-sizing: border-box;
    Ответ написан
    6 комментариев
  • Как вы делаете адаптивные SVG элементы?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Адаптивными svg элементы делаются с помощью атрибутов viewBox и preserveAspectRatio.
    Выбираете какой-нибудь удобное вам разрешение, например 1600*1080, хардкодите внутри этого svg элементы polygon с координатами, чтобы все получилось как надо. Потом собственно ставите viewBox="0 0 1600 1080" и ваш svg элемент начинает адекватно тянуться под любые разрешения.
    После этого выставляете второй аттрибут, допустим в значение preserveAspectRatio="xMidYMid slice" (другие варианты сами изучите). Он будет отвечать за то, чтобы ваш свг смотрелся нормально при нестандартных разрешениях, на квадратных мониторах и прочих странных моментах.
    Захардкодить координаты двух простых полигонов - элементарное дело. Я вообще от безделья сложные арки и дуги хардкожу, так сказать увлекаюсь "рисованием циферками", ибо боженька не одарил меня навыками обычного рисования :)
    Ответ написан
    Комментировать