→ כל החידושים
|בניית פס הטכנולוגיות הנע באתר הזה

מרקיז אינסופי באתר עברי — למה RTL שובר את האנימציה ואיך מתקנים

cssrtlanimations

שני מושגים לפני שמתחילים: מרקיז (marquee) הוא פס תוכן שנע לבד בלופ — כמו שורת הלוגואים הנעה בעמוד הבית של האתר הזה. RTL (Right-To-Left) הוא מצב שבו הדפדפן מסדר את העמוד מימין לשמאל, כמו שנדרש לעברית ולערבית — מפעילים אותו עם dir="rtl".

הטריק המוכר למרקיז חלק: משכפלים את התוכן פעמיים, ומזיזים את הפס עם translateX — פקודת CSS שמזיזה אלמנט על ציר X (ימינה-שמאלה) בלי להשפיע על שאר העמוד. מזיזים מ-0 עד ‎-50%‎, וכשהעותק הראשון יוצא מהמסך, העותק השני כבר בדיוק במקומו — והלופ נראה אינסופי.

באתר עברי זה נשבר בשקט, והסיבה מלמדת משהו עמוק: direction: rtl הופך את נקודת ההתחלה שממנה הדפדפן מסדר תוכן, אבל translateX הוא תזוזה פיזית — מינוס תמיד אומר "שמאלה", בכל שפה. השילוב גורם לפס לברוח מהמסך ולהשאיר רווח ריק.

הפתרון הנקי: לעטוף רק את המרקיז ב-dir="ltr" (כלומר "האזור הקטן הזה מסודר משמאל לימין") ולהשאיר את שאר העמוד RTL:

<div class="marquee" dir="ltr">
  <div class="marquee-track">...תוכן כפול...</div>
</div>
@keyframes marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

(@keyframes הוא האופן שבו מגדירים אנימציה ב-CSS: מציינים מצב התחלה ומצב סיום, והדפדפן ממלא את הדרך ביניהם.)

הלקח הרחב: ב-CSS יש מאפיינים לוגיים שמתהפכים אוטומטית עם כיוון השפה (כמו margin-inline-start), ויש מאפיינים פיזיים שלא (כל ה-transforms). כל אנימציה שמבוססת על תזוזה אופקית באתר עברי — צריכה בדיקה נפרדת.