Ce que c’est
Un site vitrine d’une page pour un showroom de voitures de sport et de luxe : héros en pleine image avec barre de recherche, panneau de chiffres, six fiches voiture, quatre étapes d’achat, carrousel d’avis, deux showrooms, quatre articles, deux appels à l’action, pied de page à cinq colonnes. Une seule page, un seul fichier HTML.
Ce qui fait ce site, c’est son héros : une photographie pleine largeur sur laquelle trois couches sont empilées dans une seule propriété CSS — un assombrissement plat de 40 % pour que le blanc tienne, un fondu vers le blanc sur le dernier quart, et la photo. C’est ce fondu qui laisse le panneau sombre des chiffres chevaucher l’image de 140 px sans découpe ni masque.
Le design vient d’un gabarit Webflow pour concessionnaire dont seule la
structure a été gardée. Tout le reste a été réécrit : jQuery, le moteur
d’animation IX2 et ses 126 événements, les 94 Ko de CSS minifié, le slider
maison, le badge de l’éditeur, et les style="opacity:0" posés
en ligne sur chaque bloc animé — qu’une politique de sécurité stricte
bloque, ce qui donnerait une page blanche.
Le site a été rebaptisé, et pas seulement dans le titre : les cinq marques automobiles réelles qu’il affichait — logos compris — sont devenues cinq marques inventées, et les quatre réseaux sociaux du pied de page aussi. Vingt photographies ont été produites pour ce template.
Ce que tu changes en premier
Les couleurs — neuf lignes
Tout en haut de assets/css/style.css :
--accent: #31b5a3; /* remplir : boutons, écussons, étoiles */
--accent-deep: #1f7a6e; /* écrire sur du clair, et le survol */
--accent-bright: #62daca; /* écrire sur une photo, et sur l’encre */
--ink: #0e1523; /* panneaux sombres, pied de page, texte */
--cloud: #f6f6f6; /* les sections grises */
Une chose à savoir avant d’y toucher : l’accent existe en trois nuances et elles ne sont pas interchangeables. Le teal plein passe à 7,2:1 sur le bleu nuit et disparaît sur du blanc (2,5:1) ; la version foncée fait l’inverse, à 4,8:1 sur le gris clair ; la version éclaircie tient à 10,8:1 sur l’encre et à 7,5:1 sur une photo assombrie. Changer l’une oblige à changer les trois.
Le nom
Cherche « Vantera » dans index.html : le titre, la
description, le logo, le héros, le pied de page, l’adresse e-mail.
Aucune classe CSS ne contient la marque, donc un
rechercher-remplacer ne peut rien casser. Le logo est un pictogramme SVG
de 667 octets ; le mot à côté est du texte, dans la police du template.
Les voitures
Une fiche est un <article class="car">. Duplique-le ou
supprime-le, la grille se recompose seule — même chose pour un avis et
pour un article. Les rapports d’affichage des photos sont figés en CSS par
aspect-ratio : 16/9 pour une voiture, 25/18 pour un showroom,
3/2 pour un article. Une image d’un autre rapport est recadrée, pas
déformée.
Les tailles
L’échelle typographique est déclarée une fois en haut, puis redéclarée à
chacun des trois points de rupture. Un titre n’a donc jamais sa propre
media query : tu changes --h2-size et tous les titres de
section suivent. Si tu te retrouves à écrire une @media
ailleurs dans la feuille, c’est probablement qu’il te manque un jeton.
Les treize effets, et comment ils sont faits
Les réglages ne sont pas estimés à l’œil : ils sont lus dans le magasin
ixData du moteur d’animation de Webflow, puis dédupliqués. Le
gabarit y déclare 126 événements — un par instance de
collection — pour 13 effets distincts.
| Effet | Origine | Ici |
|---|---|---|
| Fondu d’entrée (32 blocs) | opacité 0 → 1, 1 s, outQuart, seuil 0 % | [data-reveal="fade"], mêmes 1 s, seuil déplacé à 15 % |
| Montée de 50 px, retard 100 ms | y 50 → 0 + opacité, 0,5 s, outExpo | data-reveal-delay="100" |
| … retard 200 ms (11 blocs) | idem, retard 200 ms | data-reveal-delay="200" |
| … retard 300 ms (10 blocs) | idem, retard 300 ms | data-reveal-delay="300" |
| … retard 400 ms (9 blocs) | idem, retard 400 ms | data-reveal-delay="400" |
| … retard 500 ms (7 blocs) | idem, retard 500 ms | data-reveal-delay="500" |
| … retard 600 ms (14 blocs) | idem, retard 600 ms | data-reveal-delay="600" |
| Zoom au survol (15 photos) | scale 1,05 en 300 ms | :hover sur le cadre, mêmes 300 ms, cadre en overflow: hidden |
| Menu « Pages » — ouverture | display, y 10 → 0, opacité, 300 ms, chevron −180° | aria-expanded + classe, mêmes 300 ms, même demi-tour |
| Menu « Pages » — fermeture | opacité 1 → 0, y 0 → 10, 300 ms | la même transition à l’envers, plus deux temporisations au survol |
| Filtre du héros — ouverture | idem, plus une hauteur 0 → auto | <details> natif, classe posée à la trame suivante |
| Filtre du héros — fermeture | 300 ms | idem, à l’envers |
| Carrousel d’avis | slider maison, 500 ms, boucle infinie | piste scroll-snap, deux flèches, position annoncée |
Ce qu’il faut savoir
- Aucune requête externe. Polices auto-hébergées, images locales, zéro CDN. Vérifié en listant les requêtes du chargement, pas supposé.
-
Sans JavaScript, rien n’est caché. L’état masqué de
l’apparition au scroll s’écrit sous
html.js, une classe posée avant le premier rendu. Vérifié en retirant les balises<script>: 25 titres sur 25, 68 paragraphes sur 68, les six voitures, les six avis, et le menu qui reste déplié. -
Les filtres et le menu sont natifs. Les trois filtres du
héros sont des
<details>: ils s’ouvrent au clic et au clavier, script ou pas. Le panneau « Pages » s’ouvre au:focus-within, donc au clavier seul. Le script n’ajoute que l’animation de 300 ms — et il faut qu’il l’ajoute, parce qu’un<details>fermé est retiré du rendu et qu’une@keyframesne rejouerait jamais après la première ouverture. -
Le carrousel glisse tout seul. La piste est un conteneur
de défilement avec
scroll-snap: souris, doigt et flèches du clavier fonctionnent sans une ligne de JavaScript. Les deux boutons, leur état désactivé aux extrémités et la position annoncée enrole="status"sont la couche par-dessus. -
Zéro style et zéro script en ligne. Le template respecte
la politique de sécurité stricte du site, vérifiée en servant le dossier
avec l’en-tête réel — lu dans le
/_headersdu projet, pas recopié. - Le déclencheur est à 15 % du bas de l’écran, mesuré sur l’écran et non sur l’élément comme dans l’original. Un seuil exprimé en fraction de l’élément ne se déclenche jamais pour un bloc plus haut que la fenêtre — et ici un bloc entre visiblement au lieu d’avoir fini avant d’être vu.
- Contraste corrigé. L’original écrit en blanc sur son accent vert : 2,6:1, là où un texte de 16 px en demande 4,5. Ici le libellé d’un bouton plein est en bleu nuit, à 7,2:1 sur le même remplissage.
- Responsive vérifié à 390, 1440 et 2560 px, au chargement comme pendant tout le défilement, sans débordement horizontal.
Ce qui n’est pas parfait
Autant le dire ici plutôt que te le laisser découvrir.
- Le carrousel ne boucle pas. L’original enchaîne indéfiniment ; ici la piste s’arrête à la sixième fiche et les flèches se désactivent. Une boucle infinie sur un conteneur de défilement natif demande de dupliquer les fiches et de recaler le défilement à chaque tour : beaucoup de code pour six éléments, et une piste qui ne se parcourt plus proprement au clavier.
- Les filtres ne filtrent pas. Ils s’ouvrent, retiennent la valeur choisie et l’écrivent sur le déclencheur, mais la page est unique : chaque option pointe sur l’ancre de la flotte. Un vrai filtre demande une base de données. Même chose pour la recherche du héros et l’inscription du pied de page.
- La section « How it works » est plus haute que l’original de 96 à 109 px selon la largeur. C’est assumé : sous 992 px l’original cache son bouton « Get started » et son paragraphe d’introduction. Ils restent ici — c’est la section qui explique comment acheter, et le mobile est la majorité du trafic.
-
Le héros mobile ne montre qu’une partie de la voiture.
Le bloc fait 479 × 965, soit un rapport de 0,50 :
background-size: covermet l’image à la hauteur de la boîte et rogne les côtés, doncbackground-positionn’y peut rien et c’est le recadrage du fichier qui décide. L’original a exactement la même limite — on n’y voit que le toit. - Les six avis sont écrits en dur dans le HTML. Au-delà d’une vingtaine, il faudrait les charger plutôt que les écrire.
-
Les images sont libres de droit : les vingt
photographies et les vingt-deux pictogrammes ont été produits pour ce
template et se redistribuent sans restriction, sans attribution. Seules
les polices gardent leur licence propre — Syne et Space Grotesk sont
sous SIL Open Font License, vérifié dans la table
namedes fichiers livrés.
Prends-le, ouvre-le, casse-le.
Vantera est gratuit. La bibliothèque complète — les autres templates et les composants — est incluse dans l’abonnement, avec la formation.
Accès immédiat · Sans engagement · Annulation en 1 clic