๋ธ๋ก๊ทธ ์ฌ์ด๋๋ฐ ๋์ ํ์ฉ๋ฒ๊ณผ ๋ชจ๋ฐ์ผ UX ์ต์ ํ ์ ๋ต (CLS ๋ฐฉ์ง ์ฝ๋ ํฌํจ)
๋ธ๋ก๊ทธ ์์ต ํฅ์์ ์ํ ๋ฐ์คํฌํ์ฌ์ด๋๋ฐ์ ๋์ ์์น ์ด๋(Sticky Sidebar) ์ค์ ๊ณผ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์์ ํญ์ ๋ ธ์ถ ๋ฐฉ๋ฒ์ ๋๋ค.๋๊ธ ๋ณด๊ธฐ ๋ฒํผ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ(UX)์ ๊ฐ์ ํ๊ณ Core Web Vitals ์งํ ์ค CLS(๋ ์ด์์ ๋ณ๋)๋ฅผ ์ ๋ฐํ์ง ์๋ ์ต์ ํ๋ HTML ๋ฐ JavaScript ์ฝ๋๋ฅผ ์๋ดํฉ๋๋ค.
1. ๋ธ๋ก๊ทธ ์์ต๊ณผ ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ด์ ์์์ ์ฌ์ด๋๋ฐ ์ฌ์ ์
๋ธ๋ก๊ทธ์์ ์ฌ์ด๋๋ฐ๋ ์ ๋ณด์ ๊ด๊ณ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถํ์ฌ ๋ธ๋ก๊ทธ ์์ต์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ๋ ํต์ฌ ์์ญ์ ๋๋ค. ์ฌ์ด๋๋ฐ๋ ๋ฐฉ๋ฌธํ๋ ์ฌ์ฉ์์๊ฒ ๋ธ๋ก๊ทธ์ ์ค์ํ ์ ๋ณด(์ธ๊ธฐ๊ธ, ์นดํ ๊ณ ๋ฆฌ, ๊ณต์ง์ฌํญ)๋ฅผ ๊ฐ๋จํ๊ฒ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ฉฐ, ์ ๋์ผ์ค ๋ฑ ๊ด๊ณ ๋ฅผ ๋ ธ์ถ์์ผ ์์ต ํฅ์์๋ ํฌ๊ฒ ๊ธฐ์ฌํฉ๋๋ค.
๋ชจ๋ฐ์ผ ํ๊ฒฝ์์์ ์ฌ์ด๋๋ฐ ๋ฌธ์ ์
ํ์ง๋ง ๋ชจ๋ฐ์ผ ์ ์ ์ ์ฌ์ด๋๋ฐ๋ ๋ช ๊ฐ์ง ๊ตฌ์กฐ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๋ธ๋ก๊ทธ ์คํจ์ ๊ฒฝ์ฐ, ๊ด๊ณ ๋ ธ์ถ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ง์ง ์๊ฑฐ๋, ๋ชจ๋ฐ์ผ์์๋ ์ฌ์ด๋๋ฐ๊ฐ ํ ๊ธ ํํ๋ก ์จ๊ฒจ์ง๊ธฐ ๋๋ฌธ์ ์ด์์๊ฐ ๋ ธ์ถ์ํค๊ณ ์ถ์ ์ ๋ณด๋ ๊ด๊ณ ๊ฐ ์ฌ์ฉ์์๊ฒ ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌ๋์ง ์์ต๋๋ค. ์ด๋ก ์ธํด ์ฌ์ฉ์์ ์ ํ์ด ์ ํ๋๊ณ , ๊ด๊ณ ํด๋ฆญ๋ฅ (CTR)์ด ํ๋ฝํ์ฌ ๋ธ๋ก๊ทธ ์์ต์ด ์ ํ๋ ์ ์์ต๋๋ค.
๋ ํฐ ๋ฌธ์ ๋ ๋ธ๋ก๊ทธ ์์ต์ ์ํ ๊ด๊ณ ๋ ธ์ถ์ ๋๋ค. ๋ง์ ์ฌ์ฉ์๊ฐ ๋ชจ๋ฐ์ผ ์๋จ์ ํ ๊ธํ ์ฌ์ด๋๋ฐ๋ฅผ ์ธ์งํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ์์ด, ๋ชจ๋ฐ์ผ์์ ์ฌ์ด๋ ์์ญ์ ์ฌ์ค์ ๋ฌด์ฉ์ง๋ฌผ์ด ๋์ด ๊ธฐํ๋น์ฉ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ธ๋ก๊ทธ ์์ต๊ณผ ์ฌ์ด๋๋ฐ ํ์ฉ์ ๊ณ ๋ คํ ๋, ์ฌ์ด๋๋ฐ์ ๋ ธ์ถ ๋ฐฉ์, ํนํ ๋ชจ๋ฐ์ผ์์์ ํญ์ ๋ ธ์ถ ์ ๋ต์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋ฐ์คํฌํ ํ๊ฒฝ์์์ ๊ณต๊ฐ ๋ญ๋น ๋ฌธ์
์ฌ์ด๋๋ฐ๋ ๋ฐ์คํฌํ์์ ์ ์ฒด ์์ญ์ 3๋ถ์ 1์ ์ฐจ์งํ์ง๋ง, ์ฃผ ์ฝํ ์ธ ์ ์์ด ๋ง์์ ธ ์ฌ์ฉ์๊ฐ ๊ธธ๊ฒ ์คํฌ๋กคํ๋ฉด ์ฌ์ด๋๋ฐ๊ฐ ๋๋๋ ์ง์ ์ดํ์ ๋๋จธ์ง ์์ญ์ด ๋น ๊ณต๊ฐ์ผ๋ก ๋จ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ด๋ก ์ธํด ๋ฐ์คํฌํ์์๋ ์คํฌ๋กค ์ ๊ด๊ณ ๋ ธ์ถ์ด ์ค๋จ๋๋ ๊ณต๊ฐ ๋ญ๋น๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ด๋๋ฐ ์ ๋ณด๋ฅผ ๋์ ์ผ๋ก ์ด๋์ํค๋ ๋ฐฉ๋ฒ์ ์ ์ฉํด์ผ ํฉ๋๋ค.
2. ๋ธ๋ก๊ทธ ์์ต ํฅ์์ ์ํ ๋์ ์ฌ์ด๋๋ฐ ๊ตฌํ ์ ๋ต
๋ฐ์คํฌํ์์ ์ฌ์ด๋๋ฐ ์ ๋ณด๋ฅผ ๋์ ์ผ๋ก ์ด๋ (Sticky/Follow Sidebar)
๋ฐ์คํฌํ ํ๊ฒฝ์์ ์ฌ์ด๋ ์ ๋ณด๊ฐ ์ฌ์ฉ์ ๋ทฐ ์์ญ(View Port)์ ๋ฒ์ด๋ ์คํฌ๋กค๋ ๋, ์ด๋ฅผ ๋ค์ ์ฌ์ฉ์ ๋ทฐ ์์ญ์ผ๋ก ์ด๋์์ผ ํญ์ ๋ ธ์ถ๋ ์ ์๋๋ก ์ค์ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ด๋๋ฐ๊ฐ ์ฌ์ฉ์๋ฅผ ๋ฐ๋ผ๋ค๋๋ '์คํฐํค(Sticky)' ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ํนํ ๊ด๊ณ ๋ ธ์ถ ํจ์จ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
๋ทฐ ์ด๋์ผ๋ก ๋น ๊ณต๊ฐ์ ์ฑ์ฐ๊ณ ๊ด๊ณ ๋ ธ์ถ ์๊ฐ์ ๋๋ฆฌ๋ ์ ๋ต

