Ana içeriğe atla

CSS-only Tailwind CSS pagination for numbered pages, prev/next arrows, ellipsis gaps, accessible radio inputs, and a page-jump select. No JavaScript required. WCAG AA accessible, works with Django, HTMX, Laravel, React, and any stack.

Sayfalandırma bileşenleri, kullanıcıların içerik sayfaları (arama sonuçları, veri tabloları, makale arşivleri ve ürün listeleri) arasında gezinmesine olanak tanır. Join ve Button bileşenlerinin oluşturulmasıyla oluşturulan Frutjam sayfalandırma, JavaScript veya ekstra CSS gerektirmez. Numaralandırılmış sayfaları, önceki/sonraki okları, üç nokta boşluklarını, erişilebilir radyo girişlerini ve sayfa atlama seçimini destekler.

Yalnızca CSS, JavaScript gerekmez; saf HTML ve Tailwind CSS ile erişilebilir sayfalandırma oluşturun. WCAG AA erişilebilir ve çerçeveden bağımsız — Django, HTMX, Laravel, React, Next.js ve tüm yığınlarla çalışır.

Sınıf Tip Tanım
joinTemelDüğmeleri bağlı bir sayfalandırma şeridi halinde gruplandırır
join-itemDeğiştiriciBirleştirme içindeki her sayfa düğmesi veya girişi
btn-activeStateGeçerli sayfayı vurgular
btn-disabledStateEtkileşimli olmayan üç nokta veya kullanılamayan sayfa

Temel Sayfalandırma

Bir aktif sayfaya sahip numaralandırılmış sayfa şeridi. Geçerli sayfayı vurgulamak için btn-active uygulayın. Sunucu tarafından oluşturulan sayfa bağlantıları için düğmeler yerine bağlantı etiketlerini kullanın.

1
2
3
4
5
6
7
<div class="join">
  <button class="join-item btn">1</button>
  <button class="join-item btn btn-active">2</button>
  <button class="join-item btn">3</button>
  <button class="join-item btn">4</button>
  <button class="join-item btn">5</button>
</div>
1
2
3
4
5
6
7
<div className="join">
  <button className="join-item btn">1</button>
  <button className="join-item btn btn-active">2</button>
  <button className="join-item btn">3</button>
  <button className="join-item btn">4</button>
  <button className="join-item btn">5</button>
</div>

Boyutlar

Sayfalandırma tüm düğme boyutlarını devralır. Kompakt tablolar için btn-xs veya btn-sm'yi, öncelikli dokunmatik arayüzler için btn-lg'yi kullanın.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<div class="flex flex-col gap-3 items-start">
  <div class="join">
    <button class="join-item btn btn-xs">1</button>
    <button class="join-item btn btn-xs btn-active">2</button>
    <button class="join-item btn btn-xs">3</button>
    <button class="join-item btn btn-xs">4</button>
  </div>
  <div class="join">
    <button class="join-item btn btn-sm">1</button>
    <button class="join-item btn btn-sm btn-active">2</button>
    <button class="join-item btn btn-sm">3</button>
    <button class="join-item btn btn-sm">4</button>
  </div>
  <div class="join">
    <button class="join-item btn">1</button>
    <button class="join-item btn btn-active">2</button>
    <button class="join-item btn">3</button>
    <button class="join-item btn">4</button>
  </div>
  <div class="join">
    <button class="join-item btn btn-lg">1</button>
    <button class="join-item btn btn-lg btn-active">2</button>
    <button class="join-item btn btn-lg">3</button>
    <button class="join-item btn btn-lg">4</button>
  </div>
</div>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<div className="flex flex-col gap-3 items-start">
  <div className="join">
    <button className="join-item btn btn-xs">1</button>
    <button className="join-item btn btn-xs btn-active">2</button>
    <button className="join-item btn btn-xs">3</button>
    <button className="join-item btn btn-xs">4</button>
  </div>
  <div className="join">
    <button className="join-item btn btn-sm">1</button>
    <button className="join-item btn btn-sm btn-active">2</button>
    <button className="join-item btn btn-sm">3</button>
    <button className="join-item btn btn-sm">4</button>
  </div>
  <div className="join">
    <button className="join-item btn">1</button>
    <button className="join-item btn btn-active">2</button>
    <button className="join-item btn">3</button>
    <button className="join-item btn">4</button>
  </div>
  <div className="join">
    <button className="join-item btn btn-lg">1</button>
    <button className="join-item btn btn-lg btn-active">2</button>
    <button className="join-item btn btn-lg">3</button>
    <button className="join-item btn btn-lg">4</button>
  </div>
