Фиксированная шапка

В этой статье расскажу как сделать фиксированную шапку или fixed header. Я делаю его для сайта, на котором вы читаете эту статью 🙂

Делать будем на html, css, jQuery. Если нужно на JavaScript, пишите в комментариях — доработаю.

Первое — html. Шапки у всех могут быть разные внутри, но нам важны классы у самой шапки. То, что внутри — для этого скрипта не так важно.

Код для копирования в конце статьи.

Как это будет работать

У нас есть статичная шапка, нам нужно скопировать её код и положить рядом, но дать ей классы:

  • .header--fixed — привяжем стили скрытия и появления. К этому классу также можно дописать стили для вложенных элементов. Например уменьшить отступы и шрифт, чтобы шапка была компактнее.
  • .js-header-fixed — привяжем к JS. Создаётся с приставкой js- в начале, чтобы никто не заменил код для стилей. Разработчики понимают, что именно этот класс связан с кодом JS и его лучше не менять. Приставка fixed означает, что класс привязывается только для фиксированной шапки.

Я откопировал код своей шапки, для статьи удалил внутренние элементы

<header class="header header--fixed js-header"> <!-- вот тут добавил классы js-header и header--fixed. Остальное не трогал. -->
   <!-- содержимое шапки -->
</header>

Пока мы ничего с ней не делаем, пусть лежит.

CSS

Дальше дело за CSS. Нам нужно прописать стили, чтобы сначала фиксированную шапку скрыть, а при активном классе показать с анимацией.

/* Класс для отдельной фиксированной шапки, которая фиксирует и задаёт скрытие до проявления */
.header--fixed {
  position: fixed; /* фиксированное положение */
  top: 0; /* отступ сверху */
  opacity: 0; /* делаем прозрачной*/
  z-index: -5; /* положение на странице, так мы спрятали её под всеми «слоями» сайта*/

  /* ниже трюк с вырваниванием элементов absolute и fixed */
  left: 50%; 
  transform: translateX(-50%); 
  transition: .3s all; /* плавность анимации появления */

  /* если фиксированная шапка маленька по ширине, можно поставить 100% ширину */
  width: 100%;
}


/* Класс, который добавляется при скролле и показывает шапку */
.header.is-show {
  top: 20px; /* она будет плавно выезжать с 0 до 20 пикселей*/
  opacity: 1; /* делаем непрозрачной */
  z-index: 999; /* устанавливаем индекс так, чтобы шапка была выше всех элементов  */
}

jQuery

С помощью jQuery мы должны понять, насколько пользователь проскроллил и добавить класс к шапке:

  • если расстояние прокрутки сайта больше 1000 пикселей — добавляем класс к шапке
  • если расстояние прокрутки сайта меньше 1000 пикселей — удаляем класс у шапки
// Событие, которое отслеживает скроллит ли человек.
document.addEventListener('scroll', function () {
  if ($(window).scrollTop() > 1000) {
    // если больше 1000 → добавляем класс
    $('.js-header-fixed').addClass('is-show');
  } else {
    // если меньше 1000 → удаляем класс
    $('.js-header-fixed').removeClass('is-show');
  }    
}) 

Смотрим результат

Все вместе без комментариев в коде

html

<header class="header header--fixed js-header">
   <!-- содержимое шапки -->
</header>

css

.header--fixed {
  position: fixed;
  top: 0;
  opacity: 0;
  z-index: -5;

  left: 50%; 
  transform: translateX(-50%); 
  transition: .3s all;

  width: 100%;
}

.header.is-show {
  top: 20px;
  opacity: 1;
  z-index: 999;
}

jQuery

document.addEventListener('scroll', function () {
  if ($(window).scrollTop() > 1000)) {
    $('.js-header-fixed').addClass('is-show');
  } else {
    $('.js-header-fixed').removeClass('is-show');
  }    
}) 

Фокус с себя на клиента

До недавнего времени на созвонах я фокусировался на себе.: что я говорю, как я это говорю, как я выгляжу, уверенно ли я выгляжу, как выглядит моё тело, осанка.

Всё это вело к тому, что я тратил энергию на себя и фокусировался на себе. А на клиенте и его проблемах я фокусировался вполсилы.

Во время таких созвонов не чувствуешь контакта с клиентом и слабо понимаешь задачу. Я боялся созвонов, потому что во время них чувствовалось напряжение. Клиент думал о своих проблемах, я о себе. Коннекта ноль.

С недавних пор я решил попробовать изменить это поведение. Во время звонка на место отображения своего лица ставил программу-блокнот.

Фокус с себя на клиента 1
Справадолжен был быть я

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

Я не видел, как я выгляжу: осанку, лицо, мимику. Я смотрел только на клиента. И я стал не оценивать критически, что я и как я говорю.

Цель одна — видеть, слушать, слышать клиента и его проблемы/задачи. Я его друг, парнёр и пытаюсь помочь ему.

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