← חזרה אל הדיורמה

מאחורי הקלעים

איך נבנתה שונית הנייר

האתר שממנו הגעתם הוא ספר פופ-אפ אחד גדול: חמישה פרקים, חמש חיות נייר, ואף לא תמונה אחת. כל צורה שראיתם, מהצב ועד ספל הקפה, היא SVG שנכתב ביד או נחתך בקוד. הדף הזה פורש את השכבות ומראה איך זה עובד.

01

הקונספט: דיורמת נייר גזור

ההשראה היא ספרי ילדים תלת-ממדיים: קופסת תפאורה שבה כל רכיב הוא פיסת נייר עם צל קשיח, מונחת קצת עקום, עם פס דבק שקוף שמחזיק אותה. העברית של הקופי נשארה רצינית לגמרי, העולם שמסביבה הפך לצעצוע.

שלושה חוקים שמרו על אחידות: כל צורה נגזרת (שום תמונה, שום גרדיאנט מצועצע), כל שכבה מטילה צל (כי לנייר יש עובי), וכל דבר קצת עקום (סיבובים של פחות ממעלה וחצי, כמו שנייר אמיתי נדבק).

02

שכבות: תזיזו את הסליידר

כל פרק באתר הוא ערימה של רבדים. הסליידר פורש את הדיורמה של פרק הפתיחה ומראה מה יושב מאחורי מה:

שמיים ושמש · עומק 14-
קו המים · עומק 6-
הזרם · שכבת האמצע
הצב · עומק 16+
קרקעית ואלמוגים · עומק 30+

בזמן גלילה באתר האמיתי, בדיוק השכבות האלה זזות זו ביחס לזו. שכבה עם עומק שלילי נעה נגד הגלילה (רחוקה), שכבה עם עומק חיובי נעה איתה (קרובה). ככה נולד אשליית העומק.

03

מתמטיקת הפרלקסה

כל שכבה מקבלת data-para="depth". בכל פריים של גלילה מחשבים כמה רחוק מרכז הפרק ממרכז המסך, מנרמלים לטווח 1- עד 1+, ומכפילים בעומק:

// progress: -1 (הפרק מתחת למסך) ... 0 (במרכז) ... +1 (מעל)
const r = section.getBoundingClientRect();
const progress = ((r.top + r.height / 2) - vh / 2)
               / ((vh + r.height) / 2);

// עומק שלילי = רחוק (זז הפוך), חיובי = קרוב
layer.style.translate = `0 ${progress * depth}px`;

שני חסכונות שומרים על 60fps: IntersectionObserver מפעיל רק שכבות שנמצאות על המסך, ו-requestAnimationFrame מרכז את כל הכתיבות לפריים אחד. העכבר מוסיף פרלקסה עדינה משלו בפרק הפתיחה בלבד.

04

הקרעים: אף גל לא צויר פעמיים

כל תפר בין פרקים הוא שלוש רצועות נייר שמוחוללות בזמן טעינה מזרע קבוע (seeded RNG), כך שהקצוות תמיד "קרועים" אבל זהים בכל טעינה. כל רצועה מטילה צל כלפי מעלה על הרצועה שמאחוריה, בדיוק כמו נייר על נייר:

function wavePath(rnd, y0, amp, segs) {
  let x = 0, y = y0, d = `M0 ${H} L0 ${y0}`;
  const step = W / segs;
  for (let i = 0; i < segs; i++) {
    const ny = y0 + (rnd() * 2 - 1) * amp;   // ±amp jitter
    d += ` C ${x + step * .42} ${y},
           ${x + step * .58} ${ny},
           ${x + step} ${ny}`;
    x += step; y = ny;
  }
  return d + ` L${W} ${H} Z`;
}
/* צל של נייר: drop-shadow(0 -5px 5px) על כל רצועה */

והנה אחד חי, נולד ברגע שטענתם את הדף הזה:

05

הפלטה: פסטל שיורד לעומק

סולם מים אחד שנהיה כהה ככל שצוללים, נייר קרם חם, וזהב אחד בלבד למילים החשובות. החיות לוקחות אלמוג, עלה ולבנדר.

נייר#FDF6E9
חול#F0DFB6
מים 0#CFEAE2
מים 1#B4DFD5
מים 3#74ADB9
מים 4#557E9E
מצולות#3D5679
זהב#F2C464
אלמוג#EF9180
עלה#8FC7A4
לבנדר#B7A8D8
דיו#28394F

06

טיפוגרפיה עברית מעוגלת

Fredoka לכותרות: גיאומטרית ומעוגלת, בדיוק הטון של ספר ילדים שמדבר ברצינות. Heebo לגוף: קריאה, ניטרלית, נושאת עברית ארוכה בכבוד. שתיהן מוטמעות כקבצי woff2 מקומיים, בלי רשת חיצונית.

לא נלחם בזרם. רוכב עליו.

Fredoka 500 · פרק, תווית, כפתור

Heebo 400 · הטקסט שאתם קוראים עכשיו, וכל פסקה באתר. מספרים ולטינית יושבים בתוך העברית בלי לקפוץ.

07

תנועה ונגישות

עולם שזז חייב לדעת גם לעמוד בשקט. ההצהרה בקצרה:

· מי שהגדיר prefers-reduced-motion מקבל את האתר בנוח: בלי פרלקסה, בלי קפיצות פופ-אפ, בלי חיות שמתנדנדות. הכל גלוי מיד, סטטי לגמרי.

· המבנה סמנטי: כותרות מדורגות, ניווט עם aria-label, סקיפ-לינק לתוכן, וכל סצנת נוי מסומנת aria-hidden. לכל חיה אינטראקטיבית יש שם נגיש, והיא מגיבה גם למקלדת.

· צבעי הטקסט נבדקו מול הרקעים: דיו כהה על פסטלים בהירים, קרם על המצולות. המילים המוזהבות מקבלות גוון כהה יותר על רקע בהיר.

· נתקלתם במשהו שקשה לכם באתר? כתבו לי בוואטסאפ 0585-222555 ואתקן.

08

מה יש בקופסה

קובץתפקיד
index.htmlהדיורמה: חמישה פרקים, כל החיות כ-SVG כתוב ביד
css/style.cssשפת הנייר: צללים, קרעים, טקסטורה, תנועה, RTL
js/main.jsקרעים מחוללים, פרלקסה, חשיפות, מד עומק, הסקר
fonts/*.woff2Fredoka + Heebo, עברית ולטינית, מקומי
favicon.svgהצב, בקטן
guide/הדף הזה

בלי ספריות, בלי CDN, בלי תהליך בנייה. פותחים את הקובץ, מקבלים שונית.

← חזרה אל שונית הנייר