Corriger le bug de background-attachment: fixed sous Safari avec une solution 100% CSS

Si vous avez déjà essayé d’utiliser background-attachment: fixed pour un effet de parallaxe, vous avez peut-être remarqué que cela fonctionne bien sur Chrome, Firefox et Edge, mais que Safari pose problème. L’effet peut être saccadé, ne pas s’afficher correctement ou même ne pas fonctionner du tout.

Après plusieurs tests, j’ai trouvé une solution 100% CSS qui fonctionne parfaitement sous Safari, sans utiliser de JavaScript. Cet article explique le problèmepourquoi Safari réagit ainsi, et surtout comment le corriger proprement.

Voici la video exemple (à gauche le problème, à droite, le site corrigé) :

Pourquoi background-attachment: fixed ne fonctionne pas bien sous Safari ?

Contrairement aux autres navigateurs, Safari ne gère pas toujours bien le rendu des arrière-plans fixes. Voici pourquoi :

  • Optimisation excessive du rendu : Safari essaie d’économiser des ressources en ne mettant pas toujours à jour le fond en fixed comme il le devrait.
  • Mauvaise gestion du background-attachment: fixed sur certaines configurations (notamment les écrans Retina).
  • Problème de synchronisation avec le défilement inertiel sur macOS et iOS.

Symptômes courants sur Safari

✔ L’effet fixed est absent ou remplacé par scroll.
✔ Le fond semble figé à un endroit incorrect.
✔ Des saccades ou un mauvais rendu apparaissent pendant le scroll.


La solution 100% CSS qui fonctionne partout

Au lieu d’utiliser background-attachment: fixed, on va le simuler avec un ::before en position: fixed. Cette approche est plus fiable et plus fluide sur tous les navigateurs.

Le HTML :

<div class="parallax-container">
    <div class="parallax" style="background-image:url('/photos/ma_photo_de_fond.jpg')"></div>
</div>

Le CSS :

.parallax-container {
    position: relative;
    width: 100%;
    height: 400px; /* Ajustez la hauteur selon vos besoins */
    background-color: silver;
    overflow: hidden; /* Empêche les débordements */
}

.parallax {
    height: inherit;
    left: 0;
    top: 0;
    width: 100%;
    clip-path: inset(0 0 0 0); /* Garde l'image confinée */
}

.parallax::before {
    content: "";
    position: fixed;
    width: 100%;
    height: 100vh;
    top: 0;
    left: 0;
    background: inherit; /* Utilise l'image définie dans le bloc parallax */
    /* on peut aussi définir l'image ici-même en CSS */
    background-repeat: no-repeat;
    background-position: center center;
    background-size: cover;
}

Pourquoi cette solution fonctionne

Elle utilise un élément ::before en position: fixed pour simuler background-attachment: fixed.
L’image est définie dans le HTML, ce qui permet de la changer facilement sans toucher au CSS.
Le clip-path: inset(0 0 0 0); empêche les débordements et garde l’image bien cadrée.
Compatible avec Safari, Chrome, Firefox et Edge sans saccades.

See the Pen Fixed-background working on safari and iOS by Philippe Blanc (@crea64) on CodePen.


Cette solution remplace efficacement background-attachment: fixed sur Safari tout en restant 100% CSS. Elle est légère, rapide et facile à intégrer sur n’importe quel site.

Si vous avez rencontré ce problème sur Safari, testez cette méthode et dites-moi en commentaire si elle fonctionne bien chez vous !

Partagez cette astuce avec d’autres développeurs qui rencontrent le même problème.

Solution aux domaines locaux qui ne fonctionnent pas

Vous faites du développement de site internet et testez vos sites sur un environnement de travail en local.
Vous êtes habitués à créer des virtualHost et pourtant… celui-ci ne veux pas fonctionner ! Vous avez cherché des heures, puis vous êtes tombé sur ce site. Effectivement, il y a peut être la solution juste dessous.
Si votre navigateur vous affiche un message tel que celui-ci :

Bad Request
Your browser sent a request that this server could not understand.

Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.

C’est peut être que vous avez utilisé un underscore ( _ ) dans le nom de domaine local.

Recommencez votre paramétrage Host / VHost sans le Underscore et cela devrait rentrer dans l’ordre.

Notez que ce bug est assez récent car j’ai créé dans le passé des virtualhost contenant des underscores et qui fonctionnaient très bien ! 

J’espère que vous avez réglé votre problème et que cette solution vous aura dépanné.

Home Page Master 2015

 

homepagemaster2015

Le 18 septembre 2015 a eu lieu la première édition des #HomePageMaster2015 lors de la journée tremplin e-commerce organisée par la CCI de Bayonne.

Le challenge : « 24H pour relooker la page d’accueil d’un e-commerce national. »

Le e-commerce à relooker : pecheur.com

 

 

 

presentation crea64Après 24 Heures, chaque participant a présenté son travail à l’assemblée présente qui a ensuite voté pour élire la meilleure des créations.

Les gagnants dans l’ordre :

  1. Redbox
  2. ohmyweb
  3. Nsi/HO5
  4. Crea64
  5. Samkern
  6. Jessica Etchegaray

Continuer la lecture