Sticky-Elemente (CSS position: sticky) auf Discourse waren auf meinem iPad (9. Generation, alles aktuell) schon immer etwas hakelig. Sie zitterten beim Scrollen leicht, reagierten schlecht und verzögert auf plötzliche Richtungswechsel beim Scrollen.
Mit der Einführung der neuen Seitenleiste (ebenfalls ein Sticky-Element) wurde es noch schlimmer, da es sich um einen so großen Teil der Benutzeroberfläche handelt, der nicht sehr stabil ist.
Der Übeltäter ist die Variable --header-offset. Das Entfernen dieser Variable in CSS macht die Sticky-Elemente der Benutzeroberfläche stabil, wie es sein sollte.
Die Kopfzeile ist standardmäßig 4em hoch. Ich habe die Variable --header-offset in CSS für die Zeitleiste, den Sticky-Avatar und die Seitenleiste durch 4em ersetzt, um ihre Position zu berechnen:
.d-header
{
box-sizing: border-box;
height: 4em;
}
.sidebar-wrapper
{
top: 4em;
height: calc(100vh - 4em);
}
@media screen and (min-width: 925px)
{
.container.posts .topic-navigation
{
top: 6em;
}
}
.topic-post.sticky-avatar .topic-avatar
{
top: 3.75em;
}
(box-sizing ist vorhanden, da ich einen Rand an meiner Kopfzeile habe, nicht relevant)
Ich bin neugierig auf die Funktion dieser Variable. Die Kopfzeile ändert ihre Höhe meines Wissens nach nie, außer bei Änderung der Textgröße, und die Verwendung von em für ihre Höhe berücksichtigt dies.
Ich weiß nicht, ob es eine Möglichkeit gibt, --header-offset auf Safari Mobile zu optimieren, aber meine Problemumgehung behebt dieses kleine Leistungsproblem. Discourse sieht viel polierter aus, wenn Sticky-Elemente wirklich sticky sind ![]()
(Ich habe keinerlei Probleme mit diesen Elementen auf Firefox oder Chrome auf meinem Desktop, daher könnte es ein Safari-Bug sein)