카테고리 없음
티스토리 Letter스킨 자동 목차 생성하기
AgileJung
2022. 7. 18. 16:42
728x90
반응형
벨로그와 다른 블로그를 사용했을 때, 편리했던 기능 중 하나인 자동 목차 기능을 티스토리에 적용해보자.
나는 티스토리의 Letter 스킨을 사용하고 있다.
Tocbot이라는 라이브러리 사용하여 자동 목차를 생성할 것이다.
1. <head></head> 안에 적용하기
head부분 안에 적용해야 할 것이 2개가 있다.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.min.js"></script>
css와 js파일을 연동시켜줘야 한다.
2. <body></body> 안에서 <s_permalink_article_rep> 밑에 추가하기
<div class="toc toc-fixed" ></div>
<s_permalink_article_rep> 밑에 위의 구문을 추가하자.
3. </body> 바로 위에 스크립트 추가하기
<script>
let content = document.querySelector('.article_view')
let headings = content.querySelectorAll('h1, h2, h3, h4, h5, h6, h7')
let headingMap = {}
Array.prototype.forEach.call(headings, function (heading) {
let id = heading.id ? heading.id : heading.textContent.trim().toLowerCase()
.split(' ').join('-').replace(/[\!\@\#\$\%\^\&\*\(\):]/ig, '')
headingMap[id] = !isNaN(headingMap[id]) ? ++headingMap[id] : 0
if (headingMap[id]) {
heading.id = id + '-' + headingMap[id]
} else {
heading.id = id
}
})
tocbot.init({
tocSelector: '.toc',
contentSelector: '.article_view',
headingSelector:'h1, h2, h3',
hasInnerContainers: false
});
$(document).ready(function(){
$('.toc').addClass('toc-absolute');
let toc_top = $('.toc').offset().top;
$(window).scroll(function() {
if ($(this).scrollTop() >= toc_top) {
$('.toc').addClass('toc-fixed');
$('.toc').removeClass('toc-absolute');
} else {
$('.toc').addClass('toc-absolute');
$('.toc').removeClass('toc-fixed');
}
});
});
</script>
</body>
바디 태그가 끝나는 지점 바로 위에 스크립트 구문을 추가해준다.
4. CSS 추가하기
/*tocbot*/
.toc-absolute {
position: absolute;
margin-top:165px;
}
.toc-fixed {
position: fixed;
top: 165px;
}
.toc {
right: calc((100% - 850px) / 2 - 300px);
width: 250px;
padding: 10px;
box-sizing: border-box;
}
.toc-list {
margin-top: 10px !important;
font-size: 0.9em;
}
.toc > .toc-list li {
margin-bottom: 10px;
}
.toc > .toc-list li:last-child {
margin-bottom: 0;
}
.toc > .toc-list li a {
text-decoration: none;
}
.toc-list-item .is-collapsed{
max-height: 3000px;
} //스크롤 해야만 자동 목차가 보이는 현상 고치기
를 추가해주자.
위와 같이 진행했음에도 자동 목차가 생기지 않았다면,
아래와 같이 해보자.
자동 목차가 생기지 않았다면?
자바스크립트 부분
let content = document.querySelector('.entry-content')
contentSelector: '.entry-content',
</body> 바로 위에 적용하였던 자바스크립트 부분이 위처럼 되어있을 것이다.
해당 스크립트에서 .entry-content 이 부분을 .article_view 으로 수정해주자.
자동 목차가 중간에 끊기거나 등등의 문제가 발생한다면?
바로 위에 적용하였던 자바스크립트 부분에서 아래와 같은 내용을 삭제한다.
$(window).scroll(function() {
if ($(this).scrollTop() >= toc_top) {
$('.toc').addClass('toc-fixed');
$('.toc').removeClass('toc-absolute');
} else {
$('.toc').addClass('toc-absolute');
$('.toc').removeClass('toc-fixed');
}
});
자동 생성을 커스텀 하고 싶다면?
처음 <head></head> 안에 추가시켰던 아래의 구문을 삭제하고 해당 css파일을 직접 입력한다.
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tocbot/4.11.1/tocbot.css">
css 파일의 내용은 아래와 같다.
tocbot.css
.toc{overflow-y:auto}
.toc>.toc-list{overflow:hidden;position:relative}
.toc>.toc-list li{list-style:none}
.toc-list{margin:0;padding-left:10px}
a.toc-link{color:#333;height:100%}
.is-collapsible{max-height:1000px;overflow:hidden;transition:all 300ms ease-in-out}
.is-collapsed{max-height:0}
.is-position-fixed{position:fixed !important;top:0}
.is-active-link{font-weight:700}
// 활성화된 목차 색상 변경
.is-active-li a{font-weight:700; color: #4998ff;}
//활성화되지 않은 상태바 색상
.toc-link::before{background-color:#EEE;content:' ';display:inline-block;height:inherit;left:0;margin-top:-1px;position:absolute;width:2px}
//활성화된 상태바 색상
.is-active-link::before{background-color:#4998ff}
//hover했을 때, 색상 변경
.toc > .toc-list li a:hover{
color: #157ead;
}
제목 3은 바로 나오지 않고 상위 제목 부분의 내용을 읽어야 생성된다.
제목 3입니다.
728x90
반응형