Studio Burnett 1.0 — animated project website
Produs Ruben Stom: Animated Website — Prompts + Design Files (rubenstom.gumroad.com/l/animated-portfolio-prompts). Pagina live: /studio-burnett/ · sursa zip: 29. Animated Project Website.
Ce face
- Intra cu numele studioului urias, cat 95% din latimea ecranului, si o imagine care rasfoieste prin sapte cadre si se opreste pe unul.
- Apoi toate imaginile de proiect, stivuite peste imaginea aia, se desfac intr-un rand orizontal, in timp ce numele se micsoreaza si urca in bara de sus. E o tranzitie FLIP: se masoara pozitia de start si cea de final, si se animeaza intre ele.
- Randul e infinit — cele sapte proiecte sunt repetate de cinci ori si pozitia se reia, deci poti derula lateral la nesfarsit.
- Treci cu mouse-ul peste un card si restul se sting.
- Click pe un card: o cortina coboara peste pagina, cardul zboara la locul lui in noua pagina, si se deschide proiectul cu patru imagini si text.
- INFO deschide un panou cu poza si prezentarea studioului. Numele din bara serveste drept buton de inchidere pentru orice panou deschis.
Ce cere site-ul
- Nicio librarie. Tranzitiile FLIP sunt scrise de mana:
getBoundingClientRect, transformari si tranzitii CSS. - Un font Google: Figtree.
- Header si footer dezactivate din setarile de pagina.
bodyClasses: burnett loading—loadingvine din sursa (<body class="loading">) si e scoasa de JS cand se termina intrarea. Fara ea, cardurile s-ar vedea inainte de tranzitie.
Cum e construit in Bricks
O sectiune, un element Code. Markup-ul e minuscul (656 octeti) — toata pagina se construieste din JS. 8,3 KB CSS, 15,5 KB JS.
Textele celor sapte proiecte (titlu, categorie, cele trei paragrafe) sunt in projects si projectCopy, la inceputul scriptului. Caile de imagine se construiesc din IMG_BASE prin doua functii, CARD(n) si PROJ(p, n).
Media
36 de imagini: sapte coperti, un portret si patru imagini pentru fiecare din cele sapte proiecte. Toate 1792×2400 → 900px latime, JPG q80: 19 MB → 4 MB.
Capcane
- Panourile se adaugau in
<body>. Sursa facedocument.body.appendChildpentru cortina, pagina de proiect si panoul de info. Asa ar fi iesit din.sbsi CSS-ul scopat nu le-ar mai fi prins. Le-am mutat in radacina sectiunii; suntposition: fixed, deci nu se schimba nimic vizual. - Starile raman pe body.
loading,project-opensiinfo-opensunt clase pe<body>in sursa, si CSS-ul le foloseste ca stramos. Le-am pastrat acolo, calificate cu.burnett. - Numarul proiectului vine cu zero in fata. Sursa calculeaza
num = String(idx+1).padStart(2, '0'), deci “04”. Fisierele urcate suntburnett-p4-01.jpg, nup04. Prima varianta a dat 4 imagini rupte pe fiecare pagina de proiect; rezolvat cuparseInt(p, 10)in constructorul de cale. - De verificat cu mana: rasfoirea de la intrare, desfacerea in rand, cortina la deschiderea proiectului. Toate sunt tranzitii CSS pornite din
requestAnimationFrame— oprite intr-un tab de fundal. Continutul (35 de carduri, cele 36 de imagini, textele, potrivirea imagine–proiect) e verificat.
Pasi de reproducere
- Redimensioneaza cele 36 de imagini la 900px, redenumeste-le
burnett-0N/burnett-pP-0N/burnett-profile, urca-le. - Desparte CSS-ul si JS-ul din pagina sursa; prefixeaza selectorii cu
.sb, iar regulile pe body cubody.burnett. - In JS:
IMG_BASEplusCARD/PROJin loc de caile relative, radacina sectiunii in loc dedocument, siroot.appendChildin loc dedocument.body.appendChild. - Prefixeaza id-urile cu
sb-, invelesta in<div class="sb">. - Un element Code intr-o sectiune fara padding;
bodyClasses: burnett loading.