Задать вопрос
  • Как скрыть блок с видео, чтобы оно не подгружалось?

    @AlexaZem
    Можно скрыть этот блок через display: none.
    Видео и другие файлы подгружаются через атрибут src.

    Поэтому можно изначально в src не передавать url, а подкидывать JS-ом в нужных вам ситуациях.
    Ответ написан
    Комментировать
  • Бегущая линия по лендингу?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    бежит линия (ломаная), добегает до блока - он появляется и бежит дальше вниз по лендингу

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

    werty1001
    @werty1001
    undefined
    Проблемы начинаются когда нужно делать адаптив. Между "плюсами" должны появиться вертикальные отступы.

    Я просто сделал елемент сетки grid__gap, который миксуется к колонке для определенных размеров.

    Пример:
    <div class="grid page__layout">
      <div class="grid__row">
        <div class="grid__col grid__col--xs-12">...</div>
        <div class="grid__col grid__col--xs-12 grid__gap-xs">...</div> // Колонка с оступом для xs
      </div>
    </div>


    Что касается отступов заголовков и секций, то в целом у нормального дизайнера они одинаковые, по крайней мере типовые секции точно, для остальных можно сделать модификатор или если секция очень кастомная примиксовать отдельный блок.
    Ответ написан
    2 комментария
  • Как сделать анимацию блоков при скроллинге на чистом js?

    alsolovyev
    @alsolovyev
    ¯\_(ツ)_/¯ Enjoy life, Eat well & Laugh often
    1. Чтобы не слушать каждый раз какое-то событие(в Вашем случае scroll), нужно написать debounce функцию (вот отличное описание работы и сама функция). Которая является оберткой к Вашей функции onscroll , и не дает выполнять ее пока не пройдет N секунд.

    2. Вам нужно почитать про анимацию в css
    В краце: стили top, left, margin и тп затрачивают больше CPU потому, что браузеру нужно пересчитывать позицию всех элементов относительно анимированного. Если их большое кол., то и анимация будет дерганой.
    Поэтому стоит использовать ряд других стили: opacity, transform. Их свойства никак не влияют на остальные блоки.(в гугле много ссылок по этой теме. например)

    и не задавайте transition: all

    Теперь все вместе(накидал пример на Jsfiddle):
    1. Задам вашему блоку стили:
    .image{
      /* ваши стили */
      
      /* сдвигаем на 100px вниз и задаем прозрачность 0*/
      transform: translate3d(0, 100px, 0);
      opacity: 0;
      /* ******* */
      
      transition: opacity .3s, transform .3s;
    }
    .image.is-shown{
      /* возвращаем в обычное состояние */
      transform: translate3d(0, 0px, 0);
      opacity: 1;
    }


    const image = document.getElementById('image');
    const imageFromTop = image.getBoundingClientRect().top;
    
    const showOnScroll = debounce(function() {
    	// How much scroll from top
    	let scrollTop = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
    	// Check scroll position
    	if (imageFromTop < scrollTop + 500) {
    		image.classList.add('is-shown')
    
    		// Remove this listener for better pref
    		window.removeEventListener('scroll', showOnScroll, false);
    	}
    }, 30);
    
    window.addEventListener('scroll', showOnScroll, false);
    
    function debounce(func, wait, immediate) {
    	var timeout;
    	return function() {
    		var context = this, args = arguments;
    		var later = function() {
    			timeout = null;
    			if (!immediate) func.apply(context, args);
    		};
    		var callNow = immediate && !timeout;
    		clearTimeout(timeout);
    		timeout = setTimeout(later, wait);
    		if (callNow) func.apply(context, args);
    	};
    };


    Писал по памяти, но должно работать...
    Это если применить Вашу логику к решению проблемы.

    В либах, вродь, делают через requestAnimationFrame . Можно посмотреть в исходниках(там и комменты есть). Вот хорошая scrollReveal
    Если будете сами писать через requestAnimationFrame, то не забывайте, что нужно использовать не больше 2-3 реквеста на страницу . Иначе будет грузить компьютер сильно
    Ответ написан
    Комментировать
  • Как сделать такой паралакс?

    Ronnie_Gardocki
    @Ronnie_Gardocki
    Я у мамы фронтендщик.
    Писать код очень лень, напишу примерно возможные варианты:
    1) Использование css blend-modes. Но мне кажется что с неоднородной картинкой не прокатит такое.
    2) Дублировать этот заголовок, поменять его цвет, поместить его внутрь скошенного контейнера, повернуть его в обратную сторону с помощью skew (вы ведь скошенный контейнер через skew будете делать) и с помощью translateY все это дело двигать (аля контейнер двигается вверх, а заголовок вниз). В виде описания возможно выглядит сложно, но как только вы накидаете какой-нибудь кривой пример, станет куда проще.
    Вот например 2 демки с похожим эффектом маски (только без скошенных углов, но это по сути дела 1 свойство добавить):
    codepen.io/suez/pen/XJGOyL - здесь текст в пунктах меню "перекрашивается" в белый, хотя на самом деле внутри перемещающегося блока просто расположен дубликат списка, который движется в обратную сторону, во время движения самого блока.
    codepen.io/suez/pen/kqlIJ - моя самая первая демка на эту тему, код там скорее всего жутковатый, но зато можно легко понять как работает этот mask эффект через F12.
    Ответ написан
    Комментировать
  • Сделать такую карту SVG?

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

    Слой номер два: Плашки с текстом. Их удобно не в картинку пихать, а верстать на html/css и располагать поверх картинки с помощью абсолютного позиционирования или трансформаций. Если сообразить для картинки viewbox='0 0 100 100', то даже считать ничего не нужно будет.

    Дальше на css на :hover/:focus по областям показываете плашки с текстом. Можно это на :nth-child построить или еще как-нибудь - смотрите, что будет удобнее. Ну и самим областям меняете fill на оранжевый.

    P.S.: Можно еще сделать, чтобы в плашках как бы вода с волнами наливалась при наведении мыши, но это уже совсем другая история...
    Ответ написан
    3 комментария
  • Возможно ли реализовать такую тень?

    aliencash
    @aliencash
    Партизан
    Ответ написан
    Комментировать
  • Как изменить курсор на картинку при наведении?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Пытаюсь установить вместо курсора фотографию размером 500 на 500 пикселей и у меня не получается... нужно чтобы он менялся от секции к секции

    Еще пару лет назад в FF было ограничение на размер в 128px, полагаю и в других современных браузерах ситуация схожая. Так что кроссбраузерно вы такую большую картинку туда не впихнете. Альтернативный подход - наоборот, заменять курсор на маленькую прозрачную точку, а сверху вашей страницы класть картинку в виде img, делать ей position: fixed , pointer-events: none и top/left соответствующие координатам мыши. На событие "mousemove" добавить логику, которая будет выбирать и показывать картинку в зависимости от вашей секции и обновлять ее координаты.
    Ответ написан
    Комментировать
  • JQuery - когда создавать плагин, а когда достаточно функции? Можете объяснить?

    @Mysterion
    Когда функций много и они все друг от друга зависимы, то имеет смысл создать плагин.
    Подключить одну функцию и использовать ее - это удобно. Но когда нужно для одной задачи копировать несколько функций, чтобы получить один результат, удобнее скопировать файл и подключить его, использовав несколько функций как одну в плагине.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А проверьте теперь свой скрипт во всех браузерах, начиная с IE8. И под другими операционками. И в мобильных тоже. И встроенным в iframe. И в сочетании с другими плагинами.
    Большой объём - это плата за универсальность.
    Ответ написан
    Комментировать
  • Можно ли узнать насколько нагружена память устройства?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    При использовании "бесконечного скролла" многие почему-то делают только скролл вниз, а про верх забывают. Это архитектурная ошибка. Должно быть как - порцию нового подгрузили, порцию старого выгрузили. В обе стороны. И тогда никаких проблем с затупами не возникнет никогда. От слова совсем.
    Ответ написан
    Комментировать
  • Как разобраться в функциях и не запутаться?

    pavelkarinin
    @pavelkarinin
    Full Stack Web Developer
    Вы должны четко различать понятие функция и указатель на функцию.
    Если очень по-простому, то когда вы пишите так:
    test();
    то вы выполняете данную функцию

    а если так:
    var newTest = test;
    то вы указываете на функцию как на объект, передавая функцию как объект (а не результат ее работы) в переменную newTest
    Ответ написан
    7 комментариев
  • Gulp-imagemin не достаточно хорош для Google PageSpeed Insights?

    Balya
    @Balya
    Люди и технологии
    Используйте mozjpeg - он дает отличные результаты. Вот мой конфиг:

    var gulp   = require('gulp'),
        chalk = require('chalk'),
        plugin = require('gulp-load-plugins')(),
        browserSync = require('browser-sync').create();
    plugin.imagemin.mozjpeg = require('imagemin-mozjpeg');
    plugin.imagemin.pngquant = require('imagemin-pngquant');
    
    gulp.task('img', function () {
    	gulp.src(path.src.img)
    		.pipe(plugin.plumber({
    			errorHandler: plugin.notify.onError("Ошибка: <%= error.message %>")
    		}))
    		.on('end', function(){ plugin.util.log(chalk.cyan('Инициализирован обработчик ошибок изображений')); })
    		.pipe(plugin.imagemin([
                plugin.imagemin.gifsicle({interlaced: true}),
                plugin.imagemin.jpegtran({progressive: true}),
                plugin.imagemin.mozjpeg({progressive: true}),
                plugin.imagemin.optipng({optimizationLevel: 7}),
                plugin.imagemin.pngquant({quality: '85-100'}),
                plugin.imagemin.svgo({plugins: [{removeViewBox: true}]})
            ]))
    		.pipe(gulp.dest(path.build.img))
    		.on('end', function(){ plugin.util.log(chalk.cyan('Оптимизированы изображения')); })
    		.pipe(browserSync.stream());
    });
    Ответ написан
    Комментировать
  • IOS. Почему не блокируется scrolll?

    FLUNKEY
    @FLUNKEY
    самовар
    Никогда не запрещайте скролл таким способом, которым вы пытаетесь (первым).
    Используйте библиотеку scroll-lock для работы с нативным скроллом.
    Так же прочитайте эту секцию, там описана проблема и решения со скроллом в iOS..
    Ответ написан
    4 комментария
  • Что использовать для адаптивной вёрстке?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    для адаптивной вёрстке?

    В современной практике нет разделения на резиновую/адаптивную/отзывчивую верстку - это все единый процесс создания компонентов, которые хорошо выглядят на разных размерах экрана. Ответ на ваш вопрос очевиден: используйте тот инструмент, который хорошо решает вашу конкретную задачу. Не нужно вообще всегда использовать вот этот или вот тот инструмент, потому что кто-то в интернете так сказал. Смотрите на логику поведения/применения ваших конкретных компонентов и выбирайте:
    1. px - если нужно жестко задать размер
    2. % - если размер привязан к чему-то в процентном отношении
    3. vw - если нужно привязать что-то к размеру вьюпорта (например размер шрифта)
    4. vh - то же самое (ну и vmin/vmax туда же)
    5. em - если нужно привязать размер чего-то к размеру шрифта (текущему или родительскому)
    6. rem - то же самое, но глобально (можно использовать везде и для всего)
    7. cm, mm, in, pt, pc - если нужно красиво выводить на печать
    8. ex, ch - не сильно удобные единицы измерения в текущих реалиях
    Ответ написан
    Комментировать
  • Валидация формы на клиенте: html5+js || js-велосипед || jQuery плагины?

    @SimasikS
    Я есть
    На сервере описываются правила валидации для моделей. Потом в js'е делается валидация по правилам с сервера
    грубо говоря как-то так

    validationRules = [{rule : "length > 20", error: "Error"}]
    textField.on("change", (element) => {
      foreach(var rule in validationRules){
       if (!element.Valid(rule.rule)){
        element.Errors.Push(rule.Error);
       }
      }
    })


    Галименько написано, псевдо-кодом, но суть понять можно
    Ответ написан
    1 комментарий
  • Как сверстать элемент в виде буквы с background-image?

    sfi0zy
    @sfi0zy Куратор тега Вёрстка
    Creative frontend developer
    Вы там в комментарии написали:
    Единственная проблема, что в IE11 не работает


    А почему бы не воспользоваться масками? Они вроде как для этого и сделаны, а работать будет во всех браузерах с тех времен, как они вообще начали поддерживать SVG.
    Ответ написан
    Комментировать
  • Лендинг с animate.css?

    @MegaPuxapb Автор вопроса
    о, нашел)
    может кому пригодится.
    https://onepagelove.com/tag/animate-css
    Ответ написан
    Комментировать
  • Объясните как работает position: fixed; когда используется transform?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    кто может объяснить это поведение?

    Спецификация может объяснить:

    For elements whose layout is governed by the CSS box model, any value other than none for the transform also causes the element to become a containing block, and the object acts as a containing block for fixed positioned descendants.


    Добавили элементу transform - все его потомки с position:fixed начинают отсчитывать свое расположение от него. Они начинают считать его своим "внешним блоком", а не вьюпорт или страницу, как это происходит по умолчанию для position:fixed.
    Ответ написан
    3 комментария