</div>

Üç Nokta ile

Çok çeşitli sayfalar arasındaki üç nokta boşluğu için btn-disabled'i kullanın. Ekran okuyucular devre dışı bırakılan düğmeleri atlayarak üç nokta üzerinde aria-hidden='true' ile eşleştirin.

1
2
3
4
5
6
7
8
9
<div class="join">
  <button class="join-item btn">1</button>
  <button class="join-item btn">2</button>
  <button class="join-item btn btn-disabled" aria-hidden="true">...</button>
  <button class="join-item btn btn-active">12</button>
  <button class="join-item btn btn-disabled" aria-hidden="true">...</button>
  <button class="join-item btn">99</button>
  <button class="join-item btn">100</button>
</div>
1
2
3
4
5
6
7
8
9
<div className="join">
  <button className="join-item btn">1</button>
  <button className="join-item btn">2</button>
  <button className="join-item btn btn-disabled" aria-hidden="true">...</button>
  <button className="join-item btn btn-active">12</button>
  <button className="join-item btn btn-disabled" aria-hidden="true">...</button>
  <button className="join-item btn">99</button>
  <button className="join-item btn">100</button>
</div>

Önceki / Sonraki Gezinme

Ok tabanlı sayfalandırma, bloglar, ürün listeleri ve tam sayfa numaralarını göstermenin pratik olmadığı tüm sayfalandırılmış yayınlar için en yaygın kalıptır.

Ok Simgeleri ile

1
2
3
4
5
6
7
8
9
<div class="join">
  <button class="join-item btn" aria-label="Previous page">
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 18l-6-6 6-6"/></svg>
  </button>
  <button class="join-item btn">Page 12</button>
  <button class="join-item btn" aria-label="Next page">
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"/></svg>
  </button>
</div>
1
2
3
4
5
6
7
8
9
<div className="join">
  <button className="join-item btn" aria-label="Previous page">
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M15 18l-6-6 6-6"/></svg>
  </button>
  <button className="join-item btn">Page 12</button>
  <button className="join-item btn" aria-label="Next page">
    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><path d="M9 18l6-6-6-6"/></svg>
  </button>
</div>

Eşit Genişlikte Önceki / Sonraki

Her iki düğmeye de eşit genişlik kazandırmak için birleştirme kapsayıcısında bir grid grid-cols-2 sarmalayıcı kullanın; mobil öncelikli düzenler ve tam genişlikte sayfalandırma çubukları için idealdir.

1
2
3
4
<div class="join grid grid-cols-2 w-72">
  <button class="join-item btn btn-outline">← Previous</button>
  <button class="join-item btn btn-outline">Next →</button>
</div>
1
2
3
4
<div className="join grid grid-cols-2 w-72">
  <button className="join-item btn btn-outline"> Previous</button>
  <button className="join-item btn btn-outline">Next </button>
</div>

İlk / Son ile

Kullanıcıların doğrudan ilk veya son sayfaya atlamasını sağlamak için çift ok düğmeleri ekleyin. Yüzlerce sayfalık veri tabloları için kullanışlıdır.

1
2
3
4
5
6
7
8
9
<div class="join">
  <button class="join-item btn btn-ghost btn-sm" aria-label="First page">«</button>
  <button class="join-item btn btn-sm" aria-label="Previous page"></button>
  <button class="join-item btn btn-sm">4</button>
  <button class="join-item btn btn-sm btn-active">5</button>
  <button class="join-item btn btn-sm">6</button>
  <button class="join-item btn btn-sm" aria-label="Next page"></button>
  <button class="join-item btn btn-ghost btn-sm" aria-label="Last page">»</button>
