์คํฐํค ํค๋ ๋ค์ ์จ๋ ์ต์ปค ๋งํฌ์ ์ง์น์ จ๋์? ์๋ฒฝํ ๋ด๋น๊ฒ์ด์ ์คํ์ ์ ์ํ ํ๋์ ์ด๊ณ ๊น๋ํ ํด๊ฒฐ์ฑ , CSS scroll-margin-top์ ๋ง๋๋ณด์ธ์.
์ต์ปค ๋ด๋น๊ฒ์ด์ ๋ง์คํฐํ๊ธฐ: CSS Scroll Margin ์ฌ์ธต ๋ถ์
ํ๋ ์น ๋์์ธ์ ์ธ๊ณ์์ ๋งค๋๋ฝ๊ณ ์ง๊ด์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ง๋๋ ๊ฒ์ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์ค๋๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ํํ ๋ณด๋ UI ํจํด ์ค ํ๋๋ ์คํฐํค(sticky) ๋๋ ๊ณ ์ (fixed) ํค๋์ ๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ฅผ ์๋๋ก ์คํฌ๋กคํ ๋ ๊ธฐ๋ณธ ๋ด๋น๊ฒ์ด์ , ๋ธ๋๋ฉ, ์ฃผ์ ํด๋ฆญ ์ ๋ ๋ฌธ๊ตฌ(call-to-action)๋ฅผ ํญ์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ์ ์งํด ์ค๋๋ค. ๋งค์ฐ ์ ์ฉํ์ง๋ง, ์ด ํจํด์ ๊ณ ์ ์ ์ด๋ฉด์๋ ์ค๋ง์ค๋ฌ์ด ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํฉ๋๋ค: ๋ฐ๋ก ๊ฐ๋ ค์ง๋ ์ต์ปค ๋งํฌ์ ๋๋ค.
ํ๋ฆผ์์ด ๊ฒฝํํด ๋ณด์ จ์ ๊ฒ๋๋ค. ๋ชฉ์ฐจ์ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์น์ ์ผ๋ก ์ถฉ์คํ ์ด๋ํ์ง๋ง, ์น์ ์ ์ ๋ชฉ์ ์คํฐํค ๋ด๋น๊ฒ์ด์ ๋ฐ ๋ค์ ๊น๋ํ๊ฒ ์จ๊ฒจ์ ธ ๋ฒ๋ฆฝ๋๋ค. ์ฌ์ฉ์๋ ๋งฅ๋ฝ์ ์๊ณ ํผ๋์ค๋ฌ์ํ๋ฉฐ, ์ฌ๋ฌ๋ถ์ด ๊ณต๋ค์ฌ ๋ง๋ ์ธ๋ จ๋ ๊ฒฝํ์ ์๊ฐ์ ์ผ๋ก ๊นจ์ ธ๋ฒ๋ฆฝ๋๋ค. ์์ญ ๋ ๋์ ๊ฐ๋ฐ์๋ค์ ํจ๋ฉ, ๊ฐ์ ์์(pseudo-elements), ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ ๋ค์ํ๊ณ ์๋ฆฌํ์ง๋ง ๋ถ์์ ํ ํธ๋ฒ๋ค๋ก ์ด ๋ฌธ์ ์ ์ธ์์์ต๋๋ค.
๋คํํ๋, ํธ๋ฒ์ ์๋๋ ๋๋ฌ์ต๋๋ค. CSS ์ํน ๊ทธ๋ฃน์ ๋ฐ๋ก ์ด ๋ฌธ์ ๋ฅผ ์ํด ํน๋ณํ ์ ์๋, ์ฐ์ํ๊ณ ๊ฒฌ๊ณ ํ ํด๊ฒฐ์ฑ ์ ์ ๊ณตํ์ต๋๋ค: ๋ฐ๋ก scroll-margin ์์ฑ์ ๋๋ค. ์ด ๊ธ์ CSS scroll margin์ ์ดํดํ๊ณ ๋ง์คํฐํ์ฌ, ์ฌ๋ฌ๋ถ ์ฌ์ดํธ์ ๋ด๋น๊ฒ์ด์ ์ ์ข์ ์ ์์ธ์์ ์ฆ๊ฑฐ์์ ๋์์ผ๋ก ๋ฐ๊พธ๋ ํฌ๊ด์ ์ธ ๊ฐ์ด๋์ ๋๋ค.
๊ณ ์ ์ ์ธ ๋ฌธ์ : ๊ฐ๋ ค์ง๋ ์ต์ปค ํ๊ฒ
ํด๊ฒฐ์ฑ ์ ์ถํํ๊ธฐ ์ ์, ๋ฌธ์ ๋ฅผ ์๋ฒฝํ๊ฒ ๋ถ์ํด ๋ด ์๋ค. ์ด ๋ฌธ์ ๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์น ๊ธฐ๋ฅ, ์ฆ ํ๋๊ทธ๋จผํธ ์๋ณ์(์ต์ปค ๋งํฌ)์ ๊ณ ์ ์์น ์ง์ (fixed positioning) ์ฌ์ด์ ๋จ์ํ ์ถฉ๋์์ ๋ฐ์ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ตฌ์กฐ: ๋๋ ทํ ์น์
๋ค๋ก ์ด๋ฃจ์ด์ง ๊ธด ์คํฌ๋กค ํ์ด์ง๊ฐ ์์ต๋๋ค. ๊ฐ ์ฃผ์ ์น์
์๋ `
ํ์ฌ ์๊ฐ
`์ ๊ฐ์ด ๊ณ ์ ํ `id` ์์ฑ์ ๊ฐ์ง ์ ๋ชฉ์ด ์์ต๋๋ค. - ๋ด๋น๊ฒ์ด์ : ํ์ด์ง ์๋จ์๋ ๋ด๋น๊ฒ์ด์ ๋ฉ๋ด๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ๋ชฉ์ฐจ์ผ ์๋ ์๊ณ , ์ฃผ ์ฌ์ดํธ ๋ด๋น๊ฒ์ด์ ์ผ ์๋ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ `์ฐ๋ฆฌ ํ์ฌ์ ๋ํด ์์๋ณด๊ธฐ`์ ๊ฐ์ด ํด๋น ์น์ ID๋ฅผ ๊ฐ๋ฆฌํค๋ ์ต์ปค ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- ์คํฐํค ์์: `position: sticky; top: 0;` ๋๋ `position: fixed; top: 0;` ์คํ์ผ์ด ์ ์ฉ๋ ํค๋ ์์๊ฐ ์์ต๋๋ค. ์ด ์์๋ ์๋ฅผ ๋ค์ด 80ํฝ์ ๊ณผ ๊ฐ์ด ์ ํด์ง ๋์ด๋ฅผ ๊ฐ์ง๋๋ค.
- ์ํธ์์ฉ: ์ฌ์ฉ์๊ฐ "์ฐ๋ฆฌ ํ์ฌ์ ๋ํด ์์๋ณด๊ธฐ" ๋งํฌ๋ฅผ ํด๋ฆญํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ๋์: ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ณธ ๋์์ ํ๊ฒ ์์(`id="about-us"`๋ฅผ ๊ฐ์ง `
`)์ ๋งจ ์ ๊ฐ์ฅ์๋ฆฌ๊ฐ ๋ทฐํฌํธ์ ๋งจ ์ ๊ฐ์ฅ์๋ฆฌ์ ์๋ฒฝํ๊ฒ ์ ๋ ฌ๋๋๋ก ํ์ด์ง๋ฅผ ์คํฌ๋กคํ๋ ๊ฒ์ ๋๋ค.
- ์ถฉ๋: ๋์ด๊ฐ 80ํฝ์
์ธ ์คํฐํค ํค๋๊ฐ ๋ทฐํฌํธ ์๋จ์ ์ฐจ์งํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฐฉ๊ธ ์คํฌ๋กคํ์ฌ ๋ณด์ฌ์ค `
` ์์๋ฅผ ๋ฎ์ด๋ฒ๋ฆฝ๋๋ค. ์ฌ์ฉ์๋ ์ ๋ชฉ *์๋*์ ๋ด์ฉ์ ๋ณด์ง๋ง, ์ ๋ชฉ ์์ฒด๋ ๋ณด์ง ๋ชปํฉ๋๋ค.
์ด๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋๋ค. ๋จ์ง ์ด ์์คํ ๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ์๋ํ๋๋ก ์ค๊ณ๋ ๋ฐฉ์์ ๋ ผ๋ฆฌ์ ์ธ ๊ฒฐ๊ณผ์ผ ๋ฟ์ ๋๋ค. ์คํฌ๋กค ๋ฉ์ปค๋์ฆ์ ๋ทฐํฌํธ ์์ ๊ฒน์ณ์ง ๊ณ ์ ์์น ์์์ ๋ํด ๋ณธ์ง์ ์ผ๋ก ์์ง ๋ชปํฉ๋๋ค. ์ด ๊ฐ๋จํ ์ถฉ๋์ ์๋ ๊ฐ์ ์ฐฝ์์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ ๋ณ์์ต๋๋ค.
๊ณผ๊ฑฐ์ ํธ๋ฒ๋ค: ์ถ์ต ์ฌํ
`scroll-margin`์ ์ฐ์ํจ์ ์ง์ ์ผ๋ก ์ดํดํ๋ ค๋ฉด, ์ฐ๋ฆฌ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ '์๋ ๋ฐฉ์'์ ์ดํดํ๋ ๊ฒ์ด ๋์์ด ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ๋ค์ ์ฌ์ ํ ์น์์ ์๋ง์ ์ฝ๋๋ฒ ์ด์ค์ ์กด์ฌํ๋ฉฐ, ์ด๋ฅผ ์์๋ณด๋ ๊ฒ์ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ์ ์ฉํฉ๋๋ค.
ํธ๋ฒ #1: ํจ๋ฉ๊ณผ ์์ ๋ง์ง ํธ๋ฆญ
์ด๊ฒ์ ๊ฐ์ฅ ์ด๊ธฐ์ ๊ฐ์ฅ ํํ CSS ์ ์ฉ ํด๊ฒฐ์ฑ ์ค ํ๋์์ต๋๋ค. ์์ด๋์ด๋ ํ๊ฒ ์์์ ์๋จ์ ํจ๋ฉ์ ์ถ๊ฐํ์ฌ ๊ณต๊ฐ์ ๋ง๋ค๊ณ , ๊ทธ ๋ค์ ์์ ๋ง์ง์ ์ฌ์ฉํ์ฌ ์์์ ์ฝํ ์ธ ๋ฅผ ์๋์ ์๊ฐ์ ์์น๋ก ๋ค์ ๋์ด์ฌ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์์ ์ฝ๋:
CSS
.sticky-header { height: 80px; position: sticky; top: 0; }
h2[id] {
padding-top: 80px; /* ํค๋ ๋์ด์ ๋์ผํ ๊ณต๊ฐ ์์ฑ */
margin-top: -80px; /* ์์์ ์ฝํ
์ธ ๋ฅผ ๋ค์ ์๋ก ๋์ด์ฌ๋ฆผ */
}
์ด๊ฒ์ด ํธ๋ฒ์ธ ์ด์ :
- ๋ฐ์ค ๋ชจ๋ธ ๋ณ๊ฒฝ: ์ด๊ฒ์ ์ง๊ด์ ์ด์ง ์์ ๋ฐฉ์์ผ๋ก ์์์ ๋ ์ด์์์ ์ง์ ์กฐ์ํฉ๋๋ค. ์ถ๊ฐ๋ ํจ๋ฉ์ ์์์ ์ ์ฉ๋ ๋ฐฐ๊ฒฝ์, ํ ๋๋ฆฌ ๋ฐ ๊ธฐํ ์คํ์ผ๋ง์ ๋ฐฉํดํ ์ ์์ต๋๋ค.
- ๊นจ์ง๊ธฐ ์ฌ์: ํค๋์ ๋์ด์ ํ๊ฒ ์์์ ์คํ์ผ๋ง ์ฌ์ด์ ๊ธด๋ฐํ ๊ฒฐํฉ์ ๋ง๋ญ๋๋ค. ๋ง์ฝ ๋์์ด๋๊ฐ ํค๋ ๋์ด๋ฅผ ๋ณ๊ฒฝํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ฉด, ๊ฐ๋ฐ์๋ ์ด ํจ๋ฉ/๋ง์ง ๊ท์น์ด ์ฌ์ฉ๋ ๋ชจ๋ ๊ณณ์ ์ฐพ์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
- ์๋งจํฑํ์ง ์์: ํจ๋ฉ๊ณผ ๋ง์ง์ ์์ ํ ๊ธฐ๊ณ์ ์ธ ์คํฌ๋กค๋ง ๋ชฉ์ ์ผ๋ก ์กด์ฌํ๋ฉฐ, ์ง์ ํ ๋ ์ด์์์ด๋ ๋์์ธ์์ ์ด์ ๊ฐ ์๋๋ฏ๋ก ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ๋ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
ํธ๋ฒ #2: ๊ฐ์ ์์ ํธ๋ฆญ
์กฐ๊ธ ๋ ์ ๊ตํ CSS ์ ์ฉ ์ ๊ทผ๋ฒ์ ํ๊ฒ์ ๊ฐ์ ์์(`::before`)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฐ์ ์์๋ ์ค์ ์์ ์์ ์์นํ๋ฉฐ ๋ณด์ด์ง ์๋ ์คํฌ๋กค ํ๊ฒ ์ญํ ์ ํฉ๋๋ค.
์์ ์ฝ๋:
CSS
h2[id] {
position: relative;
}
h2[id]::before {
content: "";
display: block;
height: 90px; /* ํค๋ ๋์ด + ์ฝ๊ฐ์ ์ฌ์ ๊ณต๊ฐ */
margin-top: -90px;
visibility: hidden;
}
์ด๊ฒ์ด ํธ๋ฒ์ธ ์ด์ :
- ๋ ๋ณต์กํจ: ์ด๊ฒ์ ์๋ฆฌํ์ง๋ง, ๋ณต์ก์ฑ์ ๋ํ๊ณ ์ด ํจํด์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์์๊ฒ๋ ๋ ๋ช ํํฉ๋๋ค.
- ๊ฐ์ ์์ ์๋ชจ: `::before` ๊ฐ์ ์์๋ฅผ ์ฌ์ฉํด ๋ฒ๋ ค์, ํด๋น ์์์ ๋ค๋ฅธ ์ฅ์์ ์ด๊ฑฐ๋ ๊ธฐ๋ฅ์ ์ธ ๋ชฉ์ ์ผ๋ก ํ์ํ ์ ์๋ ๊ฐ์ ์์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
- ์ฌ์ ํ ํธ๋ฒ์: ํ๊ฒ ์์์ ์ง์ ์ ์ธ ๋ฐ์ค ๋ชจ๋ธ์ ๊ฑด๋๋ฆฌ๋ ๊ฒ์ ํผํ์ง๋ง, ์ฌ์ ํ ์๋๋ ๋ชฉ์ ๊ณผ ๋ค๋ฅธ ์ฉ๋๋ก CSS ์์ฑ์ ์ฌ์ฉํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ถ๊ณผํฉ๋๋ค.
ํธ๋ฒ #3: ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์
๊ถ๊ทน์ ์ธ ์ ์ด๋ฅผ ์ํด ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋์ ๋๋ ธ์ต๋๋ค. ์คํฌ๋ฆฝํธ๋ ๋ชจ๋ ์ต์ปค ๋งํฌ์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ก์ฑ๊ณ , ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ์ด๋์ ๋ง๊ณ , ํค๋์ ๋์ด๋ฅผ ๊ณ์ฐํ ๋ค์, ํ์ด์ง๋ฅผ ์ฌ๋ฐ๋ฅธ ์์น๋ก ์๋์ผ๋ก ์คํฌ๋กคํฉ๋๋ค.
์์ ์ฝ๋ (๊ฐ๋ ์ ):
JavaScript
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const headerHeight = document.querySelector('.sticky-header').offsetHeight;
const targetElement = document.querySelector(this.getAttribute('href'));
if (targetElement) {
const elementPosition = targetElement.getBoundingClientRect().top;
const offsetPosition = elementPosition + window.pageYOffset - headerHeight;
window.scrollTo({
top: offsetPosition,
behavior: 'smooth'
});
}
});
});
์ด๊ฒ์ด ํธ๋ฒ์ธ ์ด์ :
- ๊ณผ๋ํ ํด๊ฒฐ์ฑ : ๊ทผ๋ณธ์ ์ผ๋ก ๋ ์ด์์๊ณผ ํํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ์คํฌ๋ฆฝํ ์ธ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฑ๋ฅ ๋น์ฉ: ์ข ์ข ๋ฌด์ํ ์ ์์ง๋ง, ํ์ด์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ์ทจ์ฝ์ฑ: ํด๋์ค ์ด๋ฆ์ด ๋ณ๊ฒฝ๋๋ฉด ์คํฌ๋ฆฝํธ๊ฐ ๊นจ์ง ์ ์์ต๋๋ค. ์ถ๊ฐ์ ์ด๊ณ ๋ ๋ณต์กํ ์ฝ๋ ์์ด๋ (์: ์ฐฝ ํฌ๊ธฐ ์กฐ์ ์) ๋์ ์ผ๋ก ๋์ด๊ฐ ๋ณ๊ฒฝ๋๋ ํค๋๋ฅผ ๊ณ ๋ คํ์ง ๋ชปํ ์ ์์ต๋๋ค.
- ์ ๊ทผ์ฑ ๋ฌธ์ : ์ ์คํ๊ฒ ๊ตฌํ๋์ง ์์ผ๋ฉด ์ ๊ทผ์ฑ ๋๊ตฌ ๋ฐ ํค๋ณด๋ ๋ด๋น๊ฒ์ด์ ์ ๋ํ ์์ ๋ธ๋ผ์ฐ์ ๋์์ ๋ฐฉํดํ ์ ์์ต๋๋ค. ๋ํ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋นํ์ฑํ๋๊ฑฐ๋ ๋ก๋์ ์คํจํ๋ฉด ์์ ํ ์๋ํ์ง ์์ต๋๋ค.
ํ๋์ ์ธ ํด๊ฒฐ์ฑ : `scroll-margin` ์๊ฐ
`scroll-margin`์ ์๊ฐํฉ๋๋ค. ์ด CSS ์์ฑ(๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ๋ณ ์์ฑ๋ค)์ ์ด๋ฌํ ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋์์ต๋๋ค. ์ด๊ฒ์ ์คํฌ๋กค ์ค๋ ์์ญ์ ์กฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์์ ์ฃผ์์ ์ธ๋ถ ๋ง์ง(outset margin)์ ์ ์ํ ์ ์๊ฒ ํด์ค๋๋ค.
๋ณด์ด์ง ์๋ ๋ฒํผ ์กด์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ (์๋ฅผ ๋ค์ด ์ต์ปค ๋งํฌ๋ฅผ ํตํด) ํน์ ์์๋ก ์คํฌ๋กคํ๋ผ๋ ์ง์๋ฅผ ๋ฐ์ผ๋ฉด, ์์์ ํ ๋๋ฆฌ-๋ฐ์ค(border-box)๋ฅผ ๋ทฐํฌํธ์ ๊ฐ์ฅ์๋ฆฌ์ ๋ง์ถ์ง ์์ต๋๋ค. ๋์ , `scroll-margin` ์์ญ์ ์ ๋ ฌํฉ๋๋ค. ์ด๊ฒ์ ์ค์ ์์๊ฐ ์ด๋ค ์์ผ๋ก๋ ๋ ์ด์์์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ์คํฐํค ํค๋ ์๋์์ ๋ฐ๋ ค ๋ด๋ ค์จ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฃผ์ธ๊ณต: `scroll-margin-top`
์ฐ๋ฆฌ์ ์คํฐํค ํค๋ ๋ฌธ์ ์ ๊ฐ์ฅ ์ง์ ์ ์ด๊ณ ์ ์ฉํ ์์ฑ์ `scroll-margin-top`์ ๋๋ค. ์ด๊ฒ์ ์์์ ์์ชฝ ๊ฐ์ฅ์๋ฆฌ์ ๋ํ ์คํ์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ํฉ๋๋ค.
์ด ํ๋์ ์ด๊ณ ์ฐ์ํ ํด๊ฒฐ์ฑ ์ ์ฌ์ฉํ์ฌ ์ด์ ์๋๋ฆฌ์ค๋ฅผ ๋ฆฌํฉํฐ๋งํด ๋ด ์๋ค. ๋ ์ด์ ์์ ๋ง์ง๋, ๊ฐ์ ์์๋, ์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ ์์ต๋๋ค.
์์ ์ฝ๋:
HTML
<header class="site-header">... ๋ด๋น๊ฒ์ด์
...</header>
<main>
<h2 id="section-one">์น์
1</h2>
<p>์ฒซ ๋ฒ์งธ ์น์
์ ์ฝํ
์ธ ...</p>
<h2 id="section-two">์น์
2</h2>
<p>๋ ๋ฒ์งธ ์น์
์ ์ฝํ
์ธ ...</p>
</main>
CSS
.site-header {
position: sticky;
top: 0;
height: 80px;
background-color: white;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
/* ๋ง๋ฒ์ ํ ์ค! */
h2[id] {
scroll-margin-top: 90px; /* ํค๋ ๋์ด(80px) + ์ฌ์ ๊ณต๊ฐ 10px */
}
์ด๊ฒ ์ ๋ถ์ ๋๋ค. ๊น๋ํ๊ณ , ์ ์ธ์ ์ด๋ฉฐ, ์์ฒด์ ์ผ๋ก ์ค๋ช ๋๋ ํ ์ค์ CSS์ ๋๋ค. ์ฌ์ฉ์๊ฐ `#section-one` ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด, ๋ธ๋ผ์ฐ์ ๋ `
` ์์ชฝ 90ํฝ์ ์ง์ ์ด ๋ทฐํฌํธ ์๋จ๊ณผ ๋ง๋ ๋๊น์ง ์คํฌ๋กคํฉ๋๋ค. ์ด๋ก์จ 80ํฝ์ ํค๋ ์๋์ ์ ๋ชฉ์ด ์๋ฒฝํ๊ฒ ๋ณด์ด๊ฒ ๋๊ณ , ํธ์ํ 10ํฝ์ ์ ์ถ๊ฐ ๊ณต๊ฐ์ด ๋จ๊ฒ ๋ฉ๋๋ค.
์ด์ ์ ์ฆ์ ๋ช ํํด์ง๋๋ค:
- ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ: ์คํฌ๋กค ๋์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ์ง ์๊ณ , ๊ทธ๊ฒ์ด ์ํ ๊ณณ์ธ CSS์ ์ ์๋ฉ๋๋ค. ์์์ ๋ ์ด์์์ ์ ํ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค.
- ๋จ์์ฑ๊ณผ ๊ฐ๋ ์ฑ: `scroll-margin-top` ์์ฑ์ ๊ทธ๊ฒ์ด ํ๋ ์ผ์ ์๋ฒฝํ๊ฒ ์ค๋ช ํฉ๋๋ค. ์ด ์ฝ๋๋ฅผ ์ฝ๋ ๋ชจ๋ ๊ฐ๋ฐ์๋ ์ฆ์ ๊ทธ ๋ชฉ์ ์ ์ดํดํ ๊ฒ์ ๋๋ค.
- ๊ฒฌ๊ณ ํจ: ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋ซํผ ๋ค์ดํฐ๋ธ ๋ฐฉ์์ผ๋ก, ์ด๋ค ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ํด๊ฒฐ์ฑ ๋ณด๋ค ๋ ํจ์จ์ ์ด๊ณ ์ ๋ขฐํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ: ์๋ ํธ๋ฒ๋ค๋ณด๋ค ๊ด๋ฆฌํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค. ๊ณง ๋ค๋ฃฐ CSS ์ฌ์ฉ์ ์ง์ ์์ฑ(Custom Properties)์ผ๋ก ๋์ฑ ๊ฐ์ ํ ์๋ ์์ต๋๋ค.
`scroll-margin` ์์ฑ ์ฌ์ธต ๋ถ์
`scroll-margin-top`์ด ์คํฐํค ํค๋ ๋ฌธ์ ์ ๊ฐ์ฅ ํํ ํด๊ฒฐ์ฌ์ด์ง๋ง, `scroll-margin` ๊ณ์ด์ ๊ทธ๋ณด๋ค ๋ ๋ค์ฌ๋ค๋ฅํฉ๋๋ค. ์ด๊ฒ์ ๊ตฌ์กฐ ๋ฉด์์ ์ต์ํ `margin` ์์ฑ์ ๋ฐ์ํฉ๋๋ค.
๊ฐ๋ณ ์์ฑ๊ณผ ๋จ์ถ ์์ฑ
`margin`๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์์ฑ์ ๊ฐ๋ณ์ ์ผ๋ก ๋๋ ๋จ์ถ ์์ฑ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค:
scroll-margin-top
scroll-margin-right
scroll-margin-bottom
scroll-margin-left
๊ทธ๋ฆฌ๊ณ `margin`๊ณผ ๋์ผํ 1๊ฐ์์ 4๊ฐ๊น์ง์ ๊ฐ ๊ตฌ๋ฌธ์ ๋ฐ๋ฅด๋ ๋จ์ถ ์์ฑ์ธ `scroll-margin`์ด ์์ต๋๋ค:
CSS
.target-element {
/* top | right | bottom | left */
scroll-margin: 90px 20px 20px 20px;
/* ๋ค์๊ณผ ๋์ผ: */
scroll-margin-top: 90px;
scroll-margin-right: 20px;
scroll-margin-bottom: 20px;
scroll-margin-left: 20px;
}
์ด ๋ค๋ฅธ ์์ฑ๋ค์ ์ ์ฒด ํ์ด์ง ์คํฌ๋กค-์ค๋ ์บ๋ฌ์ ๊ณผ ๊ฐ์ ๋ ์ง๋ณด๋ ์คํฌ๋กค๋ง ์ธํฐํ์ด์ค์์ ํนํ ์ ์ฉํ๋ฉฐ, ์ฌ๊ธฐ์ ์คํฌ๋กค๋ ํญ๋ชฉ์ด ์ปจํ ์ด๋์ ๊ฐ์ฅ์๋ฆฌ์ ์๋ฒฝํ๊ฒ ๋ถ์ง ์๋๋ก ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ญ์ ์ฌ๊ณ : ๋ ผ๋ฆฌ์ ์์ฑ
์ง์ ์ผ๋ก ์ ์ธ๊ณ์ ํต์ฉ๋๋ CSS๋ฅผ ์์ฑํ๋ ค๋ฉด, ๊ฐ๋ฅํ ํ ๋ฌผ๋ฆฌ์ ์์ฑ ๋์ ๋ ผ๋ฆฌ์ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ๋ ผ๋ฆฌ์ ์์ฑ์ ๋ฌผ๋ฆฌ์ ๋ฐฉํฅ(`top`, `left`, `right`, `bottom`)์ด ์๋ ํ ์คํธ์ ํ๋ฆ(`start` ๋ฐ `end`)์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ด๋ ์๋์ด๋ ํ๋ธ๋ฆฌ์ด์ ๊ฐ์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐ๋(RTL) ์ธ์ด ๋๋ ์ฌ์ง์ด ์ธ๋ก ์ฐ๊ธฐ ๋ชจ๋์ ๊ฐ์ ๋ค์ํ ์ฐ๊ธฐ ๋ชจ๋์ ๋ง๊ฒ ๋ ์ด์์์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
`scroll-margin` ๊ณ์ด์๋ ์์ ํ ๋ ผ๋ฆฌ์ ์์ฑ ์ธํธ๊ฐ ์์ต๋๋ค:
scroll-margin-block-start
: ํ์ค์ ์ธ ์ํ, ์์์ ์๋๋ก์ ์ฐ๊ธฐ ๋ชจ๋์์ `scroll-margin-top`์ ํด๋นํฉ๋๋ค.scroll-margin-block-end
: `scroll-margin-bottom`์ ํด๋นํฉ๋๋ค.scroll-margin-inline-start
: ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฐ๋ ์ปจํ ์คํธ์์ `scroll-margin-left`์ ํด๋นํฉ๋๋ค.scroll-margin-inline-end
: ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฐ๋ ์ปจํ ์คํธ์์ `scroll-margin-right`์ ํด๋นํฉ๋๋ค.
์ฐ๋ฆฌ์ ์คํฐํค ํค๋ ์์ ์์๋, ๋ ผ๋ฆฌ์ ์์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๊ฒฌ๊ณ ํ๊ณ ๋ฏธ๋ ์งํฅ์ ์ ๋๋ค:
CSS
h2[id] {
/* ์ด๊ฒ์ด ํ๋์ ์ด๊ณ ์ ํธ๋๋ ๋ฐฉ์์
๋๋ค */
scroll-margin-block-start: 90px;
}
์ด ๋จ ํ๋์ ๋ณ๊ฒฝ๋ง์ผ๋ก ๋ฌธ์์ ์ธ์ด์ ํ ์คํธ ๋ฐฉํฅ์ ๊ด๊ณ์์ด ์คํฌ๋กค ๋์์ด ์๋์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค. ์ด๋ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํด ๊ตฌ์ถํ๊ฒ ๋ค๋ ์ฝ์์ ๋ณด์ฌ์ฃผ๋ ์์ ๋ํ ์ผ์ ๋๋ค.
์ธ๋ จ๋ UX๋ฅผ ์ํ ๋ถ๋๋ฌ์ด ์คํฌ๋กค๋ง๊ณผ์ ๊ฒฐํฉ
`scroll-margin` ์์ฑ์ ๋ ๋ค๋ฅธ ํ๋์ ์ธ CSS ์์ฑ์ธ `scroll-behavior`์ ๋ฉ์ง๊ฒ ์กฐํ๋ฅผ ์ด๋ฃน๋๋ค. ๋ฃจํธ ์์์ `scroll-behavior: smooth;`๋ฅผ ์ค์ ํจ์ผ๋ก์จ, ๋ธ๋ผ์ฐ์ ์๊ฒ ์ต์ปค ๋งํฌ ์ ํ๋ฅผ ์ฆ์ ์ด๋ํ๋ ๋์ ์ ๋๋ฉ์ด์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ์ง์ํฉ๋๋ค.
์ด ๋์ ๊ฒฐํฉํ๋ฉด, ๋จ ๋ช ์ค์ CSS๋ง์ผ๋ก ์ ๋ฌธ์ ์ด๊ณ ์ธ๋ จ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ป์ ์ ์์ต๋๋ค:
CSS
html {
scroll-behavior: smooth;
}
.site-header {
position: sticky;
top: 0;
height: 80px;
}
[id] {
/* ์ ์ฌ์ ์ธ ์คํฌ๋กค ํ๊ฒ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ID๊ฐ ์๋ ๋ชจ๋ ์์์ ์ ์ฉ */
scroll-margin-top: 90px;
}
์ด ์ค์ ์ผ๋ก ์ต์ปค ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ์ฐ์ํ ์คํฌ๋กค์ด ์์๋๊ณ , ์คํฌ๋กค์ด ๋๋๋ฉด ํ๊ฒ ์์๊ฐ ์คํฐํค ํค๋ ์๋์ ์๋ฒฝํ๊ฒ ์์นํ๊ณ ๋ณด์ด๊ฒ ๋ฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ๊ณ ๋ ค์ฌํญ ๋ฐ ์ฃ์ง ์ผ์ด์ค
`scroll-margin`์ ๊ฐ๋ ฅํ์ง๋ง, ์ฌ๋ฌ๋ถ์ ๊ตฌํ์ ๋์ฑ ๊ฒฌ๊ณ ํ๊ฒ ๋ง๋ค๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ค์ ์ ์ธ ๊ณ ๋ ค์ฌํญ์ด ์์ต๋๋ค.
CSS ์ฌ์ฉ์ ์ง์ ์์ฑ์ผ๋ก ๋์ ํค๋ ๋์ด ๊ด๋ฆฌํ๊ธฐ
`80px`์ ๊ฐ์ ํฝ์ ๊ฐ์ ํ๋์ฝ๋ฉํ๋ ๊ฒ์ ์ ์ง๋ณด์์ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ ๋๋ค. ๋ค๋ฅธ ํ๋ฉด ํฌ๊ธฐ์์ ํค๋ ๋์ด๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋๋ ๊ทธ ์์ ๋ฐฐ๋๊ฐ ์ถ๊ฐ๋๋ฉด์? ์ฌ๋ฌ ๊ณณ์์ ๋์ด์ `scroll-margin-top` ๊ฐ์ ์ ๋ฐ์ดํธํด์ผ ํ ๊ฒ์ ๋๋ค.
ํด๊ฒฐ์ฑ ์ CSS ์ฌ์ฉ์ ์ง์ ์์ฑ(๋ณ์)์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ํค๋ ๋์ด๋ฅผ ๋ณ์๋ก ์ ์ํจ์ผ๋ก์จ, ํค๋์ ์คํ์ผ๊ณผ ํ๊ฒ์ ์คํฌ๋กค ๋ง์ง ์์ชฝ์์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
CSS
:root {
--header-height: 80px;
--scroll-padding: 1rem; /* ๊ฐ๊ฒฉ์ ์๋ ๋จ์ ์ฌ์ฉ */
}
/* ๋ฐ์ํ ํค๋ ๋์ด */
@media (max-width: 768px) {
:root {
--header-height: 60px;
}
}
.site-header {
position: sticky;
top: 0;
height: var(--header-height);
}
[id] {
scroll-margin-top: calc(var(--header-height) + var(--scroll-padding));
}
์ด ์ ๊ทผ ๋ฐฉ์์ ๋งค์ฐ ๊ฐ๋ ฅํฉ๋๋ค. ์ด์ ํค๋ ๋์ด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ ๊ฒฝ์ฐ, ํ ๊ณณ์์ `--header-height` ๋ณ์๋ง ์ ๋ฐ์ดํธํ๋ฉด ๋ฉ๋๋ค. `scroll-margin-top`์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ์ ๋ํ ์๋ต์ผ๋ก๋ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก DRY(Don't Repeat Yourself, ๋ฐ๋ณตํ์ง ๋ง ๊ฒ) ์์น์ ๋ฐ๋ฅธ, ์ ์ง๋ณด์ ๊ฐ๋ฅํ CSS๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ํ์ ๋๋ค.
๋ธ๋ผ์ฐ์ ์ง์
`scroll-margin`์ ๋ํ ๊ฐ์ฅ ์ข์ ์์์ ์ด์ ๊ทธ ์๋๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ค๋๋ , ์ด ์์ฑ์ ํฌ๋กฌ, ํ์ด์ดํญ์ค, ์ฌํ๋ฆฌ, ์ฃ์ง๋ฅผ ํฌํจํ ๋ชจ๋ ํ๋์ ์ธ, ์๋ฒ๊ทธ๋ฆฐ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋ฉ๋๋ค. ์ด๋ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ํ๋ ๋๋ค์์ ํ๋ก์ ํธ์์ ์ด ์์ฑ์ ์์ ์๊ฒ ์ฌ์ฉํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11๊ณผ ๊ฐ์ ๋งค์ฐ ์ค๋๋ ๋ธ๋ผ์ฐ์ ์ง์์ด ํ์ํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ, `scroll-margin`์ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ, ์ด์ ์ ํธ๋ฒ ์ค ํ๋๋ฅผ ํด๋ฐฑ(fallback)์ผ๋ก ์ฌ์ฉํด์ผ ํ ์๋ ์์ต๋๋ค. CSS `@supports` ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ ์๋ ํ๋์ ์ธ ์์ฑ์, ๊ทธ๋ ์ง ์์ ๋ธ๋ผ์ฐ์ ์๋ ํธ๋ฒ์ ์ ์ฉํ ์ ์์ต๋๋ค:
CSS
/* ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ์๋ ํธ๋ฒ */
[id] {
padding-top: 90px;
margin-top: -90px;
}
/* ์ง์๋๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ํ๋์ ์ธ ์์ฑ */
@supports (scroll-margin-top: 1px) {
[id] {
/* ๋จผ์ , ์๋ ํธ๋ฒ์ ๋๋๋ฆฝ๋๋ค */
padding-top: 0;
margin-top: 0;
/* ๊ทธ๋ฐ ๋ค์, ๋ ๋์ ํด๊ฒฐ์ฑ
์ ์ ์ฉํฉ๋๋ค */
scroll-margin-top: 90px;
}
}
ํ์ง๋ง, ๋ ๊ฑฐ์ ๋ธ๋ผ์ฐ์ ์ ์ฌ์ฉ ๊ฐ์๋ฅผ ๊ณ ๋ คํ ๋, ๋จผ์ ํ๋์ ์ธ ์์ฑ์ผ๋ก ๊ตฌ์ถํ๊ณ ํ๋ก์ ํธ ์ ์ฝ ์กฐ๊ฑด์ ์ํด ๋ช ์์ ์ผ๋ก ์๊ตฌ๋ ๋๋ง ํด๋ฐฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข ์ข ๋ ์ค์ฉ์ ์ ๋๋ค.
์ ๊ทผ์ฑ ํฅ์
`scroll-margin`์ ์ฌ์ฉํ๋ ๊ฒ์ ๋จ์ง ๊ฐ๋ฐ์์ ํธ์๋ฅผ ์ํ ๊ฒ์ด ์๋๋ผ, ์ ๊ทผ์ฑ์ ์ํ ์ค์ํ ์น๋ฆฌ์ ๋๋ค. ์ฌ์ฉ์๊ฐ ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง๋ฅผ ํ์ํ ๋(์: ๋งํฌ๋ฅผ ํญ์ผ๋ก ์ด๋ํ๊ณ ํ์ด์ง ๋ด ์ต์ปค์์ ์ํฐ ํค๋ฅผ ๋๋ฅผ ๋), ๋ธ๋ผ์ฐ์ ์ ์คํฌ๋กค๋ง์ด ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ํ๊ฒ ์ ๋ชฉ์ด ๊ฐ๋ ค์ง์ง ์๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ, ์ด๋ค ์ฌ์ฉ์์๊ฒ ์ค์ํ ๋งฅ๋ฝ์ ์ ๊ณตํฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ต์ปค ๋งํฌ๋ฅผ ํ์ฑํํ๋ฉด, ์ด์ ์ ์๊ฐ์ ์์น๊ฐ ์์ฑ์ผ๋ก ์๋ด๋๋ ๋ด์ฉ๊ณผ ์ผ์นํ๊ฒ ๋์ด, ๋ถ๋ถ์ ์ธ ์๋ ฅ์ ๊ฐ์ง ์ฌ์ฉ์์ ์ ์ฌ์ ์ธ ํผ๋์ ์ค์ฌ์ค๋๋ค. ์ด๋ ๋ชจ๋ ์ํธ์์ฉ ์์์ ๊ทธ ๊ฒฐ๊ณผ๋ก ๋ฐ์ํ๋ ํ๋์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ๋ช ํํ๊ฒ ์ธ์ง๋ ์ ์์ด์ผ ํ๋ค๋ ์์น์ ์งํค๋ ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก : ํ๋์ ์ธ ํ์ค์ ์์ฉํ์ธ์
์คํฐํค ํค๋์ ์ํด ์ต์ปค ๋งํฌ๊ฐ ๊ฐ๋ ค์ง๋ ๋ฌธ์ ๋ CSS๊ฐ ์ด๋ฅผ ํด๊ฒฐํ ํน์ ๋๊ตฌ๊ฐ ๋ถ์กฑํ๋ ์๋์ ์ ๋ฌผ์ ๋๋ค. ์ฐ๋ฆฌ๋ ํ์์ ์ํด ์๋ฆฌํ ํธ๋ฒ๋ค์ ๊ฐ๋ฐํ์ง๋ง, ๊ทธ๋ฌํ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ค์ ์ ์ง๋ณด์์ฑ, ๋ณต์ก์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ ๋ฉด์์ ๋๊ฐ๋ฅผ ์น๋ฌ์ผ ํ์ต๋๋ค.
`scroll-margin` ์์ฑ์ ํตํด, ์ฐ๋ฆฌ๋ ์ด์ ์ด ๋ฌธ์ ๋ฅผ ๊น๋ํ๊ณ ํจ์จ์ ์ผ๋ก ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋ CSS ์ธ์ด์ ์ผ๊ธ ์๋ฏผ์ ๊ฐ๊ฒ ๋์์ต๋๋ค. ์ด๋ฅผ ์ฑํํจ์ผ๋ก์จ, ์ฌ๋ฌ๋ถ์ ๋ ๋์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ์ฌ์ฉ์๋ฅผ ์ํด ๋ ์ข๊ณ , ๋ ์์ธก ๊ฐ๋ฅํ๋ฉฐ, ๋ ์ ๊ทผ์ฑ ๋์ ๊ฒฝํ์ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค.
์ฃผ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์คํฌ๋กค ์คํ์ ์ ๋ง๋ค๊ธฐ ์ํด ํ๊ฒ ์์์ `scroll-margin-top` (๋๋ `scroll-margin-block-start`)์ ์ฌ์ฉํ์ธ์.
- CSS ์ฌ์ฉ์ ์ง์ ์์ฑ๊ณผ ๊ฒฐํฉํ์ฌ ์คํฐํค ํค๋ ๋์ด์ ๋ํ ๋จ์ผ ์ ๋ณด ์์ค๋ฅผ ๋ง๋ค์ด ์ฝ๋๋ฅผ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๊ฒ ๋ง๋์ธ์.
- ์ธ๋ จ๋๊ณ ์ ๋ฌธ์ ์ธ ๋๋์ ์ํด `html` ์์์ `scroll-behavior: smooth;`๋ฅผ ์ถ๊ฐํ์ธ์.
- ์ด ์์ ์ ์ํด ๋ ์ด์ ํจ๋ฉ ํธ๋ฒ, ๊ฐ์ ์์, ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. ์น ํ๋ซํผ์ด ์ ๊ณตํ๋ ํ๋์ ์ด๊ณ ๋ชฉ์ ์ ๋ง๊ฒ ์ ์๋ ํด๊ฒฐ์ฑ ์ ์์ฉํ์ธ์.
๋ค์์ ์คํฐํค ํค๋์ ๋ชฉ์ฐจ๊ฐ ์๋ ํ์ด์ง๋ฅผ ๋ง๋ค ๋, ์ฌ๋ฌ๋ถ์ ๊ทธ ์ผ์ ์ํ ๊ฒฐ์ ์ ์ธ ๋๊ตฌ๋ฅผ ๊ฐ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด์ ๋งค๋๋ฝ๊ณ ์ข์ ์๋ ๋ด๋น๊ฒ์ด์ ๊ฒฝํ์ ๋ง๋ค์ด ๋ณด์ธ์.