728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ์ค๋์ ์คํฌ๋กค ๊ธฐ๋ฅ์ ์ด๋ค ์์ผ๋ก ํ์ฉํ๋์ง์ ๋ํด ๊ณต๋ถํ๋ค.
- ํ์คํ ๊ทธ๋ฅ ๋ฌธ๋ฒ๋ง ๋ฐฐ์ฐ๋ ๊ฒ๋ณด๋ค ์ง์ ๊ตฌ๊ธ๋งํ๋ฉฐ ์ด๊ฒ์ ๊ฒ ๊ธฐ๋ฅ์ ๋ฃ์ด ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒ ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค.
- ์์ ์์๋ ๊ฐ๋จํ "์ด๋ฐ ๊ฒ๋ ํด๋ณด์ธ์~" ๋ผ๋ฉฐ ์์ ๋ฅผ ๋ด์ฃผ์์ง๋ง.. ๋๋ ์ฌ๋์ ๋ ๋ํ ์ผ์ ์ง์ฐฉํ๋ค.
- ์๋ฅผ ๋ค๋ฉด, ๋ฉ์ธ ํ๋ฉด์ด ์๋์ชฝ์ผ๋ก ์ด๋์ ๋ ์คํฌ๋กค๋๋ฉด ๋ก๊ณ ๊ฐ ์ปค์ง๊ณ , ๋ค์ ์คํฌ๋กค์ ์ฌ๋ฆฌ๋ฉด ๋ก๊ณ ๊ฐ ์๋๋๋ก ๋์์ค๋ ๊ธฐ๋ฅ์ ๋ง๋ค์๋ค.
- ๊ทผ๋ฐ ๊ทธ๋ ๊ฒ ๋๋ฉด ๊ธฐ์กด์ css ์ค ์๋ธ๋ฉ๋ด๋ฆฌ์คํธ, ์ด๋ฒคํธ ๋ฐฐ๋, ๋ฉ์ธํ๋ฉด ์๋จ ์ฌ์ง ์ด๋ฐ ๊ฒ๋ค์ ์์น๊ฐ ๋ค ์กฐ๊ธ์ฉ ํ์ด์ง๋๋ผ.. ๊ทธ๋์ ์ด๊ฒ๋ค์ ์์น์ ๊ฒน์ณ์ง๋ ๋ถ๋ถ๋ค ์ค ์ด๋ค ๊ฒ์ ์์ชฝ์ ๋๊ณ ์ด๋ค ๊ฒ์ ์๋์ชฝ์ ๋์ง๋ฅผ ์กฐ์ ํ๊ณ ๊ทธ๊ฒ๋ค์ JavaScript ๋ก ๊ตฌํํ๋๋ผ ์๊ฐ์ด ์ข ์ค๋ ๊ฑธ๋ ธ๋ค.
๐ ๋ฉ์ธ ํ๋ฉด
- ๊ตฌํํ๊ณ ์ ํ ๊ฒ์, ์คํฌ๋กค์ ํ๋ฉด ์๋จ Navbar ๊ฐ ๊ณ ์ ๋๊ณ , ์ด๋ ์ ๋ ์๋์ชฝ์ผ๋ก ์คํฌ๋กค๋๋ฉด ๋ก๊ณ ๊ฐ ์กฐ๊ธ ์ปค์ก๋ค๊ฐ ๋ค์ ์คํฌ๋กค์ ์ฌ๋ฆฌ๋ฉด ๋ก๊ณ ๊ฐ ์๋๋๋ก ๋์์ค๋ ๊ฒ์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ณผ์ ์ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ ์กฐ๊ธ!
- ๊ทธ๋ฆฌ๊ณ ์ด ๊ธฐ๋ฅ์ ๋ฃ์ผ๋ฉด์ ๋ถ์์ ์ผ๋ก ์๋ธ๋ฉ๋ด๋ฆฌ์คํธ, ์ด๋ฒคํธ ๋ฐฐ๋, ๋ฉ์ธํ๋ฉด ์๋จ ์ฌ์ง์ ์์น์ ๊ฒน์ณค์ ๋ ๋ณด์ด๋ ์์ ๋ฑ์ ์์ ํด์ฃผ์๋ค.
๐ค CSS
.navbar {
min-width: 500px;
position: fixed;
width: 100%;
z-index: 5;
}
#logo {
color: rgb(112, 74, 25);
font-weight: bold;
font-size: 25px;
flex-grow: 0.95;
transition: all 0.5s;
}
.list-group {
position: fixed;
width: 100%;
margin-top: 100px;
z-index: 3;
display: none;
transition: margin-top 0.5s;
}
.alert {
margin-top: 100px;
position: fixed;
width: 100%;
z-index: 1;
transition: margin-top 0.5s;
}
- ์๋จ Navbar ์ position: fixed ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ ์ ์ํค๋ฉด์ ์๋ธ๋ฉ๋ด๋ฆฌ์คํธ, ์ด๋ฒคํธ ๋ฐฐ๋, ๋ฉ์ธํ๋ฉด ์๋จ ์ฌ์ง์ ์์น๋ค์ด ํ์ด์ ธ์, ์ด๋ ๊ฒ ํ์ด์ง๋ ์์๋ค์๋ ๋๊ฐ์ด position: fixed ์ width: 100% ๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
- ์ด์ ์ํ๋ ํฌ๊ธฐ๋ก ๋ชจ๋ ์๋จ ๊ณ ์ ์ด ๋์๋๋ฐ ์ด๋ฒ์๋ ์์๋ค์ด ์๋ก ๊ฒน์ณ์ง๋ฉด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ๊ทธ๋์ z-index๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ๋ฐฐ๋๊ฐ ์ ์ผ ๋ค์ ๋ฐฐ์น๋๊ณ , ๊ทธ ์์ ์๋ธ๋ฉ๋ด๋ฆฌ์คํธ, ๊ทธ ์์ Navbar ๊ฐ ์์นํ๋๋ก ํด์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ์์๋ค์ด ๋ณํ๋ ๊ฒ ์ด์ฐ๋ฌ์ง๋๋ก transition ์์ฑ์ ๋ฃ์ด์ฃผ์๋ค. ๋ณดํต์ ํด๋น ํ๊ทธ์ ๋ชจ๋ ์์(all)์ transition ์ ๋ถ์ฌํ๋๋ฐ ๊ทธ๋ ๊ฒ ํ๋ ํ๊ทธ์ ํด๋นํ๋ ๋ถ๋ถ๋ค์ ์์ง์์ด ์ข ์ด์ํด์ margin-top ์์์ ๋ฃ์ด๋ณด์๋ค. (์ข ๋์์ง๊ธด ํ๋๋ฐ margin-top ์ transition ์์ฑ์ด ๋ถ์ฌ ๊ฐ๋ฅํ ๊ฒ ๋ง๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค...)
๐ค JavaScript
$(window).on('scroll', function(){
if (window.scrollY > 100){
$('#logo').css('font-size', '30px');
$('.list-group').css('margin-top', '115px');
$('.alert').css('margin-top', '115px');
} else {
$('#logo').css('font-size', '25px');
$('.list-group').css('margin-top', '100px');
$('.alert').css('margin-top', '100px');
}
})
- ๋ฉ์ธํ๋ฉด์์ Y์ถ(์๋จ๋ถํฐ 0์ผ๋ก ์์) ๊ธฐ์ค์ผ๋ก 100 ์ด์ ์คํฌ๋กค์ด ๋ด๋ ค๊ฐ์ ๋ ๋ก๊ณ ์ ๊ธ์จ ํฌ๊ธฐ๊ฐ ๋ ์ปค์ง๊ฒ ํ๋ค.
- ๋ก๊ณ ๊ธ์จ๊ฐ ์ปค์ง๋ฉด์ Navbar์ ๋์ด๋ ๋ณํ๋ฏ๋ก ์๋ธ๋ฉ๋ด๋ฆฌ์คํธ์ ์ด๋ฒคํธ ๋ฐฐ๋์ ์์น๊ฐ ์กฐ๊ธ์ฉ ์๋๋ก ๋ด๋ ค๊ฐ๊ฒ margin-top ๊ฐ์ ์ข ๋ ํฌ๊ฒ ์ก์์ฃผ์๋ค.
- ๊ทธ๋ฆฌ๊ณ 100 ๋ณด๋ค ์์์ง๋ ๊ฒฝ์ฐ ๋ฐ๋ ๋ถ๋ถ๋ค์ด ์๋๋๋ก ๋์์ฌ ์ ์๋๋ก ํด์ฃผ์๋ค.
๐ ํ์๊ฐ์ ํ๋ฉด
- ์์ ์์๋ ๊ธฐ์กด ๋ฉ์ธํ์ด์ง์ ํ๋จ์ ์ด ํ์๊ฐ์ ๋์ํ๋ ์์ ๋ถ๋ถ์ ๋ง๋์ จ๋๋ฐ, ๋๋ ์์ง ์ด๋ป๊ฒ ํ๋์ง ์ ๋ชจ๋ฅด์ง๋ง ๋ค๋ฅธ ํํ์ด์ง๋ค์ฒ๋ผ ํ์๊ฐ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ํ์ ํํ๋ก ํ์๊ฐ์ ํ ์ ์๊ฒ ๋จ๋ ์ง ํด๋น ํ์ด์ง๋ก ์ด๋ํด์ ํ์๊ฐ์ ์ ํ ์ ์๋ ์ง.. ์ฌํผ ๊ทธ๋ฐ ์์ผ๋ก ์งํํ๊ณ ์ถ์๋ค.
- ๊ทธ๋์ a ํ๊ทธ๋ฅผ ๋ง๋ค์ด์ ํด๋ฆญํ๋ฉด signup.html ๋ก ํ์ด์ง๋ฅผ ๋๊ฒจ์ฃผ์๋ค. signup.html ํ์ผ์ ์ผ๋จ ์์ ์ ๋ค์ด์ผํ๊ธฐ์ ๋๊ฐ ๋ง๋ค์๋ค.
- ์์ ์ ์งํํ ์๋ก JavaScript, CSS ํ์ผ์ ๋ค์ด๊ฐ์ผ ํ๋ ๋ด์ฉ์ด ๋ง์์ก๋๋ฐ, ์ด์ฐจํผ ๋ฉ์ธํ๋ฉด์ด ์๋๋ผ ํ์๊ฐ์ ํ๋ฉด์ด๋ผ ๊ธฐ์กด์ JavaScript, CSS ํ์ผ์์ ํ์๊ฐ์ ์ ํ์ํ ๋ถ๋ถ๋ง ์ข ๋ถ๋ฆฌํ๋ค. (์ ์ด์ ์ปดํฌ๋ํธํํด์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ํธํ์ง ์์๊น ์๊ฐ์ด ๋ ๋ค.)
- ์ผ๋จ ๋ฉ์ธํ๋ฉด๊ณผ ํฐ ์ด์ง๊ฐ์ด ์์์ผ๋ฉด ํด์ Navbar ๋ฅผ ๋ฃ์ด์ฃผ์๋๋ฐ ํ์๊ฐ์ ํ๋ ๋ถ๋ถ์ด๋ผ ๊ธฐ์กด Navbar ์ ๋ก๊ทธ์ธ ๋ฒํผ์ด๋ ๋ฉ๋ด ๋ฒํผ์ ํ์์์ ๊ฒ ๊ฐ์์ ์ด ๋ถ๋ถ๋ง ๋บ๋ค. Dark Mode ์ ํํ๋ ๊ฑด ๊ทธ๋๋ก ๋๊ณ JavaScript ๋ฅผ ์ข ์์ ํ ํ ๊ธฐ๋ฅ์ด ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ค.
- ์ด์ ๊ฐ์ง(...) ํ์๊ฐ์ ๋์์๋ฅผ ๊ฑฐ์ ๋๊น์ง ์ฝ์ผ๋ฉด "๋ด์ฉ์ ๋ชจ๋ ํ์ธํ์ต๋๋ค." ๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋จ๋๋ก ํด์ฃผ์๋ค.
- ์ฌ๊ธฐ์ ๋ ์คํฌ๋กค ์ด๋ฒคํธ๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฐ์ํ๋ ์ผ์ด ์๊ฒผ๋๋ฐ, ๊ตฌ๊ธ๋ง์ ํตํด์ ์ด๋ฒคํธ ๋ฐ์ ํ์๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ์ด๋ฒคํธ๊ฐ ๋ฑ 1๋ฒ๋ง ๋ฐ์ํ๋๋ก ์์ ํด์ฃผ์๋ค.
๐ค CSS
#sign-up-content {
width: 500px;
height: 600px;
font-size: 16px;
margin: 100px auto;
padding: 20px 30px;
border: 4px double gold;
border-radius: 10px;
overflow-y: scroll;
}
.title {
font-weight: bold;
text-align: center;
padding: 20px 0;
}
- ํ์ฌ๋ก์๋ ํ์๊ฐ์ ํ๋ฉด์ ๊พธ๋ฏธ๋ ๊ฒ ๋ชฉ์ ์ด ์๋๊ธฐ์ ์ฌํํ๊ฒ ๊ตฌ์๋ง ๋ง์ถฐ์ฃผ์๋ค.
- ์คํฌ๋กค ๊ธฐ๋ฅ์ ํ์ฉํ๋ ๊ฒ ๋ชฉ์ ์ด๊ณ ๊ฐ๋ก ์คํฌ๋กค์ ํ์๊ฐ ์๋ ์ํฉ์ด๋ผ overflow ์์ฑ์ด ์๋ overflow-y ์์ฑ scroll ๋ก ๋ฃ์ด ๋์น๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ์คํฌ๋กค์ด ์๊ธฐ๋๋ก ๋ง๋ค์ด์ฃผ์๋ค.
๐ค JavaScript
// div ์ ์คํฌ๋กค๋ฐ ๋ด๋ฆฐ ์(scrollTop) + ๋์ ๋ณด์ด๋ div ๋์ด(clientHeight) = div ์ ์ค์ ๋์ด(scrollHeight)
$('#sign-up-content').on('scroll', function(){
let top = document.querySelector('#sign-up-content').scrollTop;
let sHeight = document.querySelector('#sign-up-content').scrollHeight;
let cHeight = document.querySelector('#sign-up-content').clientHeight;
if (top + cHeight > sHeight - 20){
alert('๋ด์ฉ์ ๋ชจ๋ ํ์ธํ์ต๋๋ค.');
$('#sign-up-content').unbind('scroll'); // scroll ์ด๋ฒคํธ ํ๋ฒ๋ง ์คํ ํ ์ญ์
}
})
- ์คํฌ๋กค๋ฐ๋ฅผ ๋ด๋ฆฐ ์์ ์ธก์ ํด์ฃผ๋ ๊ฒ์ด .scrollTop, ๋์ ๋ณด์ด๋ ๋์ด๋ฅผ ์ธก์ ํด์ฃผ๋ ๊ฒ์ด .scrollHeight ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ด ๋์ ํฉํ ์์ ์ค์ ๋์ด๊ฐ ๋๋๋ฐ, ๊ทธ ์ค์ ๋์ด๋ฅผ ์ธก์ ํด์ฃผ๋ ๊ฒ์ด .scrollHeight ์ด๋ค.
- ๊ทธ๋์ ์ค์ ๋์ด์์ 20 ์ ๋ ๋บ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ๋ด๊ฐ ์คํฌ๋กค์ ์ญ ๋ด๋ ค์ ๊ทธ ๊ธฐ์ค๊ฐ์ด ๋์์ ๋ ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๋ ๊ฒ์ด๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ๊น์ง๋ง ํ๋ฉด ์ด๋ฒคํธ๊ฐ ์ฌ๋ฌ ์ฐจ๋ก ๋ฐ์ํ๊ธฐ๋ ํ๋๋ฐ .unbind ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฒคํธ๋ฅผ ์คํํ ํ ์ญ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฑ ํ๋ฒ๋ง ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
728x90
๋ฐ์ํ