구글 블로그 자동목차 넣는 방법

티스토리 블로그를 하다가 약관 변경에 깜짝 놀라서 구글 블로그 (블로그스팟)으로 이동하는 분들이 많을 것입니다. 티스토리 블로그에서 자동목차 생성되는 것을 사용하던 분들은 블로그 스팟에도 그런 기능이 있는지 궁금해 할 것인데, 그 방법을 정리해 봅니다.

개인적으로 목차가 꼭 있어야 한다고는 생각하지 않지만, 그래도 많은 분들이 사용하고 있으니 목차가 필요하다고 생각하면 쓰시면 됩니다.

구글 블로그 자동목차 넣기

구글 블로그에 자동목차를 넣기 위해서는 2가지가 필요합니다.

  1. 자동목차를 생성해 주는 스크립트 (자바스크립트) 코드
  2. 자동목차를 넣을 위치에 넣는 코드

그럼 각각에 대해서 어떤 코드인지 살펴보겠습니다.

자동목차를 생성해주는 스크립트

자동목차를 생성해 주는 스크립트는 아래와 같습니다. 코드를 넣어주는 위치는 /body 태그 바로 앞에 넣으면 됩니다.

구글 블로그 테마 편집은 테마 메뉴에서 html 편집을 들어가면 됩니다. 티스토리보다 불편해 보이기도 하다가, 막상 해 보면 더 편하게 느껴지기도 합니다. 거기 맨 아래로 내려가면 html 태그가 끝나는 곳에 /body 가 보입니다. 그 윗줄에 넣으면 되겠습니다.

<!-- 자동 목차 생성 시작 --> <style> html{scroll-behavior:smooth;overflow-x:hidden} .pS details summary{list-style:none;outline:none} .pS details summary::-webkit-details-marker{display:none} details.k2Toc{padding: 10px 15px;background: #f3f3f3;color: black;font-weight: 600;margin: 10px 0px; border:2px solid; border-radius: 5px;box-shadow: rgb(0 0 0 / 15%) 1.95px 1.95px 2.6px;} details.k2Toc summary{display:flex;justify-content:space-between;align-items:baseline} details.k2Toc summary::after{content:attr(data-show);font-size:12px; opacity:.7;cursor:pointer} details.k2Toc[open] summary::after{content:attr(data-hide)} details.toc a:hover{text-decoration: none; color: #fe6c6c;}details.toc a:active{text-decoration: none; color: #fe6c6c;}details.toc a{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden; color:inherit} details.toc ol{list-style:none;padding:0;margin:0; line-height:1.6em; counter-reset:toc-count} details.toc ol ol ol ol{display:none} details.toc ol ol, .tocIn li:not(:last-child){margin-bottom:5px} details.toc li li:first-child{margin-top:5px} details.toc li{display:flex;flex-wrap:wrap; justify-content:flex-end} details.toc li::before{flex:0 0 1px; content:counters(toc-count,'.')'. ';counter-increment:toc-count} details.toc li a{flex:1 0 calc(100% - 23px)} details.toc li li::before{flex:0 0 2px; content:counters(toc-count,'.')} details.toc li li a{flex:1 0 calc(100% - 28px)} details.toc li li li::before{flex:0 0 3px} details.toc li li li a{flex:1 0 calc(100% - 45px)} details.toc .toc >ol{margin-top:1em} details.toc .toc >ol >li >ol{flex:0 0 calc(100% - 23px)} details.toc .toc >ol >li >ol ol{flex:0 0 calc(100% - 45px)} details.toc .toc >ol >li >ol ol ol{flex:0 0 calc(100% - 35px)} </style> <script>/<![CDATA[/ /* Table of Contents / class TableOfContents { constructor({ from, to }) { this.fromElement = from; this.toElement = to; this.headingElements = this.fromElement.querySelectorAll("h1, h2, h3, h4, h5, h6"); this.tocElement = document.createElement("div"); }; getMostImportantHeadingLevel() { let mostImportantHeadingLevel = 6; for (let i = 0; i < this.headingElements.length; i++) { let headingLevel = TableOfContents.getHeadingLevel(this.headingElements[i]); mostImportantHeadingLevel = (headingLevel < mostImportantHeadingLevel) ? headingLevel : mostImportantHeadingLevel; } return mostImportantHeadingLevel; }; static generateId(headingElement) { return headingElement.textContent.replace(/\s+/g, "_"); }; static getHeadingLevel(headingElement) { switch (headingElement.tagName.toLowerCase()) { case "h1": return 1; case "h2": return 2; case "h3": return 3; case "h4": return 4; case "h5": return 5; case "h6": return 6; default: return 1; } }; generateToc() { let currentLevel = this.getMostImportantHeadingLevel() - 1, currentElement = this.tocElement; for (let i = 0; i < this.headingElements.length; i++) { let headingElement = this.headingElements[i], headingLevel = TableOfContents.getHeadingLevel(headingElement), headingLevelDifference = headingLevel - currentLevel, linkElement = document.createElement("a"); if () { headingElement.id = TableOfContents.generateId(headingElement); } linkElement.href = #${headingElement.id}; linkElement.textContent = headingElement.textContent; if (headingLevelDifference > 0) { for (let j = 0; j < headingLevelDifference; j++) { let listElement = document.createElement("ol"), listItemElement = document.createElement("li"); listElement.appendChild(listItemElement); currentElement.appendChild(listElement); currentElement = listItemElement; } currentElement.appendChild(linkElement); } else { for (let j = 0; j < -headingLevelDifference; j++) { currentElement = currentElement.parentNode.parentNode; } let listItemElement = document.createElement("li"); listItemElement.appendChild(linkElement); currentElement.parentNode.appendChild(listItemElement); currentElement = listItemElement; } currentLevel = headingLevel; } this.toElement.appendChild(this.tocElement.firstChild); } } /]]>*/</script> <script>document.addEventListener('DOMContentLoaded', () => new TableOfContents({ from: document.querySelector('#post-body'), to: document.querySelector('#toContent') }).generateToc() );</script> <!-- 자동 목차 생성 끝 -->

자동목차를 넣는 스크립트

자동목차를 사용하기 위해서는 아래 코드를 넣고자 하는 곳에 넣으면 됩니다. 많은 분들이 본문 최상단에 넣기도 하고, 첫 디스크립션이 끝난 이후에 넣기도 합니다.

원하는 위치에 html 코드만 넣으면 되는 것입니다.

<details class="k2Toc toc" open=""> <summary data-hide="숨기기" data-show="보기">목차</summary> <div class="toc" id="toContent"></div> </details> <br />

위 코드들을 활용하면 구글 블로그에서 자동목차를 사용할 수 있습니다.

Leave a Comment