본문 바로가기
웹 개발/블로그

구글블로그 | 블로거 자동 목차 만들기

by KISCH 2024. 2. 1.
반응형

구글블로그 블로거(블로그스팟) 글 상단에 h태그를 읽어들여 자동으로 목차를 만드는 법을 설명드리려고 합니다. 

 

목차

     

     

    Javascript

     

    포스팅 한 글 본문에 h 제목태그 요소를 읽어드리는 자바스크립트 함수 부분입니다.

     

    자바스크립크 삽입

    블로거 관리자 좌측메뉴 [테마] - [맞춤설정] 옆 화살표 - HTML 편집

    <head> </head> 사이에 아래 코드를 복사해서 붙여넣기 합니다.

     

    <!-- 자동목차 -->    
        <script type='text/javascript'>
            //<![CDATA[
            //*************Table of Content (TOC) plugin by anantvijaysoni.in
            function avsTOC() {
                var avsTOC = i = headlength = gethead = 0;
                var currentH2 = null; // 현재 처리 중인 h2 요소를 저장하기 위한 변수
    
                // h2와 h3 요소 처리
                var headings = document.querySelectorAll("#post-toc h2, #post-toc h3"); // h2와 h3 요소 선택
                var tocHTML = ""; // 목차의 HTML을 저장할 변수
    
                for (i = 0; i < headings.length; i++) {
                    gethead = headings[i].textContent;
    
                    if (headings[i].tagName === "H2") {
                        // 새로운 h2 요소를 만난 경우
                        if (currentH2 !== null) {
                            tocHTML += "</ul>"; // 이전 h2의 하위 목차 종료
                        }
                        currentH2 = headings[i];
                        currentH2.setAttribute("id", "point" + i);
                        tocHTML += "<li><a href='#point" + i + "'>" + gethead + "</a><ul>"; // h2 아래에 하위 목차 시작
                    } else if (headings[i].tagName === "H3" && currentH2 !== null) {
                        // h3 요소를 만나고, 현재 처리 중인 h2가 존재하는 경우
                        headings[i].setAttribute("id", "subpoint" + i);
                        tocHTML += "<li><a href='#subpoint" + i + "'>" + gethead + "</a></li>";
                    }
                }
    
                if (currentH2 !== null) {
                    tocHTML += "</ul>"; // 마지막 h2의 하위 목차 종료
                }
    
                document.getElementById("avsTOC").innerHTML = tocHTML;
            }
    
            function avsToggle() {
                var avs = document.getElementById('avsTOC');
                if (avs.style.display === 'none') {
                    avs.style.display = 'block';
                } else {
                    avs.style.display = 'none';
                }
            }
    
            // TOC 초기화
            window.onload = avsTOC;
            //]]>
    	</script>

     

     

    CSS

     

    목차의 모양을 만드는 CSS 부분입니다. 원하시는대로 수정해서 사용하시면 됩니다.

     

    CSS 삽입

    블로거 관리자 좌측메뉴 [테마] - [맞춤설정] 옆 화살표 - HTML 편집

    Ctrl + F 를 눌러 </b:skin> 를 검색합니다. ]]></b:skin> 태그 바로 위에 아래 코드를 삽입합니다.

     

    /* 자동목차 디자인 */
    .avsTOC {
        border: 1px solid rgba(133 , 133, 133, 0.33);
        font-weight:500;
        border-radius:0.55rem;
        line-height:0.8rem;
        margin:0px auto 15px;
        padding:10px 30px 15px 15px;
        display: inline-block;
        width: 91%;
        min-width: 90%;
        max-width: 91%;
        transition: box-shadow 0.25s linear;
        box-shadow: 0px 0px 3px rgba(0, 0, 2, 0.1);
            &:hover {
                box-shadow: 0px 1px 6px rgba(0, 0, 4, 0.5);
            }
    	background-color: #f5f5f5;
    }
    
    .avsTOC li:first-child {		/* h2 첫번째 */
        padding-top: 10px;
    }
    
    .avsTOC ol,.avsTOC ul {			/* h2 h3 */
    	margin:0;padding:0;
    }
    
    .avsTOC ol li {	
        padding:10px 0 0;
        margin:0 0 0 30px;					
        font-size:1.1rem;
    }
    
    .avsTOC ul {					/* h3 */
    	margin-left: 0px; 
        padding:10px 0px;
    	font-size: 0rem;
    }
    
    .avsTOC ul li:first-child { 	/* h3 첫번째 */
    
    }
    
    .avsTOC ul li:last-child {
      	padding: 0px 0px 10px 0px;
    }
    
    .avsTOC ul li {	
    	list-style-position: inside;
        margin:30px auto;
        padding:30px 0px 30px 20px;
    	font-size:0.9rem;
        line-height: 2;
    }
    
    .avsTOC a {
    	text-decoration:none;
    	color: #000 !important;
        margin-left: 0; 
        padding:30px 0px 30px 20px;
        line-height: 2;
    }
    
    .avsTOC a:hover {
        text-decoration:underline; 
        font-weight:600;
    	color: grey !important;
        list-style-position: inside;
        padding-inline-start: 0px;
        margin-left: 0; 
        padding:30px 0px 30px 20px;
        line-height: 2;
    }
    
    .avsTOC button {
        font-size:1.1rem;
        background-color:#fff;
        position:relative;
        outline:none;cursor:pointer; border:none;
        font-weight:600;
        margin-left: 0; 
        padding:30px 0px 30px 20px;
        line-height: 2;
    }

     

     

    블로거자동목차
    CSS 코드 위치

     

     

     

     

    HTML

     

    포스팅 글 본문입니다.

     

    HTML 형태

    아래 코드 사이에 H2, H3 태그가 있어야합니다.

    H2는 '제목', H3는 '부제목'입니다.

     

    <div class="avsTOC"><ol id="avsTOC"></ol></div>
    
    <script>avsTOC();</script>

     

     

    글 목차 

     

    글 목차 HTML 예시

    저는 새글을 쓸 때 템플릿이 열립니다. 아래 코드는 어떤 구조인지 코드를 보시라고 예를 든 코드입니다. 꼭 필요한 코드가 아닙니다.

    참고로 템플릿은 관리자화면 [설정] - [글 템플릿] 에서 지정하실 수 있습니다. 

      H1 태그가 페이지에 많으면 SEO에 문제가 생길 수 있기 때문에 자동목차를 만드실 때 H1 태그는 쓰지 마시기 바랍니다. 

     

    <div class="avsTOC"><ol id="avsTOC"></ol></div>
    
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <h2 style="text-align: left;"><span style="font-family: Noto Sans KR;">H2 제목</span></h2>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">그림</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <h3 style="text-align: left;"><span style="font-family: Noto Sans KR;">H3 부제목</span></h3>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <div class="separator"><span style="font-family: Noto Sans KR;">동영상</span></div>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <h3 style="text-align: left;"><span style="font-family: Noto Sans KR;">H3 부제목</span></h3>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <div class="separator"><span style="font-family: Noto Sans KR;">동영상</span></div>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <h3 style="text-align: left;"><span style="font-family: Noto Sans KR;">H3 부제목</span></h3>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <div class="separator"><span style="font-family: Noto Sans KR;">동영상</span></div>
    <span style="font-family: Noto Sans KR;"><br /></span>
    
    <h2 style="text-align: left;"><span style="font-family: Noto Sans KR;">H2 제목</span></h2>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">그림</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <h3 style="text-align: left;"><span style="font-family: Noto Sans KR;">H3 부제목</span></h3>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <div class="separator"><span style="font-family: Noto Sans KR;">동영상</span></div>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <h3 style="text-align: left;"><span style="font-family: Noto Sans KR;">H3 부제목</span></h3>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <span style="font-family: Noto Sans KR;">글</span>
    <span style="font-family: Noto Sans KR;"><br /></span>
    <div class="separator"><span style="font-family: Noto Sans KR;">동영상</span></div>
    <span style="font-family: Noto Sans KR;"><br /></span>
    
    <script>avsTOC();</script>

     

    미리보기 

    구글블로그자동목차

     

     

    이렇게 본문에서 H 태그만 읽어서 글 상단에 아래 그림처럼 자동으로 목차를 만들어 줍니다. 지금까지 구글 블로그인 블로거(블로그스팟)에서 TOC를 만드는 방법에 대해서 살펴보았습니다. 

     

     

    관련포스트
    구글블로그 | 블로거(Blogger) 장단점과 테마 추천
    구글블로그 | 이미지와 동영상 본문 넓이에 맞게 조정하기
    구글블로그 | 블로거 이미지 썸네일 깨지는 경우
    구글블로그 | 블로거 에디터 사용방법
    구글블로그 | 검색 엔진 등록 및 사이트맵 제출
    구글블로그 | IFTTT 페이스북 피드 자동 발행

     

     

    블로그TOC

    반응형

    댓글