๐ ๋ชจ๋ฐ์ผ์์ ๋ทฐํฌํธ ํ๋จ์ ์์๋ฅผ ๊ณ ์ ํ๋ ๋ฐฉ๋ฒ
3872 ๋จ์ด webdevjavascript
์ผ๋ง ์ ๊น์ง๋ง ํด๋ ๋ทฐํฌํธ ํ๋จ์ ๋ฒํผ ์์น๋ฅผ ๊ณ ์ ํ๋ ์์ ์ด ์์์ต๋๋ค. ๋๋ Figma์์ ๋ทฐํฌํธ ํ๋จ์ ๋ถ์ผ ๋งค์ฐ ์๋ฆ๋ค์ด ๋ฒํผ์ ๊ทธ๋ฆฌ๋ ๋ฐ ์๊ฐ์ ๋ณด๋์ต๋๋ค.
์ด ๊ธ์ ์ฐ๋ ์๊ฐ
.beautiful-button {
position: fixed;
bottom: 0;
}
๊ทธ๋ฆฌ๊ณ ... ํจ๊ณผ๊ฐ ์์์ต๋๋ค!
๋๋ ํด๊ฒฐ๋ ์ผ์ ๋ง์กฑํ๊ณ ๋ค๋ฅธ ์ผ์ ํ๋ฌ ๊ฐ๋ค. ํ๋๋ฅผ ์ฝ์ ํ๊ธฐ ์ ๊น์ง๋ ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ์์ต๋๋ค. ํด๋ฆญํ๋ฉด ํค๋ณด๋๊ฐ ๋ณด์ด๊ณ ๋ด ๋ฒํผ์ด ์ฌ๋ผ์ก์ต๋๋ค. ๋๋ ๋๋ฌด ์ฌํ๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ฌธ์ ๋ ์์ ํ ์์ญ์ ์์ง ์์๊น์? ๋๋ ์ด๊ฒ์ ์๋ํ๋ค
.beautiful-button {
position: fixed;
bottom: 0;
bottom: calc(0 + env(safe-area-inset-bottom));
}
์ด๊ฒ๋ ์๋ํ์ง ์์ต๋๋ค.
๋๋ Safari๊ฐ Safari๋ผ๊ณ ์๊ฐํ๊ณ ๋ค์์ผ๋ก ์ฐ๊ตฌ๋ฅผ ์งํํ์ต๋๋ค.
๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅธ ํด๊ฒฐ์ฑ ์ ๋ทฐํฌํธ์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ด์์ต๋๋ค.
const viewportHeight = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์๋ํ์ง ์์ต๋๋ค. ํค๋ณด๋๊ฐ ์๋ ๊ฒ๊ณผ ์๋ ๋ทฐํฌํธ ๋์ด๋ ๋์ผํฉ๋๋ค.
์ธํฐ๋ท ๊ฒ์๊ณผ ๋๋ฃ์ ์ง๋ฌธ์ ๋ฐ์ ํ Visual Viewport API( https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API )์ ๋ํด ์๊ฒ ๋์์ต๋๋ค.
๋ทฐํฌํธ ํฌ๊ธฐ๋ฅผ ๊ฐ์ ธ์ค๋ API๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
The visual viewport is the visual portion of a screen excluding on-screen keyboards, areas outside of a pinch-zoom area, or any other on-screen artifact that doesn't scale with the dimensions of a page. (MDN)
.๊ทธ๋์ ๋ด ์๋ฃจ์ ์ ์ด๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค
window.visualViewport.height
window.visualViewport
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ๋ฅผ ์์ ํ ์ ์์ต๋๋ค.window.visualViewport.addEventListener('resize', resizeHandler);
window.visualViewport.addEventListener('scroll', scrollHandler);
๊ทธ๋ฆฌ๊ณ
e.target
๋ฅผ ์ฌ์ฉํ์ฌ ๋ทฐํฌํธ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.๊ทธ๊ฒ ๋ค์ผ! ๋ด ์๋ฆ๋ค์ด ๋จ์ถ๊ฐ ์ด์ ์์ด์ผ ํ ์์น์ ์์ต๋๋ค.
์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค โค๏ธ
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ๋ชจ๋ฐ์ผ์์ ๋ทฐํฌํธ ํ๋จ์ ์์๋ฅผ ๊ณ ์ ํ๋ ๋ฐฉ๋ฒ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/vladimirschneider/how-stick-element-to-bottom-of-viewport-on-mobile-1pg6ํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค