← La bibliothèque

Corvella

Site d’une page pour un restaurant de poissons et de fruits de mer

Template complet Réservé aux membres Ouvrir la démo
Aperçu du template Corvella : un écran bleu d’abysse, le logo « Corvella Restaurant » au centre sous une coquille au trait, une assiette de gambas grillées qui entre par le coin haut gauche et une assiette de palourdes par la droite, et un chevron blanc taillé dans la photo de la salle en bas.

Ce que c’est

Un site vitrine d’une page pour un restaurant de bord de mer : écran d’accueil au logo centré entre deux assiettes détourées, photographie pleine largeur dans laquelle un chevron est taillé, trois plats en rotation, bannière de vins, carrousel de trois photos, une phrase seule sur fond bleu, formulaire de réservation et pied de page à quatre colonnes. Une seule page, un seul fichier HTML.

Ce qui fait ce site, c’est le bleu et ce qu’on y découpe. Les grandes photos ne sont pas posées bord à bord : un triangle de la couleur du fond mord dans leur bord supérieur ou inférieur, et c’est une seule ligne de clip-path qui le dessine — pas une image, pas un masque. Le second geste, c’est la loupe de la section bleue : un disque de 200 px qui suit le curseur pendant que la photographie qu’il révèle, elle, ne bouge pas.

Le design vient d’un gabarit Webflow pour restaurant dont seule la structure a été gardée. Tout le reste a été réécrit : jQuery, le bundle de 1,17 Mo qui contient le moteur d’animation IX2, les 70 Ko de CSS minifié, le slider maison, une animation Lottie, le badge de l’éditeur, le widget Google Maps, 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 il ne reste rien de l’original dans les fichiers : nom, logo, adresse, téléphone, e-mail, compte social, noms des plats. Les huit photographies ont été générées pour ce template et les six dessins — la coquille du logo, le poisson, le filet, le nautile, le semis de coquillages, le plan du quartier — sont écrits à la main en SVG.

Ce que tu changes en premier

Les couleurs — cinq lignes

Tout en haut de assets/css/style.css :

--blue:       #0b3a5b;  /* fonds bleus, texte sur le crème */
--blue-dark:  #06283e;  /* le même bleu, un cran plus foncé (survol) */
--blue-light: #6e9dbb;  /* le même bleu, éclairci : dessins posés SUR le bleu */
--cream:      #f1f5f7;  /* fond de page */
--white:      #ffffff;  /* cartes et rails */

Une chose à savoir avant d’y toucher : il y a trois bleus, et ils ne sont pas interchangeables. Le plein tient à 10,8:1 sur le crème et porte du blanc à 11,9:1 ; le foncé est là pour les survols (13,9:1 sur le crème) ; l’éclairci sert au nautile, aux coquillages et aux filets posés sur le bleu, où le plein disparaîtrait (4,1:1). Changer l’un oblige à changer les trois — et la couleur des dessins est écrite dans l’attribut stroke des fichiers SVG, pas dans le CSS.

Le nom

Cherche « Corvella » dans index.html : le titre, la description, le logo répété trois fois, l’adresse e-mail, le compte social, le pied de page. Aucune classe CSS ne contient la marque, donc un rechercher-remplacer ne peut rien casser. Le logo n’est pas une image : c’est un paragraphe avec une coquille en SVG et deux lignes de texte, dimensionné par une seule variable, --mark.

Les plats

Un plat est un <a class="dish"> : une assiette détourée dans un cercle, un libellé dessous. Duplique-le ou supprime-le, la grille se recompose seule. Les assiettes sont des WebP à fond transparent — si tu remplaces la photo, découpe-la en disque, sinon le coin blanc du fichier se verra sur le bleu.

Les tailles

L’échelle typographique est déclarée une fois en haut, puis redéclarée à chacun des quatre points de rupture. Un titre n’a donc jamais sa propre media query : tu changes --size-h2 et tous les titres suivent. La mise en page tient elle aussi dans quatre variables, toutes en unités d’écran : --gutter, --inset, --rail et --plate.

Les onze 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 filtrés sur la page d’accueil et dédupliqués. Le gabarit y déclare 31 événements pour 12 effets distincts. Onze sont reproduits ; le douzième animait la carte de visite de l’auteur du gabarit, retirée avec elle.