๋ชจ๋ฐ์ผ์์ ์ ํ์ ๋ ธ์ถ์ ํญ์ ๋ ธ์ถ๋ก ์ค์ (๋ชจ๋ฐ์ผ ์ต์ ํ ์ ๋ต)
๋ชจ๋ฐ์ผ ํ๊ฒฝ์์ ์ฌ์ด๋ ์์ญ์ ํ ๊ธ ํํ๋ก ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ ํ์ ์ผ๋ก ์ ๊ทผํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ํ๊ฒฝ์ ์ฌ์ฉ์์๊ฒ ๋ถํธํจ์ ์ค ๋ฟ๋ง ์๋๋ผ ๊ด๊ณ ๋ ธ์ถ ๊ธฐํ๋ฅผ ์ค์ ๋๋ค. ๋ํ, ํ ๊ธ ํํ์ ์ฌ์ด๋ ์ ๋ณด๋ ์ฃผ ์ฝํ ์ธ ๋ฅผ ๊ฐ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์๊ฐ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ์ฌ์ด๋ ์์ญ์ ์ฃผ ์ฝํ ์ธ ํ๋จ์ ๊ณ ์ ๋ฐฐ์นํ๊ณ , ๋ชจ๋ฐ์ผ ์ ์ ์ ์ฌ์ด๋ ์์ญ์ ํญ์ ๋ ธ์ถ๋๊ฒ ์ค์ ํ๋ฉด ๊ด๊ณ ๋ ธ์ถ ํจ๊ณผ๋ ๋์ผ ์ ์์ต๋๋ค.
์ ํ์ ์ฌํญ๊ณผ ์ฃผ ์ฝํ ์ธ ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ํ๋จ ๊ณ ์ ๋ฐฐ์น๋ฅผ ํตํ ๋ ธ์ถ ๊ทน๋ํ

