๐Ÿ“Œ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ ๋ณธ๋ฌธ์— ๋ชฉ์ฐจ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ“Œ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ ๋ณธ๋ฌธ์— ๋ชฉ์ฐจ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ธ”๋กœ๊ทธ์ŠคํŒŸ(Blogger) ํ…Œ๋งˆ ์ค‘ ์ผ๋ถ€๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณธ๋ฌธ ๋ชฉ์ฐจ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ HTML ํŽธ์ง‘์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชฉ์ฐจ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชฉ์ฐจ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ‘ํ˜€ ์žˆ๋Š” ํ˜•ํƒœ์ด๋ฉฐ, H2์™€ H3 ์†Œ์ œ๋ชฉ๋งŒ ์ž๋™์œผ๋กœ ๋ฐ˜์˜๋˜๋ฉฐ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ๋ถ€๋ถ„์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


1️⃣ HTML ํŽธ์ง‘๊ธฐ์—์„œ ์ฝ”๋“œ ์ถ”๊ฐ€ํ•˜๊ธฐ

  1. ๋ธ”๋กœ๊ทธ์ŠคํŒŸ ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋กœ ์ด๋™
  2. "ํ…Œ๋งˆ" → "HTML ํŽธ์ง‘" ํด๋ฆญ
  3. Ctrl + F๋ฅผ ๋ˆŒ๋Ÿฌ </head>๋ฅผ ๊ฒ€์ƒ‰
  4. ์•„๋ž˜ ๋ชฉ์ฐจ ์ฝ”๋“œ๋ฅผ </head> ์•ž์— ๋ถ™์—ฌ๋„ฃ๊ธฐ

2️⃣ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ ๋ณธ๋ฌธ ๋ชฉ์ฐจ ์ฝ”๋“œ

๐Ÿ“Œ ์Šคํฌ๋ฆฝํŠธ (JavaScript)

html
<script>
//<![CDATA[
function insertTOC() {
    var postBody = document.querySelector('.post-body');
    if (!postBody) return;

    var toc = document.createElement('div');
    toc.className = 'toc';
    toc.innerHTML = '<div class="toc-header"><b>๋ชฉ์ฐจ</b><span class="toc-toggle">▼</span></div><div class="toc-content"><ul></ul></div>';

    var headings = postBody.querySelectorAll('h2, h3');
    var tocList = toc.querySelector('ul');

    headings.forEach(function(heading, index) {
        var anchor = 'toc-' + index;
        heading.id = anchor;
        var li = document.createElement('li');
        var a = document.createElement('a');
        a.textContent = heading.textContent;
        a.href = '#' + anchor;
        if (heading.tagName === 'H3') li.style.marginLeft = '20px';
        li.appendChild(a);
        tocList.appendChild(li);
    });

    var tocHeader = toc.querySelector('.toc-header');
    var tocToggle = toc.querySelector('.toc-toggle');
    var tocContent = toc.querySelector('.toc-content');

    tocHeader.addEventListener('click', function() {
        tocContent.style.display = tocContent.style.display === 'none' ? 'block' : 'none';
        tocToggle.textContent = tocContent.style.display === 'none' ? '▼' : '▲';
    });

    tocContent.style.display = 'none';
    tocToggle.textContent = '▼';

    postBody.insertBefore(toc, postBody.firstChild);
}

if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', insertTOC);
} else {
    insertTOC();
}
//]]>
</script>


๐Ÿ“Œ ์Šคํƒ€์ผ (CSS)

css
<style>
.toc {
    background-color: #f8f9fa;
    border: 1px solid #d3d3d3;
    border-radius: 8px;
    padding: 10px 13px;
    margin-bottom: 20px;
    font-size: 14px;
    line-height: 1.6;
}
.toc-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    user-select: none;
}
.toc h2 {
    margin: 0;
    font-size: 18px;
}
.toc-toggle {
    font-size: 16px;
}
.toc ul {
    list-style-type: none;
    padding-left: 0;
    margin: 10px 0 0;
}
.toc ul li {
    margin-bottom: 5px;
}
.toc a {
    text-decoration: none;
    color: #0645ad;
}
.toc a:hover {
    text-decoration: underline;
}
</style>


3️⃣ ์ €์žฅ ํ›„ ์ ์šฉ ํ™•์ธ

  1. ์ฝ”๋“œ ์ž…๋ ฅ ํ›„ "์ €์žฅ(๐Ÿ’พ)" ๋ฒ„ํŠผ ํด๋ฆญ
  2. ๋ธ”๋กœ๊ทธ ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ ๋ณธ๋ฌธ์„ ํ™•์ธ
  3. ์ •์ƒ์ ์œผ๋กœ ๋ชฉ์ฐจ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ์ฒดํฌ

๋ชฉ์ฐจ ๊ธฐ๋Šฅ ์„ค๋ช…

  • H1์—์„œ H3 ๊นŒ์ง€์˜ ํƒœ๊ทธ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ๋ชฉ์ฐจ๋ฅผ ์ƒ์„ฑ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชฉ์ฐจ๋Š” ์ ‘ํ˜€ ์žˆ์œผ๋ฉฐ, ํด๋ฆญํ•˜๋ฉด ํŽผ์ณ์ง
  • ๋ชฉ์ฐจ์˜ ํ•ญ๋ชฉ์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ์ œ๋ชฉ(H1, H2, H3)์œผ๋กœ ์ด๋™

๐Ÿ“Œ ์ด์ œ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ์—์„œ๋„ ํŽธ๋ฆฌํ•œ ๋ชฉ์ฐจ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ๋ณด์„ธ์š”! ๐Ÿš€

๋Œ“๊ธ€ ์“ฐ๊ธฐ

์—ฌ๋Ÿฌ๋ถ„์˜ ๋Œ“๊ธ€์€ ํฐ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.