티스토리에는 목차 기능이 탑재되어 있지 않기 때문에 외부 TOC 스크립트를 로드하여 수동 또는 자동으로 목차를 삽입하는 경우가 많습니다. 저는 티스토리 블로그에 심플한 자바스크립트와 CSS 코드로 직접 만든 목차(TOC)를 사용하고 있습니다.
초간단 티스토리 자동 목차 만들기
워드프레스에는 다양한 무료 및 유료 목차 플러그인이 있습니다. 이 워드프레스 블로그에는 현재 Fixed TOC라는 유료 목차 플러그인이 사용되고 있습니다.
제 티스토리 블로그에는 심플한 자바스크립트(JavaScript)와 CSS로 된 목차가 적용되어 있습니다.😄

외부 목차 스크립트를 로드하여 커스텀하는 방식을 이용하다 스킨을 오디세이(Odyssey)로 바꾸면서 간단한 목차 스크립트를 만들어 보았습니다.
다음의 자바스크립트와 CSS 코드가 사용되었습니다.
JS 코드:
<script>
document.addEventListener("DOMContentLoaded", function() {
function smoothScrollTo(element) {
document.querySelector(element).scrollIntoView({
behavior: 'smooth'
});
}
var toc = document.createElement('nav');
toc.id = 'table-of-contents';
toc.setAttribute('aria-label', 'Table of Contents');
toc.setAttribute('itemscope', '');
toc.setAttribute('itemtype', 'http://schema.org/SiteNavigationElement');
var tocLabel = document.createElement('div');
tocLabel.id = 'toc-label';
tocLabel.innerText = '목차';
toc.appendChild(tocLabel);
var ul = document.createElement('ul');
var counter = { h2: 0, h3: 0, h4: 0 };
var headings = document.querySelectorAll('.contents_style h2, .contents_style h3, .contents_style h4');
if (headings.length > 1) {
Array.prototype.forEach.call(headings, function(heading) {
var headingLevel = heading.tagName.toLowerCase();
if (headingLevel === 'h2') {
counter.h2++;
counter.h3 = 0;
counter.h4 = 0;
} else if (headingLevel === 'h3') {
counter.h3++;
counter.h4 = 0;
} else if (headingLevel === 'h4') {
counter.h4++;
}
var sectionNumber = counter.h2 + (counter.h3 ? '.' + counter.h3 : '') + (counter.h4 ? '.' + counter.h4 : '');
var anchor = document.createElement('a');
var headingId = 'heading' + sectionNumber.replace(/\./g, '-'); // 점(.)을 하이픈(-)으로 대체
anchor.href = '#' + headingId;
anchor.innerText = sectionNumber + ' ' + heading.innerText;
anchor.setAttribute('itemprop', 'url');
var li = document.createElement('li');
if (headingLevel === 'h3') {
li.classList.add('toc-h3');
} else if (headingLevel === 'h4') {
li.classList.add('toc-h4');
}
li.setAttribute('itemprop', 'name');
li.appendChild(anchor);
ul.appendChild(li);
heading.id = headingId;
heading.setAttribute('itemprop', 'name');
});
toc.appendChild(ul);
var firstH2 = document.querySelector('.contents_style h2');
if (firstH2) {
firstH2.parentNode.insertBefore(toc, firstH2);
}
}
var tocLinks = document.querySelectorAll('#table-of-contents a');
tocLinks.forEach(function(link) {
link.addEventListener('click', function(e) {
e.preventDefault();
var href = this.getAttribute('href');
smoothScrollTo(href);
});
});
});
</script>
CSS 코드:
/* TOC */
#table-of-contents {
background-color: #f8f9fa;
border-radius: 10px;
padding: 20px;
margin-bottom: 30px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
#toc-label {
font-weight: 700;
margin-bottom: 15px;
font-size: 22px;
color: #333;
position: relative;
display: inline-block;
padding-bottom: 5px;
border-bottom: 4px solid #007bff;
}
#table-of-contents ul {
list-style: none;
padding: 0;
margin-left: 20px;
}
#table-of-contents ul li {
margin-bottom: 10px;
position: relative;
}
#table-of-contents ul li a {
color: #333;
text-decoration: none;
transition: color 0.3s;
}
#table-of-contents ul li a:hover {
color: #007bff;
}
#table-of-contents ul li.toc-h3 {
margin-left: 15px;
}
#table-of-contents ul li.toc-h4 {
margin-left: 30px;
}
동일한 코드를 워드프레스 사이트에도 적절히 변경하여 사용하고 있습니다.
티스토리에서는 상기의 JS 코드와 CSS 코드를 스킨 파일에 추가하면 됩니다.
코드를 티스토리 스킨 파일에 추가하는 방법
상기 코드를 추가하려면 꾸미기 » 스킨 편집으로 이동합니다.

스킨 편집 페이지가 표시되면 html 편집 버튼을 클릭합니다.

상기의 자바스크립트 코드는 HTML 탭에서 하단으로 이동하여 </body> 바로 위에 추가하도록 합니다.

CSS 코드는 CSS 탭을 클릭하고 맨 아래에 추가하도록 합니다.

적용 버튼을 클릭하여 변경 사항을 저장하도록 합니다.
자동 목차가 생성되도록 하는 방법
본문 글에 H2, H3, H4가 2개 이상 있으면 자동으로 목차가 첫 번째 H2 항목 바로 위에 표시될 것입니다.
티스토리에서 글을 작성할 때 올바른 제목 태그를 적용하시기 바랍니다.

티스토리에서는 제목1이 H2 태그입니다.
- 제목1: H2 헤딩 태그
- 제목2: H3 헤딩 태그
- 제목3: H4 헤딩 태그
- 제목4: H5 헤딩 태그
이 때문에 헷갈릴 수 있지만, 첫 번째 소제목은 "제목1"을 사용하시기 바랍니다.
기존에 수동으로 목차 코드를 추가한 것이 있으면 삭제해야 합니다.
모바일에서 자동 목차가 표시되지 않는 문제
모바일 기기에서 자동 목차가 표시되지 않는 경우에는 티스토리에서 모바일웹 자동 연결을 비활성화하면 됩니다.
티스토리 관리자 페이지 » 꾸미기 » 모바일로 이동하여 티스토리 모바일웹 자동 연결을 "사용하지 않습니다"로 설정하시기 바랍니다.

마치며
이상으로 티스토리에 사용할 수 있는 심플한 목차 스크립트에 대하여 살펴보았습니다. 기존에 제 티스토리 블로그에서 소개한 자동 목차 코드는 외부 TOC 스크립트를 로드하는 방식이었으며 적용하는 것이 조금 까다로웠지만, 이 글에 제시된 코드는 쉽게 적용이 가능합니다.
오디세이 스킨에서 잘 작동하고 있으며 다른 티스토리 공식 스킨에서도 잘 작동할 것으로 생각됩니다. 스킨에 따라 코드를 조금 수정해야 할 수도 있습니다.
댓글 남기기