EffetOrigineIci
Écran de chargementlogo y 100 % → 0 et flou 10 → 0 px en 700 ms, voile monté de −100 vh en 1 s (retard 700 ms), page en fondu 500 mstrois @keyframes enchaînées par leur retard, derrière la classe js
Entrée du hérosassiettes x −40 % et +50 % → 0 (1 s et 1,4 s), rotation 180° → 0, logo scale 0,5 → 1, retard 2,5 smêmes durées, retard ramené à 1,5 s
Apparition par le bas (5 blocs)opacité + y 100 px, 1 s, outQuart, seuil 0 %[data-reveal] + IntersectionObserver, seuil déplacé à 15 %
Parallaxe des photosy −20 % → +20 % et scale 1,1 → 1 sur le défilementle script écrit --p (0 → 1), le transform est calculé en CSS
Parallaxe des dessinspoisson y −60 % → +30 %, filet 0 % → +20 %même --p, deux amplitudes
Loupe qui suit le pointeurmasque déplacé de ±50 vw et ±50 vh, photo déplacée d’autant en sens inverse--x / --y sur le bloc, la photo porte la translation opposée
Survol d’une assiette (3 plats)rotation 0 → 90° en 2 s, disque scale 1 → 1,1 en 500 ms ; retour 300 msdeux transitions CSS, mêmes durées
Survol d’un lien fléché (3 liens)libellé skewX −10° et x +5 px, flèche x +5 px, 300 ms ; retour 200 mstransitions CSS, mêmes durées
Menu plein écranpanneau x −100 % → 0 en 400 ms, liens en fondu 400 ms ; fermeture 400 ms<details> natif + @keyframes, relancées par le script
Carrouselslider maison, 500 ms, boucle infinie, lecture auto désactivéepiste scroll-snap, deux flèches, trois ancres, position annoncée
Molette « Scroll »animation Lottie de 98 images à 60 i/sSVG dessiné + une @keyframes de 1,6 s

Ce qu’il faut savoir

  • Aucune requête externe. 21 requêtes au chargement, toutes locales. Polices auto-hébergées, images locales, zéro CDN. Vérifié en listant les requêtes du chargement, pas supposé. L’original tirait jQuery, un bundle Webflow et Google Fonts depuis quatre domaines.
  • 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> : 9 titres sur 9 visibles, zéro bloc caché, l’écran de chargement n’apparaît pas et le menu s’ouvre quand même.
  • L’écran de chargement ne dépend pas du script pour partir. Chaque étape est une animation CSS avec un retard, pas une classe ajoutée par le JavaScript. Si main.js tombe après que enhance.js a posé la classe, la page finit quand même d’apparaître — c’est exactement le cas que le voile plein écran rend dangereux.
  • Le menu est un <details>. Il s’ouvre au clic et au clavier, script ou pas, et <summary> expose l’état déplié tout seul. Le script n’ajoute que l’animation d’entrée — et il faut qu’il l’ajoute, parce qu’un <details> fermé est masqué par content-visibility et qu’une @keyframes ne 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, et les trois points sont de vraies ancres. Les deux flèches et la position annoncée en role="status" sont la couche par-dessus. Mesuré aux trois largeurs : la dernière photo est atteignable.
  • 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 : zéro violation, zéro erreur JavaScript.
  • 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.
  • Les liens du menu sont en texte contourné. -webkit-text-stroke n’existe pas partout ; là où il manque, les liens seraient invisibles, donc un @supports not les remplit en blanc.
  • 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.

  • L’étiquette de la bouteille est vierge. L’original montrait une marque de vin réelle. Écrire « Corvella » dessus aurait demandé de recomposer la photo ; une étiquette crème sans texte est plus juste et n’engage personne.
  • La carte est un dessin, pas une carte. L’original intégrait un widget Google Maps : hors de son hébergeur il ne charge rien, et il ferait une requête externe. map.svg est un plan du quartier dessiné à la main ; le repère se déplace en modifiant un transform.
  • Le formulaire de réservation n’a pas de serveur. Il valide, puis affiche une confirmation et rappelle le numéro de téléphone. Quatre lignes à supprimer dans main.js et une action à renseigner pour le brancher.
  • La mise en page est en unités d’écran (vw), comme l’original — c’est ce qui la fait tenir à toutes les largeurs sans media query. Mais vw inclut la barre de défilement : sur un navigateur qui la réserve, compte une quinzaine de pixels d’écart avec les mesures annoncées.
  • La loupe dérive toute seule sur écran tactile. Sans pointeur à suivre, elle resterait plantée au centre pendant toute la visite ; une animation de 22 s la promène à la place.
  • Les liens pointent vers des ancres de cette page. L’original est un site multi-pages ; ici tout ramène à une section existante plutôt qu’à une 404.
  • Les images sont libres de droit : les huit photographies et les six dessins ont été produits pour ce template et se redistribuent sans restriction, sans attribution. Seules les polices gardent leur licence propre — Barlow et Barlow Condensed sont sous SIL Open Font License 1.1, dont le texte est livré dans fonts/OFL.txt.

Prends-le, ouvre-le, casse-le.

Corvella 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