</div>
1
2
3
4
5
6
7
8
9
<div className="join">
  <button className="join-item btn btn-ghost btn-sm" aria-label="First page">«</button>
  <button className="join-item btn btn-sm" aria-label="Previous page"></button>
  <button className="join-item btn btn-sm">4</button>
  <button className="join-item btn btn-sm btn-active">5</button>
  <button className="join-item btn btn-sm">6</button>
  <button className="join-item btn btn-sm" aria-label="Next page"></button>
  <button className="join-item btn btn-ghost btn-sm" aria-label="Last page">»</button>
</div>

Erişilebilir Radyo Sayfalandırması

Tamamen klavyeyle gezinilebilen, JavaScript olmadan yalnızca CSS sayfa seçimi için birleştirme öğeleri olarak type="radio" girişlerini kullanın. Her giriş, seçilen durumu yerel form durumunda tutarken basılabilir bir düğme görevi görür.

1
2
3
4
5
6
7
<div class="join">
  <input class="join-item btn btn-square" type="radio" name="page" aria-label="1" />
  <input class="join-item btn btn-square" type="radio" name="page" aria-label="2" checked />
  <input class="join-item btn btn-square" type="radio" name="page" aria-label="3" />
  <input class="join-item btn btn-square" type="radio" name="page" aria-label="4" />
  <input class="join-item btn btn-square" type="radio" name="page" aria-label="5" />
</div>
1
2
3
4
5
6
7
<div className="join">
  <input className="join-item btn btn-square" type="radio" name="page" aria-label="1" />
  <input className="join-item btn btn-square" type="radio" name="page" aria-label="2" defaultChecked />
  <input className="join-item btn btn-square" type="radio" name="page" aria-label="3" />
  <input className="join-item btn btn-square" type="radio" name="page" aria-label="4" />
  <input className="join-item btn btn-square" type="radio" name="page" aria-label="5" />
</div>

Sayfa Atlama ile Sayfalandırma

Kullanıcıların doğrudan herhangi bir sayfaya geçmesine olanak tanıyan kompakt bir sayfalandırma çubuğu için birleştirmeyi, düğmeleri ve seçimi birleştirin; yönetici kontrol panellerinde, CMS arayüzlerinde ve veri ağırlıklı uygulamalarda yaygındır. Seçimin kendisi için JavaScript gerekmez; HTMX ile eşleştirin veya sunucu tarafında gezinme için bir form gönderin.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<div class="join">
  <button class="join-item btn btn-sm" aria-label="Previous page"></button>
  <select class="join-item select select-sm" aria-label="Go to page">
    <option>Page 1</option>
    <option>Page 2</option>
    <option selected>Page 3</option>
    <option>Page 4</option>
    <option>Page 5</option>
  </select>
  <button class="join-item btn btn-sm" aria-label="Next page"></button>
</div>
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<div className="join">
  <button className="join-item btn btn-sm" aria-label="Previous page"></button>
  <select className="join-item select select-sm" aria-label="Go to page">
    <option>Page 1</option>
    <option>Page 2</option>
    <option>Page 3</option>
    <option>Page 4</option>
    <option>Page 5</option>
  </select>
  <button className="join-item btn btn-sm" aria-label="Next page"></button>
</div>

Anahat Stili

İkincil içerik bölümlerine ve kenar çubuklarına uyacak şekilde daha hafif bir görsel ağırlık için tüm düğmelerde btn-outline'ı kullanın.

1
2
3
4
5
6
7
<div class="join">
  <button class="join-item btn btn-outline btn-sm" aria-label="Previous page"></button>
  <button class="join-item btn btn-outline btn-sm">1</button>
  <button class="join-item btn btn-outline btn-sm btn-active">2</button>
  <button class="join-item btn btn-outline btn-sm">3</button>
  <button class="join-item btn btn-outline btn-sm" aria-label="Next page"></button>
</div>
1
2
3
4
5
6
7
<div className="join">
  <button className="join-item btn btn-outline btn-sm" aria-label="Previous page"></button>
  <button className="join-item btn btn-outline btn-sm">1</button>
  <button className="join-item btn btn-outline btn-sm btn-active">2</button>
  <button className="join-item btn btn-outline btn-sm">3</button>
  <button className="join-item btn btn-outline btn-sm" aria-label="Next page"></button>
</div>