• Как оптимизировать загрузку стилей по ссылке https://fonts.googleapis.com/css.....?

    @olegchabak
    Frontend developer
    archelon прав. Действительно надо аж 5 шрифтов? В идеале 2, край 3. Часто подключают целый шрифт, чтобы логотип или слово в одном блоке были правильного начертания. Попробуйте заменить такие места на картинку (если лого), а для сео пропишите там невидимый текст. Или бывает дизайнер просто не учитывает нагрузку шрифтовую и фигачит в макете разными шрифтами, тут надо подумать как обойтись парочкой шрифтов.

    А вообще касаемо PageSpeed Insights, еще не все по ходу знают:
    Чтоб система не ругалась, она хочет при подключении шрифтов ленивую загрузку - font-display: swap, т.е. сначала всё отобразится дефолтными шрифтами, а потом когда загрузятся кастомные, подключатся уже они.
    Типа того:
    @font-face {
      font-family: ExampleFont;
      src: url(/path/to/fonts/examplefont.woff) format('woff'),
           url(/path/to/fonts/examplefont.eot) format('eot');
      font-weight: 400;
      font-style: normal;
      font-display:  swap;
    }
    Ответ написан
    1 комментарий
  • Как сделать оверлей на слайдере?

    @olegchabak
    Frontend developer
    Виталий Киренков @DeLaVega
    Оберните слайдер в див, у которого будет ::before абсолютно спозиционированный. И на нём фон с этой картинкой

    Почти верно, проще всего так и сделать. Но тогда слайдер перестанет быть интерактивным, нельзя будет свайпом по содержимому перелистнуть. Если и не надо, то ОК.

    Выглядит страшненько, но работает =)

    Не работает. Точнее работает пока там слайдера нет. Когда подключите:
    1. .slider__slide будет первым слайдом
    2. .slider__svg-overlay будет вторым слайдом

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

    А чтобы все функции слайдера работали, например можно при ховере на слайдер - оверлей дисплейнонить. Будет резковато меняться, но зато останется функционал слайдера.
    .slider::before {
      content: '';
      display: block;
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: url('img/overlay.png') center / cover no-repeat;
      opacity:  0.5;
      z-index: 1;
    }
    .slider:hover::before {
      display: none;
    }


    Есть еще вариант добавлять этот оверлей не слайдеру , а каждому слайду. Но тогда оверлей будет перелистываться вместе со слайдами. Тут можно просто изменить режим работы слайдера, чтобы слайды не сдвигом появлялись, а через опасити (в owl-carousel есть такое).
    В общем выбирайте)
    Ну или делайте как Виталий предложил.
    Ответ написан
    Комментировать
  • Как объединить все js в 1 запрос?

    @olegchabak
    Frontend developer
    А сайт на чистом html, css, js ?? Или на движке?

    Если второе, то там свои встроенные способы могут быть, как например в битриксе.

    А если первое, то я эту проблему решил изначально разрабатывая сайт на стартовом шаблоне на основе Gulp, где уже прописана логика сбора всех стилей и скриптов в один файл (один js и один css).
    Например, тут видео с мануалом и ссылкой на скачивание.

    Ну а если это не годится, и нужно просто разово минифицировать все свои скрипты и стили, то берёте/скачиваете их все, далее гуглить "минифицировать css online", находим какой-нить такой сайт, вставляем один за другим все стили в поле для вставки, жмякаем на кнопку компиляции и получаем совмещенный минифицированный код. Далее вставить его в свой файл и подключить, старые подключения убрать. Аналогично со скриптами.

    Если среди этого нет нужного ответа, переформулируйте/дополните вопрос.
    Ответ написан
  • Не работает Popup после AJAX?

    @olegchabak
    Frontend developer
    Не совсем по теме, но если кто столкнется с такой-же проблемой в Битриксе, то там это лечится так:

    // инициализируем свою функцию, где инициализируем Magnific popup в нужном нам месте
    // (код инициализации Magnific popup оставил свой, лень, у вас он может отличаться)
    function popap() {
    		$('.popup-gallery').magnificPopup({
    			delegate: 'a',
    			type: 'image',
    			tLoading: 'Loading image #%curr%...',
    			mainClass: 'mfp-img-mobile',
    			gallery: {
    				enabled: true,
    				navigateByImgClick: true,
    				preload: [0, 1] // Will preload 0 - before current, and 1 after the current image
    			},
    			image: {
    				tError: '<a href="%url%">The image #%curr%</a> could not be loaded.',
    				titleSrc: function (item) {
    					return item.el.attr('title');
    				}
    			}
    		});
    	}
    //применяем Magnific popup там где нет ajax
    	popap();
    //самое интересное тут!
    //применяем Magnific popup там где есть ajax
    //данная функция вызовет popap() при включенном аяксе
    	BX.addCustomEvent('onAjaxSuccess', function() {
    		popap();
    	});
    Ответ написан
    Комментировать