Membuat Daftar Isi Otomatis Elegan di Blogger (CSS + JS Lengkap)

 




๐Ÿ“Œ Membuat Daftar Isi Otomatis Elegan di Blogger (CSS + JS Lengkap)


Pada artikel ini saya bagikan cara membuat Daftar Isi (Table of Contents/TOC) otomatis yang:

  1. Membaca heading dari isi artikel (mulai dari H2)
  2. Muncul elegan di atas konten
  3. Bisa dilipat dengan tombol Tampilkan/Sembunyikan
  4. Responsif dan ringan (hanya 2 skrip: CSS & JavaScript)
  5. Dilengkapi animasi saat hover dan klik
  6. Hanya membaca heading dari artikel aktif saja
  7. Heading yang diklik akan scroll ke atas dan berpendar (highlight)
  8. Hasilnya seperti Daftar Isi di blog saya ini. Menarik kan!

๐ŸŽฏ Contoh hasil akhirnya seperti ini:


✅ Langkah-langkah Pemasangan

1. Salin CSS berikut

Letakkan di <head> blog Anda (di Tema → Edit HTML → cari </head> dan paste sebelum itu):


<style type='text/css'> #daftar-isi-container { background: #eaf6ff; border: 1px solid #cde3f5; padding: 1rem; margin: 1.5rem 0; font-family: sans-serif; border-radius: 8px; position: relative; box-shadow: 0 2px 8px rgba(0,0,0,0.05); animation: fadeInTOC 0.8s ease-in-out; } @keyframes fadeInTOC { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } #daftar-isi-container h2 { margin-top: 0; font-size: 1.3rem; margin-bottom: 1rem; } #daftar-isi { list-style: disc; list-style-position: outside; margin: 0; padding-left: 1.2rem; } #daftar-isi li { display: flex; align-items: flex-start; margin: 0.3rem 0; transition: all 0.3s ease; } #daftar-isi li a { flex: 1; text-decoration: none; color: #333; padding: 4px 8px; border-radius: 4px; display: inline-block; transition: background 0.3s ease, transform 0.2s; word-break: break-word; } #daftar-isi li a:hover { background-color: #007bff; color: #fff; transform: translateX(5px); } #daftar-isi .toc-level-2 { margin-left: 0rem; } #daftar-isi .toc-level-3 { margin-left: 1.5rem; } #daftar-isi .toc-level-4 { margin-left: 3rem; } #daftar-isi .toc-level-5 { margin-left: 4.5rem; } #toggle-toc { position: absolute; top: 1rem; right: 1rem; background: transparent; border: none; color: #007bff; font-size: 0.9rem; cursor: pointer; transition: color 0.3s; } #toggle-toc:hover { color: #0056b3; } /* Highlight heading saat diklik dari TOC */ @keyframes highlightHeading { 0% { background-color: #cceeff; } 100% { background-color: transparent; } } .highlighted-heading { animation: highlightHeading 1s ease-in-out; } </style>

2. Salin JavaScript berikut

Letakkan di bagian paling bawah HTML Tema blog Anda, tepat sebelum </body>:


<script type="text/javascript"> //<![CDATA[ document.addEventListener("DOMContentLoaded", function() { const labelTOC = "Daftar Isi"; const postBody = document.querySelector(".post-body") || document.querySelector(".post"); if (!postBody) return; const tocContainer = document.createElement("div"); tocContainer.id = "daftar-isi-container"; tocContainer.innerHTML = ` <h2 id="toc-title">${labelTOC}</h2> <button id="toggle-toc">Sembunyikan</button> <ul id="daftar-isi"></ul> `; postBody.insertAdjacentElement("afterbegin", tocContainer); const tocList = document.getElementById("daftar-isi"); const allHeadings = postBody.querySelectorAll("h2, h3, h4, h5"); allHeadings.forEach((heading, index) => { if (heading.id === "toc-title") return; if (!heading.id) heading.id = `heading-${index}`; heading.addEventListener("click", () => { const tocTop = document.getElementById("daftar-isi-container").offsetTop; window.scrollTo({ top: tocTop - 20, behavior: "smooth" }); }); const level = parseInt(heading.tagName.substring(1)); if (level < 2) return; const li = document.createElement("li"); li.classList.add(`toc-level-${level}`); const a = document.createElement("a"); a.href = `#${heading.id}`; a.textContent = heading.textContent; a.addEventListener("click", (e) => { e.preventDefault(); const target = document.getElementById(heading.id); const yOffset = -20; const y = target.getBoundingClientRect().top + window.pageYOffset + yOffset; window.scrollTo({ top: y, behavior: 'smooth' }); target.classList.add("highlighted-heading"); setTimeout(() => { target.classList.remove("highlighted-heading"); }, 1000); }); li.appendChild(a); tocList.appendChild(li); }); const toggleBtn = document.getElementById("toggle-toc"); toggleBtn.addEventListener("click", () => { if (tocList.style.display === "none") { tocList.style.display = "block"; toggleBtn.textContent = "Sembunyikan"; } else { tocList.style.display = "none"; toggleBtn.textContent = "Tampilkan"; } }); }); //]]> </script>

๐Ÿ“Œ Catatan Penting

  1. TOC ini hanya aktif di halaman postingan (karena membaca dari .post-body)
  2. Heading yang terbaca adalah dari <h2> ke bawah
  3. TOC tidak memasukkan teks "Daftar Isi" sebagai item
  4. Jika ingin versi dengan collapsible H3/H4, silakan tinggalkan komentar

Komentar

Artikel Terpopuler

Al-Quran Obat Rohani dan Jasmani

Bacaan Setelah Al-Fatihah dalam Sholat

Doa Naik Kendaraan dan Safar

Hukum Tiyaroh (Anggapan Sial)

Duduk Istirahat dalam Sholat Menurut 4 Madzhab