๋ชจ๋ฐ์ผ ํฐ์น ํ ํธ๋ฒ ํจ๊ณผ๊ฐ ์ฌ๋ผ์ง์ง ์์ ๋
ํ๋ก ํธ์๋ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ํ ๋ฒ์ฏค์ ๊ฒช๋ ๋ฌธ์ ๋ค. ๋ฐ์คํฌํฑ์์๋ ๋ฉ์ฉกํ๊ฒ ์๋ํ๋ ๋ฒํผ์ด ๋ชจ๋ฐ์ผ์์๋ ํฐ์น ํ์๋ ํธ๋ฒ ์ํ๊ฐ ๊ณ์ ์ ์ง๋๋ ํ์ ๋ง์ด๋ค.
์ฒ์์๋ "๋ญ์ง? ์ ๋ฒํผ์ ๋๋ฌ๋ ์๊น์ด ์ ๋์์?" ํ๋ฉด์ ๋นํฉํ๋๋ฐ, ์๊ณ ๋ณด๋ ๋ชจ๋ฐ์ผ๊ณผ ๋ฐ์คํฌํฑ์ ์ํธ์์ฉ ๋ฐฉ์์ด ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด์๋ค.
๋ฌธ์ ์ ํต์ฌ
๋ชจ๋ฐ์ผ์์๋ "๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฐ๋ค"๋ ๊ฐ๋ ์์ฒด๊ฐ ์๋ค. ํฐ์น์คํฌ๋ฆฐ์์๋ ํฐ์นํ๋ ์๊ฐ hover ์ํ๊ฐ ํ์ฑํ๋๊ณ , ๋ค๋ฅธ ๊ณณ์ ํฐ์นํ๊ธฐ ์ ๊น์ง ๊ทธ ์ํ๊ฐ ์ ์ง๋๋ค. ๊ทธ๋์ ๋ฒํผ์ ํฐ์นํ ํ ๋ค๋ฅธ ์์ญ์ ํฐ์นํ์ง ์์ผ๋ฉด ํธ๋ฒ ํจ๊ณผ๊ฐ ๊ณ์ ๋จ์์๊ฒ ๋๋ค.
์ต์ CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ก ํด๊ฒฐํ๊ธฐ
์์ ์๋ @media (max-width: 768px) ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋๋ฐ์ด์ค๋ฅผ ๊ตฌ๋ถํ์ง๋ง, ์์ฆ์ ๋ ์ ํํ ๋ฐฉ๋ฒ์ด ์๋ค. hover์ pointer ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ฅผ ์กฐํฉํ๋ฉด ๋๋ฐ์ด์ค์ ์ ๋ ฅ ๋ฐฉ์์ ์ ํํ ๊ตฌ๋ถํ ์ ์๋ค.
/* ํฐ์น์คํฌ๋ฆฐ ๋๋ฐ์ด์ค - ์ค๋งํธํฐ, ํ๋ธ๋ฆฟ */
@media (hover: none) and (pointer: coarse) {
.btn-fade:active {
background: #ff7d4d;
transition: 200ms ease-in;
}
}
/* ์ ๋ฐํ ํฌ์ธํ
๋๋ฐ์ด์ค - ๋ง์ฐ์ค, ํธ๋ํจ๋ */
@media (hover: hover) and (pointer: fine) {
.btn-fade:hover {
background: #ff7d4d;
transition: 300ms ease-in;
}
}
ํฐ์น์คํฌ๋ฆฐ์์๋ :hover ๋์ :active๋ฅผ ์ฌ์ฉํ๊ณ , ํฐ์น ํน์ฑ์ ๋น ๋ฅธ ๋ฐ์์ด ์ค์ํ๋ ์ ๋๋ฉ์ด์ ์๊ฐ๋ ์กฐ๊ธ ๋ ์งง๊ฒ ์ค์ ํ๋ค.
JavaScript๋ก ํฐ์น ์ด๋ฒคํธ ์ฒ๋ฆฌํ๊ธฐ
CSS๋ง์ผ๋ก ํด๊ฒฐ๋์ง ์๋ ๋ณต์กํ ์ผ์ด์ค๋ผ๋ฉด JavaScript์ ํฐ์น ์ด๋ฒคํธ๋ฅผ ํ์ฉํ ์ ์๋ค. ํนํ ํฐ์น ํ ๊ฐ์ ๋ก ํธ๋ฒ ์ํ๋ฅผ ์ ๊ฑฐํด์ผ ํ ๋ ์ ์ฉํ๋ค.
function setupTouchHandlers() {
const buttons = document.querySelectorAll('.btn-fade');
buttons.forEach(button => {
button.addEventListener('touchend', function() {
// ํฐ์น ์ข
๋ฃ ์ hover ํด๋์ค ์ ๊ฑฐ
this.classList.remove('hover-active');
// ํน์ blur๋ก focus ํด์
this.blur();
});
});
}
2024๋ ํธ๋ ๋: Container Queries ํ์ฉ (UPDATE)
์ต์ ๋ธ๋ผ์ฐ์ ๋ค์ด Container Queries๋ฅผ ์ง์ํ๊ธฐ ์์ํ๋ฉด์, ์ปดํฌ๋ํธ ๋จ์๋ก ๋ ์ธ๋ฐํ ๋ฐ์ํ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ก๋ค. ํนํ ๋์์ธ ์์คํ ์ ๊ตฌ์ถํ ๋ ์ด๋ฐ ๋ฐฉ์์ด ์ ์ ์ค์ํด์ง๊ณ ์๋ค.
@container (hover: hover) {
.button {
&:hover {
transform: scale(1.05);
}
}
}
์ค๋ฌด์์ ๋๋ ์
์ฒ์์๋ "๊ทธ๋ฅ ๋ชจ๋ฐ์ผ์์๋ ํธ๋ฒ ํจ๊ณผ ๋นผ๋ฉด ๋์ง ์๋?" ์๊ฐํ๋๋ฐ, ์ฌ์ฉ์ ๊ฒฝํ ๊ด์ ์์๋ ๊ฐ ํ๋ซํผ์ ๋ง๋ ์ ์ ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ ์ค์ํ๋ค๋ ๊ฑธ ๊นจ๋ฌ์๋ค.
ํฐ์น ๋๋ฐ์ด์ค์์๋ :active ์ํ๋ก ์ฆ๊ฐ์ ์ธ ๋ฐ์์, ๋ง์ฐ์ค ํ๊ฒฝ์์๋ :hover๋ก ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํ๋ ์์ผ๋ก ๋ง์ด๋ค. ๊ฒฐ๊ตญ ์ฌ์ฉ์๊ฐ ์ด๋ค ๋๋ฐ์ด์ค๋ฅผ ์ฐ๋ ์์ฐ์ค๋ฌ์ด ์ํธ์์ฉ์ ๋๋ ์ ์๋๋ก ํ๋ ๊ฒ ๋ชฉํ๋ค.
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ด ๋จ์ํด ๋ณด์ผ ์ ์์ง๋ง, ์ด๋ฐ ์ธ๋ถ์ ์ธ ์ฐจ์ด๋ค์ ํ๋์ฉ ํด๊ฒฐํด ๋๊ฐ๋ค ๋ณด๋ฉด ์๊ฐ๋ณด๋ค ๊น์ด ์๋ ๋ถ์ผ๋ผ๋ ๊ฑธ ๋๋ผ๊ฒ ๋๋ค. ํนํ ๋ค์ํ ๋๋ฐ์ด์ค์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ ๋ชจ๋ ๊ณ ๋ คํด์ผ ํ๋ ์์ฆ์๋ ๋์ฑ ๊ทธ๋ ๋ค.
'๐ Front > โจ CSS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CSS] ๋ง์ง ์์ (Margin collapsing) ํ์ ์ดํดํ๊ธฐ (0) | 2022.04.19 |
---|---|
[CSS: flex box] flex item์ ์ ๋ ฌ๊ณผ ๊ฐ๊ฒฉ / justify-content /align-items/ align-content (0) | 2021.08.10 |
BEM์ CSSํ๊ธฐ๋ฒ (0) | 2021.05.03 |