позиция: Sticky снова в Chrome

Четыре года назад Эрик Бидельман создал довольно удивительный пост в блоге о том, что position: sticky попал в WebKit , который в то время был движком, на котором работал Chrome (а также многие другие браузеры, включая Safari). Год спустя, и к большому ужасу веб-разработчиков, мы удалили position:sticky из Chrome, потому что «текущая реализация не разработана таким образом, чтобы хорошо интегрироваться с существующей системой прокрутки и компоновки».

Мы всегда хотели вернуть его в Chrome, поскольку ошибка гласила: «Как только мы приведем в порядок наш прокрутку и компоновку, нам следует вернуться к position: sticky и реализовать функцию таким образом, чтобы она хорошо интегрировалась с остальной частью движка». Мета-ошибка , отслеживающая реализацию, работала с 2013 года.

Отличная новость заключается в том, что начиная с Chrome 56 (бета-версия по состоянию на декабрь 2016 г., стабильная версия по состоянию на январь 2017 г.) position: sticky теперь снова доступна в Chrome.

Что такое position:sticky?

Потребовалось некоторое время, чтобы добраться сюда, так почему же я так этому рад?

position:sticky — это атрибут позиционирования CSS, который позволяет вам закрепить элемент в области просмотра (т. е. прикрепить его к верхней части экрана), но только когда его родительский элемент виден в области просмотра и находится в пределах порогового значения. Если он не закреплен в области просмотра, элемент будет вести себя так, как будто у него position: relative . Это очень хорошее и простое дополнение к платформе, которое устраняет необходимость использовать JavaScript в обработчике событий onscroll только для того, чтобы закрепить элемент в верхней части области просмотра.

Вот как это выглядит в моем блоге . Это позволяет мне держать заголовок текущего раздела вверху экрана, пока вы читаете мои довольно длинные и трудоемкие статьи :\

Чтобы реализовать эту функцию, укажите, что атрибут position должен иметь значение sticky на элементе, который вы хотите, чтобы он был, э-э, застрял. Кроме того, вы также можете добавить смещение в том месте, где он должен быть застрял.

    h3 {
      /* Element will be 'fixed' when it ... */
      position: sticky;
      /* ... is 10px from the top of the viewport */
      top: 10px;
    }

Предыдущий пример зафиксирует элемент <h3> на 10px от верха области просмотра. Чтобы зафиксировать его непосредственно в верхней части области просмотра, нужно задать атрибут top как top: 0px .

Поддержка этой функции довольно сильная. Она доступна в Chrome (ура), Firefox и Safari. Вот более подробная информация о position:sticky :