--header-offset est lent sur Safari avec des éléments collants (iPadOS 15.6)

Les éléments “collants” (CSS position: sticky) sur Discourse ont toujours été un peu bancals sur mon iPad (9e génération, tout à jour). Ils tremblent un peu lors du défilement, réagissent mal, avec des délais, à un changement soudain de direction de défilement.

Avec l’introduction de la nouvelle barre latérale (également un élément “collant”), cela est devenu plus choquant, car il s’agit d’une partie importante de l’interface utilisateur qui n’est pas très stable.

Le coupable est la variable --header-offset. La suppression de cette variable en CSS rend les éléments “collants” de l’interface utilisateur stables, comme ils le devraient.

L’en-tête a une hauteur de 4em par défaut. J’ai remplacé la variable --header-offset en CSS pour la Timeline, Sticky-avatar et la barre latérale par 4em pour calculer leur position :

.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 est là parce que j’ai une bordure sur mon en-tête, sans rapport)

Je suis curieux de connaître la fonction de cette variable, l’en-tête ne change jamais de hauteur AFAIK, en dehors du changement de taille du texte, et l’utilisation de em pour sa hauteur s’en charge.

Je ne sais pas s’il existe un moyen d’optimiser --header-offset sur Safari mobile, mais ma solution de contournement résout ce petit problème de performance. Discourse a l’air beaucoup plus soigné lorsque les éléments “collants” sont vraiment “collants” :slight_smile:

(Je n’ai aucun problème avec ces éléments sur Firefox ou Chrome sur mon bureau, donc cela pourrait être un bug de Safari)

1 « J'aime »

Cela a tendance à être lié aux thèmes personnalisés, mais comme vous l’avez noté, il existe également des cas comme la taille de la police qui peuvent avoir un impact sur la hauteur de l’en-tête. Dans les cas où l’en-tête est plus haut ou plus bas que la normale, nous calculons le décalage de l’en-tête en JS pour ajuster d’autres éléments de la page afin qu’ils ne tombent pas sous l’en-tête.

Quoi qu’il en soit, je vois le problème, c’est vraiment choquant :

mais si je définis --header-offset sur une valeur statique en CSS :

Peut-être calculons-nous et mettons-nous à jour le décalage trop souvent ? Nous allons enquêter… Safari sur iOS effectue de nombreuses optimisations qui pourraient causer des problèmes.

4 « J'aime »

J’ai juste ajouté un correctif pour cela : FIX: Calculate header offset once on load by pmusaraj · Pull Request #18669 · discourse/discourse · GitHub

Veuillez l’essayer et me faire savoir s’il résout vos problèmes, @vincefrommtl.

7 « J'aime »

Cela a parfaitement fonctionné, merci beaucoup :slight_smile:

2 « J'aime »

Ce sujet a été automatiquement fermé après 4 jours. Les nouvelles réponses ne sont plus autorisées.