→ לכל המאגר

LM8 · מרקי מוטה ונגרר

חתימה (LM) CSS keyframes + rAF רקע ואווירה ממתין

רצועה שזורמת בלולאה, מוטה 3 מעלות, וגם נגררת עם הגלילה. שתי תנועות מצטברות.

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

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

הדמו

גלול למטה, הדמו מגיע ↓
עיצוב·פיתוח·אסטרטגיה·תנועה·
עוד מסלול גלילה. נסה גם חזרה למעלה ↑

קוד להדבקה

הקוד כאן עומד בפני עצמו. כל טוקן עיצוב נושא ברירת מחדל, מחלקות העזר של המאגר מוטמעות בו, ותגי הסקריפט מסודרים לפי הסדר הנכון. פרויקט שמגדיר --accent או --line משלו יורש אותם אוטומטית. הרכיב הזה מסתמך על dir="rtl".

פתח קובץ עצמאי ↗
הצג את הקוד כאן

CSS

/* מחלקות עזר של המאגר שהרכיב הזה משתמש בהן */
.stage{padding:var(--sec, clamp(120px, 12vw, 260px)) var(--gutter, clamp(24px, 5vw, 96px));position:relative}
.stage.tight{padding-block:clamp(48px,5vw,90px)}
.stage.full{padding-inline:0}

/* LM8 · מרקי מוטה ונגרר */
.tiltm-wrap{transform:rotate(-3deg);width:104vw;margin-inline-start:-2vw;background:var(--ink, #16182b);padding-block:20px;overflow:hidden}
.tiltm{overflow:hidden;white-space:nowrap;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
/* ההזזה היא רוחב קבוצה מדויק בפיקסלים, ומספר העותקים נגזר מרוחב המסך */
.tiltm-track{display:flex;width:max-content;animation:marq linear infinite;animation-duration:var(--marq-dur,26s)}
.tiltm-set{display:flex;gap:48px;padding-inline-end:48px}
.tiltm-track span{font-weight:800;font-size:24px;color:color-mix(in srgb,var(--bg, #f7f7fa) 55%,transparent);white-space:nowrap}
.tiltm-track i{font-style:normal;color:#f49e40}
@keyframes marq{from{transform:translateX(0)}to{transform:translateX(var(--marq-shift,50%))}}

HTML

<div class="stage full"><div class="tiltm-wrap" data-dragmarq><div class="tiltm"><div class="tiltm-track">
<div class="tiltm-set"><span>עיצוב</span><i>·</i><span>פיתוח</span><i>·</i><span>אסטרטגיה</span><i>·</i><span>תנועה</span><i>·</i></div>
</div></div></div></div>

JS

(function(){
  // אותו מנגנון כמו ב-b01: מספר העותקים נגזר מרוחב המסך, וההזזה היא רוחב קבוצה מדויק
  function build(){
    const wrap=document.querySelector(".tiltm"),track=document.querySelector(".tiltm-track");
    const proto=track.firstElementChild;
    [...track.children].slice(1).forEach(c=>c.remove());
    const setW=proto.getBoundingClientRect().width;
    if(!setW)return;
    const need=Math.ceil(wrap.getBoundingClientRect().width/setW)+1;
    for(let i=1;i<need;i++){const c=proto.cloneNode(true);c.setAttribute("aria-hidden","true");track.appendChild(c);}
    track.style.setProperty("--marq-shift",setW+"px");
    track.style.setProperty("--marq-dur",(setW/58).toFixed(2)+"s");
  }
  build();
  if(document.fonts)document.fonts.ready.then(build);
  let rt;addEventListener("resize",()=>{clearTimeout(rt);rt=setTimeout(build,200);});
})();
const dm=document.querySelector("[data-dragmarq]");
let tick=false;
function frame(){tick=false;
  const r=dm.getBoundingClientRect();
  const t=(innerHeight-r.top)/(innerHeight+r.height);
  dm.style.translate=((t-.5)*120)+"px 0";}
addEventListener("scroll",()=>{if(!tick){tick=true;requestAnimationFrame(frame)}},{passive:true});
frame();