Kodza

Infinite Scroll

Placeholders the size of a post shimmer in, then turn into the posts without a jump. Two loads on their own, then a button, so the footer stays reachable.

Scroll No dependencies scrollloadinglistskeleton Added Jan 2026
/anim/infinite-scroll/ Fullscreen

With your AI

Just ask.

Say it to your AI. It gets the exact code below, not its best guess, and knows where it goes.

Load more blog posts with Kodza Infinite Scroll.

Not plugged in yet?
claude mcp add -t http kodza https://kodza.dev/api/mcp
Also in Codex, Cursor and VS Code.
kodza-infinite-scroll.html
<section class="kodza-feed" aria-label="Journal" data-batch="3" data-auto="2" data-delay="700">
  <ol class="kodza-feed__list">
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-steps-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Oct 16 · 4 min</span><span class="kodza-feed__title">We deleted our config files</span><span class="kodza-feed__text">Nothing broke. Two people cried. Here is what we kept.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-columns-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Oct 12 · 6 min</span><span class="kodza-feed__title">Seven columns, zero frameworks</span><span class="kodza-feed__text">The grid you wanted in 2015, now in plain CSS.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-block-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Oct 09 · 3 min</span><span class="kodza-feed__title">Not everything needs React</span><span class="kodza-feed__text">A button is a button. It was fine. It is still fine.</span></span></a></li>
  </ol>
  <template class="kodza-feed__more">
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-stack-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Oct 05 · 5 min</span><span class="kodza-feed__title">The case for boring CSS</span><span class="kodza-feed__text">Boring ships. Clever gets rewritten on a Friday.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-float-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Oct 02 · 4 min</span><span class="kodza-feed__title">Our build step, a eulogy</span><span class="kodza-feed__text">It compiled nothing for three years. We miss it a little.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-arch-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 28 · 2 min</span><span class="kodza-feed__title">Dark mode in eight lines</span><span class="kodza-feed__text">Six variables and a media query. The rest was meetings.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-steps-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 24 · 5 min</span><span class="kodza-feed__title">Animations that respect you</span><span class="kodza-feed__text">Reduced motion is not a setting, it is a person.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-columns-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 20 · 3 min</span><span class="kodza-feed__title">Why we test on a 2016 phone</span><span class="kodza-feed__text">If it runs there, it runs. If it does not, it is on us.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-block-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 17 · 1 min</span><span class="kodza-feed__title">Copy, paste, ship</span><span class="kodza-feed__text">The whole tutorial, in three words. You are welcome.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-stack-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 13 · 4 min</span><span class="kodza-feed__title">Naming things, again</span><span class="kodza-feed__text">We renamed a class four times. It is still called card.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-float-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 09 · 2 min</span><span class="kodza-feed__title">The footer nobody reads</span><span class="kodza-feed__text">Except you. Hello. There is nothing down here, honest.</span></span></a></li>
    <li class="kodza-feed__item"><a class="kodza-feed__link" href="#"><span class="kodza-feed__media"><img src="https://kodza.dev/media/kz-arch-1400.webp" alt="" loading="lazy"></span><span class="kodza-feed__body"><span class="kodza-feed__meta">Sep 05 · 3 min</span><span class="kodza-feed__title">Works on my machine</span><span class="kodza-feed__text">A love letter to the sentence behind every bug.</span></span></a></li>
  </template>
  <div class="kodza-feed__foot">
    <p class="kodza-feed__status" aria-live="polite">Showing <span class="kodza-feed__count">3</span> of <span class="kodza-feed__total">12</span></p>
    <button class="kodza-feed__button" type="button">Load more</button>
    <p class="kodza-feed__end">That is all of it. Go outside.</p>
  </div>
</section>

Checked

Checked before you paste.

Robots poked at it before you did. Every component goes through the same checks, and again each time it changes.

What ranLast run
Accessibilityaxe-core 4.10.2: the WCAG 2.1 A and AA rules, plus best practices. 0 issues
KeyboardThe Tab key gets there, and the focus ring shows when it does. Passed
Reduced motionTurn on reduced motion and what moved just appears. Nothing loops. Passed
Light and darkThe same checks on both themes, contrast included. Passed
WordPressPasted into Twenty Twenty-Five, Twenty Twenty-One, Astra, Blocksy, GeneratePress, Hello Elementor, Kadence and OceanWP. Nothing to flag. 8 / 8 themes
Robots checked this. A human with VoiceOver hasn't yet.

More like this

More in Scroll