Итак, position: sticky
это круто, верно?И так же Angular, верно?Использование обоих в сочетании с Firefox и Chrome отлично работает.Проблема начинается с Safari.
Если вы создаете компонент Angular, у которого в качестве первого элемента в шаблоне есть элемент position: sticky
, то Safari не знает, как с ним справиться.Пример:
AppComponent:
@Component({
template: '<sticky-component></sticky-component>'
})
export class AppComponent {}
StickyComponent:
@Component({
selector: 'sticky-component',
template: '<div class="sticky">Should be sticky</div>',
styles: [
`
.sticky {
position: sticky;
position: -webkit-sticky;
top: 0;
}
`
]
})
export class StickyComponent {}
Это создаст DOM, например:
...
<sticky-component>
<div class="sticky"></div>
</sticky-component>
...
Если вы физически пишете HTML без , то <sticky-component>
прекрасно работает в Safari.Но так как родительский элемент липкого элемента является хост-элементом, это терпит неудачу.Попытка добавить липкий CSS к элементу хоста, похоже, тоже не работает.Кто-нибудь сталкивался с этой проблемой раньше или есть какое-то решение?Я знаю, что могу реализовать эту закрепленную функциональность, используя прослушиватели событий в Angular, но position: sticky
ооочень проще.
Пример StackBlitz: https://stackblitz.com/edit/angular-jede8a (работает в Chrome / Firefox, но не в Safari)