์ฌ์ด๋ ์์ญ์ ๋์ ์ฌ์ด๋(๋ฐ์คํฌํ)์ ๊ณ ์ ์ฌ์ด๋(๋ชจ๋ฐ์ผ)๋ก ๊ตฌ์ฑํ๋ ์๋ ์ฝ๋๋ฅผ ํตํด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ํด๋น ์ฝ๋๋ ํฐ์คํ ๋ฆฌ ์คํจ์ ๋ฐ๋ผ HTML ์์์ id๋ class ์ ํ์๋ง ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์คํจ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
3. CLS ๋ฐฉ์ง๋ฅผ ์ํ ์ฌ์ด๋ ์์ญ ๋์ ๊ณ ์ ์ฝ๋
๋ฐ์คํฌํ ๋์ ์คํฌ๋กค ๋ฐ ๋ชจ๋ฐ์ผ ํ๋จ ๊ณ ์ ์คํฌ๋ฆฝํธ
์๋ ์ฝ๋๋ ๋ฐ์คํฌํ์์ ์ฌ์ด๋ ์ ๋ณด๊ฐ ์ฌ์ฉ์์ ๋ทฐ ์์ญ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์์น๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ์ฃผ ์ฝํ
์ธ ํ๋จ์ ์ฌ์ด๋ ์์ญ์ position: static์ผ๋ก ๊ณ ์ ์์ผ ์คํฌ๋กค์ ๋ฐ๋ผ๊ฐ์ง ์๋๋ก ์ค์ ํฉ๋๋ค. ์ด๋ Blub Club ์คํจ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ผ๋ฉฐ, #aside์ #container ์ ํ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
โ HTML์ ์ ์ฉ๋ ์คํฌ๋ฆฝํธ ์ฝ๋ (/body ์๋จ์ ์ ์ฉ)
script async
document.addEventListener('DOMContentLoaded', function() {
const aside = document.getElementById('aside');
const container = document.getElementById('container');
function updateAsidePosition() {
const isDesktop = window.matchMedia('(min-width: 769px)').matches;
const isMobile = window.matchMedia('(max-width: 768px)').matches;
if (isMobile) {
aside.style.width = '100%';
aside.style.position = 'static';
aside.style.top = 'initial';
aside.style.right = 'auto';
// ๋ชจ๋ฐ์ผ์์๋ ํ ๊ธ ๋ฉ๋ด๋ฅผ ์จ๊น (CSS์์ ์ฒ๋ฆฌ)
} else if (isDesktop) {
// ๋ฐ์คํฌํ Sticky ๋์ ๊ตฌํ (์คํฌ๋กค ์์น์ ๋ฐ๋ฅธ position ๋ณ๊ฒฝ)
const asideRect = aside.getBoundingClientRect();
const asideHeight = asideRect.height;
const windowHeight = window.innerHeight;
const scrollTop = window.scrollY;
const containerRect = container.getBoundingClientRect();
const containerBottom = containerRect.bottom + scrollTop;
// ์ด ๋ถ๋ถ์ ์คํฌ๋ฆฝํธ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ณธ์ ๋ถ์ํ์ฌ ์์ ๋ ํํ์
๋๋ค.
// ์ค์ Sticky ๊ธฐ๋ฅ์ ์ํด CSS์ position: sticky๋ฅผ ์ฐ์ ํ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ฉฐ,
// ๋ณต์กํ ๊ณ์ฐ์ ๋์ ์๋ CSS ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด CLS ๋ฐฉ์ง์ ๋ ์์ ์ ์
๋๋ค.
const asideBottom = asideRect.bottom + scrollTop;
// ๋ง์ฝ ์ฌ์ด๋๋ฐ์ ํ๋จ์ด ๋ทฐํฌํธ ํ๋จ + ์คํฌ๋กค ์์น๋ณด๋ค ํฌ๋ค๋ฉด (์ผ๋ฐ์ ์ธ Sticky ๋์)
if (asideBottom windowHeight + scrollTop) {
aside.style.position = 'absolute';
aside.style.top = `${Math.max(windowHeight - asideHeight, 0)}px`;
} else {
aside.style.position = 'sticky';
aside.style.top = '0';
}
}
}
window.addEventListener('scroll', updateAsidePosition);
window.addEventListener('resize', updateAsidePosition);
updateAsidePosition();
});
/script
CSS๋ฅผ ์ด์ฉํ Sticky ๋ฐ ๋ชจ๋ฐ์ผ ๋ฉ๋ด ์จ๊น
๋ชจ๋ฐ์ผ์์ ๋ถํ์ํ ์ฌ์ด๋ ๋ฉ๋ด ํ ๊ธ ๋ฒํผ์ ์จ๊ธฐ๊ณ , ๋ฐ์คํฌํ์์ position: sticky๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ ๋์ ๋
ธ์ถ์ ํ๋ณดํ๋ CSS ์ฝ๋์
๋๋ค. CSS ํธ์ง์ ๋งจ ํ๋จ์ ์ถ๊ฐํด ์ฃผ์ธ์.
โ CSS์ ์ ์ฉ๋ CSS ์ฝ๋
#aside {
position: sticky !important;
top: 0; /* ์คํฌ๋กค ์ ์๋จ์ ๊ณ ์ */
}
@media screen and (max-width: 768px) {
/* ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ์ฌ์ด๋๋ฐ๋ฅผ ์ฃผ ์ฝํ
์ธ ์๋๋ก ๋ฐ์ด๋ด๊ณ ๊ณ ์ ํด์ */
#aside {
position: static !important;
width: 100%; /* ๋๋น๋ฅผ 100%๋ก ์ค์ ํ์ฌ ๊ฐ์์ฑ ํ๋ณด */
}
#header .util .menu {
display: none; /* ๋ชจ๋ฐ์ผ ์ฌ์ด๋๋ฐ ํ ๊ธ ๋ฉ๋ด ๋ฒํผ ์จ๊น */
}
}
์ด ๋ฐฉ๋ฒ์ ํตํด ํญ์ ์ฌ์ด๋ ์์ญ์ด ์ฌ์ฉ์์๊ฒ ๋
ธ์ถ๋ ์ ์์ผ๋ฉฐ, ๊ด๊ณ ์ ๋
ธ์ถ ํจ์จ์ฑ๋ ์ฆ๋๋ฉ๋๋ค. ๋ํ, position: sticky๋ ๋ทฐํฌํธ ๋ด์์ ์์๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ ๋ฏธ๋ฆฌ ํ๋ณดํ๋ฏ๋ก CLS(๋ ์ด์์ ๋ณํ)๋ฅผ ์ ๋ฐํ์ง ์์ ์์ ์ ์
๋๋ค.
4. ๋๊ธ ์จ๊ธฐ๊ธฐ ๋ฐ '๋๊ธ ๋ณด๊ธฐ' ๋ฒํผ์ ํตํ ์ฌ์ฉ์ ๊ฒฝํ(UX) ๊ฐ์
์ฌ์ด๋๋ฐ๋ฅผ ๋ชจ๋ฐ์ผ ์ฃผ ์ฝํ ์ธ ํ๋จ์ ๋ฐฐ์นํ ๊ฒฝ์ฐ, ๋๊ธ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์ฌ์ด๋ ์ ๋ณด(๊ด๊ณ )์ ๋๋ฌํ๊ธฐ ์ํด ๊ธธ๊ณ ๋ณต์กํ ๋๊ธ ์น์ ์ ์คํฌ๋กคํด์ผ ํ๋ฏ๋ก ๋ถํธํจ์ด ๋ฐ์ํ๋ฉฐ, ์ด๋ ์ฌ์ด๋ ์ ๋ณด๋์ ๋๋ฌํ ํ๋ฅ ์ ๋ฎ์ถฅ๋๋ค.
๋ฐ๋ผ์ ์ฌ์ด๋๋ฐ๋ฅผ ์ ํ์ ํ๊ฒฝ์ผ๋ก ๋ง๋ค์ง ์๊ณ , ๋๊ธ ์์ญ์ ์ ํ์ ํ๊ฒฝ์ผ๋ก ์กฐ์ฑํ๋ ๊ฒ์ด ๋ธ๋ก๊ทธ ์์ต๊ณผ UX ๋ชจ๋์๊ฒ ์ ๋ฆฌํฉ๋๋ค.
๋๊ธ ๋ณด๊ธฐ ๋ฒํผ ์ถ๊ฐ ๋ฐ ์ฝ๋ ์ค๋ช
์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ ์ ๋๊ธ์ ์จ๊ธฐ๊ณ , ๋ฒํผ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉ์๊ฐ ์ ํํ ๊ฒฝ์ฐ ๋๊ธ ๋ด์ฉ์ ๋ณผ ์ ์๋๋ก ์์ ํฉ๋๋ค. ์๋ ์ฝ๋๋ฅผ HTML์ ๋งจ ํ๋จ /body ์๋จ์ ์ ์ฉํ๋ฉด ์๋์ผ๋ก ๋๊ธ ๋ณด๊ธฐ ๋ฒํผ์ด ์์ฑ๋ฉ๋๋ค.
โ HTML์ ์ ์ฉ๋ ์คํฌ๋ฆฝํธ ์ฝ๋
script async
document.addEventListener('DOMContentLoaded', function() {
// DOM ๋ก๋ ํ 1์ด ์ง์ฐ ์คํ (ํ์ด์ง ๋ก๋ ์์ ์ฑ ํ๋ณด)
setTimeout(function() {
const buttonContainer = document.createElement('div');
buttonContainer.className = 'button-container';
const button = document.createElement('button');
button.id = 'show-comments';
button.className = 'styled-button';
button.textContent = '๋๊ธ ๋ณด๊ธฐ';
buttonContainer.appendChild(button);
const namecardBox = document.querySelector('.tt_box_namecard');
const comments = document.querySelector('.tt-comment-cont'); // ๋๊ธ ์ปจํ
์ด๋
// ๋๊ธ ์์ญ์ด ์กด์ฌํ๊ณ , ๋๊ธ ์์ ฏ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ง ๋ฒํผ ์ฝ์
if (namecardBox && comments) {
namecardBox.parentNode.insertBefore(buttonContainer, namecardBox.nextSibling);
// ์ด๊ธฐ ๋๊ธ ์จ๊ธฐ๊ธฐ๋ CSS์์ ์ฒ๋ฆฌ
// ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋
button.addEventListener('click', function() {
if (comments) {
// ๋๊ธ ํ์/์จ๊ธฐ๊ธฐ ํ ๊ธ ๊ธฐ๋ฅ
comments.style.display = comments.style.display === 'block' ? 'none' : 'block';
this.textContent = comments.style.display === 'block' ? '๋๊ธ ์จ๊ธฐ๊ธฐ' : '๋๊ธ ๋ณด๊ธฐ';
}
});
}
}, 1000);
});
/script
โ CSS์ ์ ์ฉ๋ CSS ์ฝ๋ (๋๊ธ ์จ๊ธฐ๊ธฐ ๋ฐ ๋ฒํผ ์คํ์ผ๋ง)
์ด ์ฝ๋๋ ์ด๊ธฐ ๋๊ธ ์์ญ(.tt-comment-cont)์ ์จ๊ธฐ๊ณ , ๋ฒํผ์ ์ฌ์ฉ์ ์ทจํฅ์ ๋ง๊ฒ ๊พธ๋ฐ ์ ์๋๋ก ์ ๊ณต๋ฉ๋๋ค. CSS ํธ์ง๋์ ๋งจ ํ๋จ์ ์ถ๊ฐํด ์ฃผ์๋ฉด ๋ฉ๋๋ค.
/* ์ด๊ธฐ ๋๊ธ ์์ญ ์จ๊น */
.tt-comment-cont{
display: none;
}
/* ๋ฒํผ ์ปจํ
์ด๋ ๋ฐ ์คํ์ผ */
.button-container {
display: flex;
justify-content: center;
margin-top: 20px;
}
.styled-button {
position: relative;
border: 1px solid #adb5bd;
color: #292d31;
font-weight: 500;
font-size: 16px;
padding: 10px 40px 10px 45px;
background-color: #f8f9fa;
cursor: pointer;
border-radius: 5px;
transition: all 0.3s ease;
}
.styled-button:hover {
background-color: #e9ecef;
color: #212529;
border-color: #6c757d;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
์ฌ์ด๋๋ฐ์ ๊ด๊ณ ๋ฅผ ๋ฃ์ผ๋ฉด CLS(๋ ์ด์์ ๋ณ๋) ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๋์?
์ฌ์ด๋๋ฐ์ ๊ด๊ณ ๋ฅผ ๋ฃ์ ๋ ํด๋น ๊ด๊ณ ์์ญ์ ํฌ๊ธฐ๋ฅผ CSS๋ฅผ ํตํด ๋ฏธ๋ฆฌ ๊ณ ์ (์: height: 250px;)ํ๊ฑฐ๋, position: sticky๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ์ ํ๋ณดํ๋ฉด CLS ๋ฐ์์ ์ต์ํํ ์ ์์ต๋๋ค. ์ ์ฝ๋์ฒ๋ผ position: sticky๋ฅผ ์ฌ์ฉํ๋ฉด ์์๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ด ์ ์ง๋๋ฏ๋ก ์์ ์ ์
๋๋ค. ํนํ CLS(๋ ์ด์์ ๋ณํ)๋ฅผ ์ ๋ฐํ์ง ์์ ์์ ์ ์ธ ์ฑ๋ฅ์ ์ ์งํ ์ ์์ต๋๋ค.
๋ชจ๋ฐ์ผ์์ ์ฌ์ด๋๋ฐ๋ฅผ ์จ๊ธฐ๋ ๋์ ํ๋จ์ผ๋ก ๋ด๋ฆฌ๋ ๊ฒ์ด ์์ต์ ๋ ์ ๋ฆฌํ๊ฐ์?
๋ค, ํจ์ฌ ์ ๋ฆฌํฉ๋๋ค. ๋ชจ๋ฐ์ผ์์ ์ฌ์ด๋๋ฐ๊ฐ ์จ๊ฒจ์ง๋ฉด ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ด์ด์ผ ํ๋ฏ๋ก ๊ด๊ณ ๋ ธ์ถ ๊ธฐํ๊ฐ ๊ฑฐ์ ์ฌ๋ผ์ง๋๋ค. ์ฌ์ด๋๋ฐ๋ฅผ ์ฃผ ์ฝํ ์ธ ํ๋จ์ ํญ์ ๋ฐฐ์นํ๋ฉด, ์ฌ์ฉ์๊ฐ ๊ธ์ ๋๊น์ง ์ฝ์์ ๋ ์์ฐ์ค๋ฝ๊ฒ ๊ด๊ณ ์ ๋ ธ์ถ๋์ด ์์ต ์ฐฝ์ถ ๊ธฐํ๊ฐ ์ ์ง๋ฉ๋๋ค. ์ด๋ ๋ชจ๋ฐ์ผ ์ต์ ํ์ ํต์ฌ ์ ๋ต ์ค ํ๋์ ๋๋ค.
๋๊ธ ๋ณด๊ธฐ ๋ฒํผ์ ์ถ๊ฐํ๋ฉด ๋๊ธ ์์ฑ๋ฅ ์ด ์ค์ด๋ค์ง ์๋์?
๋๊ธ์ ์จ๊ธฐ๋ฉด ์์ฑ๋ฅ ์ด ์ฝ๊ฐ ์ค์ด๋ค ์ ์์ง๋ง, ์ด๋ ํธ๋ ์ด๋ ์คํ(Trade-off)์ ๋๋ค. ๋๊ธ ์์ญ์ ์จ๊น์ผ๋ก์จ ์ฌ์ฉ์์ ์ฃผ ์ฝํ ์ธ ์๋น ๋ฐ ์ฌ์ด๋๋ฐ ๊ด๊ณ ๋ ธ์ถ๋ฅ ์ ๋์ด๋ ํจ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ๋ํ, ์ฌ์ฉ์๊ฐ ๋๊ธ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ์ฌ ๋ช ์์ ์ผ๋ก ๊ด์ฌ์ ํํํ์ ๋๋ง ๋ก๋๋๋ฏ๋ก, ํ์ด์ง ๋ก๋ฉ ์ฑ๋ฅ ๊ฐ์ ์๋ ๊ฐ์ ์ ์ผ๋ก ๊ธฐ์ฌํฉ๋๋ค.
์ด ์ฝ๋๋ฅผ ๋ค๋ฅธ ๋ธ๋ก๊ทธ ํ๋ซํผ(์: ์๋ํ๋ ์ค)์์๋ ์ฌ์ฉํ ์ ์๋์?
์ ๊ณต๋ JavaScript ์ฝ๋๋ HTML ์์์ ID(์: #aside, #container)์ ์์กดํฉ๋๋ค. ์๋ํ๋ ์ค๋ ๋ค๋ฅธ ํ๋ซํผ์์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ํ๋ซํผ์ ํ
๋ง ๊ตฌ์กฐ๋ฅผ ํ์ธํ์ฌ ์ฌ์ด๋๋ฐ์ ์ฃผ ์ฝํ
์ธ ์์ญ์ ์ ํํ ID๋ ํด๋์ค ์ ํ์(Selector)๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. CSS ์ฝ๋ ์ญ์ ์ ํ์๋ง ๋ณ๊ฒฝํ๋ฉด ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.