๐ฅ pc๋ทฐ๋ก ๋ง๋ค์ด์ง ์น์ฌ์ดํธ ๋ชจ๋ฐ์ผ ๋ทฐ ๊ฐ๋ฐ ์ธ์ฃผ ๐ฑ
์ฒ์ ์์ฑํด๋ณด๋ ํ๊ณ ๋ก... ์...
์ด๋ ๊ฒ ์ฐ๋๊ฒ ๋ง๋...
๋ฐ๋จ
์ข
๊ฐ ์ผ์ฃผ์ผ ์ , ์น๊ฐ๋ฐ ๋์๋ฆฌ ๋จํก๋ฐฉ์ ํ ํก์ด ์ฌ๋ผ์๋ค
์ธ์ฃผ๋งก์ ๊ฐ๋ฐํ์๋ ์ฐ๊ตฌ์ค ์ฌ์ดํธ์ ๋ชจ๋ฐ์ผ ์น ํ๋ก ํธ ๊ฐ๋ฐ์ ๊ตฌํ๋ ๋ด์ฉ
๊ธ์ก๋ ์ ์๋์ด์๋ ์ง์ง ์ธ์ฃผ ์๋ค
์ ๊ฐ
์ข
๊ฐ๋ ์ํ์ผ๋ฉด์ ์ด๊ฑธ ํ๊ฒ ๋ค๊ณ ํ๋๊ฑด ๋ฏธ์น์ง์ด ๋ถ๋ช
ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ด ์ค๋ ฅ์ผ๋ก ๋ฌด์จ ์ธ์ฃผ์ธ๊ฐ.. ํ์ง๋ง
- ํต์ฌ์ ์ธ ๊ธฐ๋ฅ๋ค๊ณผ ๋ด์ฉ๋ค์ ์ด๋ฏธ ๊ตฌํ๋ ์ํ์ด๊ณ
- pc ๋ทฐ๊ฐ ์ด๋ฏธ ๋ง๋ค์ด์ง ์ํ์์ ๋ชจ๋ฐ์ผ ๋ทฐ๋ง ์ถ๊ฐ์ ์ผ๋ก ์งํํ๋ ์์
์ด ์กฐ๊ฑด์ด ์ ๋ง ํ์น ์์ ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํ๊ณ (๋ฌด์๋ณด๋ค ์ํ๊ณต๋ถํ๊ธฐ ์ซ์๋ค)
๊ฒฐ๊ตญ ์ผ์ฌ์ฐจ๊ฒ ๋์ ํ๊ฒ ๋๋๋ฐ...
์๊ธฐ
์ญ์ ๋ฏธ์น์ง์ด ๋ง์๋ค...^^
์ง๊ธ๊น์ง๋ ํ๋ก์ ํธ๊ฐ ํฌ๊ฑฐ๋ ์๊ฑฐ๋ ์๊ด ์์ด ์ ๋ถ ์ฒ์๋ถํฐ ๊ฐ๋ฐ์ ์ฐธ์ฌํ์๊ณ , ๋ ๋น์ทํ ์ปค๋ฆฌ๋ก ๊ณต๋ถ๋ฅผ ํ ๋์๋ฆฌ์๋ค๊ณผ ํจ๊ป ํ์๊ธฐ์ ์ฝ๋ ๊ตฌ์ฑ์ด๋ ์งํ์ํฉ๋ค์ ์ ๋ง ๋น์ฐํ๊ฒ ์ ์ ์์๋ค
๊ทผ๋ฐ ์ด๊ฑด,,,, ์ด๋ฏธ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ ์์ ๊ฑฐ์น ํ๋ก์ ํธ ์๊ณ ๊ทธ๋งํผ ์ฝ๋ ์คํ์ผ๋ ์ ๋ง ๋ฏ์ค์๋ค 8ใ 8
์ด์ .. ์ด๋ฐ ๊ธด----- ์ฝ๋๊ฐ ํ์ด์ง๋ณ๋ก ์๋.. ๊ทธ๋ฐ........
ํ์ด์ง์๋ ์๊ฐ๋ณด๋ค ๋ง์๊ณ , ์ฝ๋๋ ์๊ฐ๋ณด๋ค ํจ์ฌ ๊ธธ๊ณ ๋์กํ๋ค ๐
๊ทธ๋ ๊ฒ 2์ฃผ๊ฐ์ ๋ํ๋ก ์ฑ๋ฆฐ์ง๊ฐ ์์๋๋ค
์ ์
๋ณธ ํ๋ก์ ํธ์์ ๊ธฐ์ ์ ์ธ ๋ฉด์์ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ๋๊ฐ์ง์๋ค
๐ฑ ๋ฐ์ํ ๐ฑ
์ ํ๋ธ ํด๋ก ์ฝ๋ฉ ํ๋ก์ ํธ์์ ๋ฐ์ํ์ ๋ค๋ค์๊ธฐ์ ํฌ๊ฒ ์ด๋ ต์ง๋ ์์๋ค
@media (max-width: 430px) {}
์ ์ฒด์ ์ผ๋ก styled-component๋ฅผ ์ด์ฉํด์ ์คํ์ผ์ ์ ์ฉํ ์ํ๋ผ, css ์คํ์ผ์ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ์๋ ๋์๋ฆฌ์์ ๋ฐฐ์ด ๋ฏธ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค
๊ทผ๋ฐ ์ด์ ๋ณธ ํ๋ก์ ํธ๋ ๋ชจ๋ฐ์ผ๋ทฐ๋ฅผ ์์ ๊ณ ๋ คํ์ง ์๊ณ ๊ฐ๋ฐํ ์น์ฌ์ดํธ๋ผ์ ๋ชจ๋ฐ์ผ๋ทฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด return ๋๋ ๋ถ๋ถ์ ์ปดํฌ๋ํธ๋ค์ ๊ฑด๋๋ ค์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋ค
๊ทธ๋ฆฌํ์ฌ
useState ๋ฅผ ์ด์ฉํด ๋ทฐ ํฌ๊ธฐ๋ฅผ ์ํ๋ก์จ ๊ด๋ฆฌ
ํ ์ ์๊ฒ ํ๋๋ฐ,
//๋ชจ๋ฐ์ผ ์ฌ๋ถ ๊ฐ์ง
const [isMobile, setIsMobile] = useState(false)
const resizingHandler = () => {
if (window.innerWidth <= 430) {
setIsMobile(true)
} else {
setIsMobile(false)
}
}
useEffect(() => {
if (window.innerWidth <= 430) {
setIsMobile(true)
}
window.addEventListener('resize', resizingHandler)
return () => {
window.removeEventListener('resize', resizingHandler)
}
}, [])
์ถ์ฒ : https://darrengwon.tistory.com/720
์ด ์ฝ๋๋ง ํฌํจ์ํค๋ฉด isMobile
๋ฅผ ์ด์ฉํด ๋ชจ๋ฐ์ผ ๋ทฐ ์ฌ๋ถ๋ฅผ ์ธ์์ํฌ ์ ์์๋ค. ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด ์์ฉํ๋ค
- ex1. pc๋ทฐ์ผ ๋์ ๋ชจ๋ฐ์ผ ๋ทฐ์ผ๋ ๋ฉ๋ด ํค๋๋ฅผ ์์ ๋ค๋ฅธ๊ฑธ๋ก ํด์ผํ๋ ๊ฒฝ์ฐ
//์์ชฝ์ ๋ชจ๋ฐ์ผ์ฉ ๋ฉ๋ด๋ฐ์ pc์ฉ ๋ฉ๋ด๋ฐ๋ฅผ ๋ฐ๋ก ๊ตฌํ
return (
<div style={{ height: '70px', margin: '0px' }}>
{isMobile ? menuBarMobile : menuBar}
</div>
)
- ex2. style๋ก ํน์ ์ปดํฌ๋ํธ์๋ง ์ค ์คํ์ผ์ ๋ทฐ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ณ๊ฒฝํด์ผํ๋ ๊ฒฝ์ฐ
// <Paragraph /> ๋ ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ฐ์ ธ์จ ์ปดํฌ๋ํธ
<Paragraph
style={
isMobile
? { display: 'flex', flexDirection: 'column' }
: { display: 'flex', flexDirection: 'row' }
}
>
๐ ๋ชจ๋ฐ์ผ ๋๋กญ๋ค์ด ๋ฉ๋ด ๐
์๋๋ ์ด๋ฐ์์ผ๋ก
1. ๊ฐ ํ์ด์ง์ ๊ฐ ์ ์๋ ๋ฒํผ๋ค
2. ํ์ ๋ณํ ๋ฒํผ (state๋ก ๊ด๋ฆฌํด์ ํ์ด์ง ๋ณ๊ฒฝ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์ - ์ด๊ฑฐ ํฌ๊ฒ ๋ฐฐ์ ๋ค)
์ผ๋ก ๊ฐ๋จํ๊ฒ ์ด๋ฃจ์ด์ง pc์ฉ ๋ฉ๋ด๋ฐ๊ฐ ์๋ ํํ์๊ณ
๊ทธ๋ฅ ์ด๋ ๊ฒ ๋ชจ๋ฐ์ผ ๋ฉ๋ด๋ฐ ์ฉ ์ปดํฌ๋ํธ๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ์ผ์ชฝ ํ๋ฒ๊ฑฐ ๋ฒํผ ๋๋ฅด๋ฉด ๋ฉ๋ ์ฌ๋ผ์ด๋๊ฐ ์ค๋ฅต ํ๊ณ ๋์ฌ ์ ์๊ฒ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๋ค
๊ทธ๋ฐ๋ฐ...
๊ทธ์ค ๋๊ฐ์ ํ์ด์ง๋ ๊ฐ ํ์ด์ง ๋ด์ ๋ ์ด๋ฐ์์ผ๋ก ํ์ด์ง๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฒํผ๋ค์ด ์๋ ํ์์ด์๋ค..
์ ๋ฒํผ๋ค์ ๋์ ํ ๋ชจ๋ฐ์ผ ๋ทฐ์ ๋ฃ์ ์๊ฐ ์์๊ธฐ์ ๋ชจ๋ฐ์ผ ๋ฉ๋ด๋ฐ ํํ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ธ๋ก๋ก ๊ธธ๊ฒ ๋์ค๋ ํํ๋ก ํฌ๊ฒ ๋ฐ๊ฟจ๋ค.
๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น ํ์ด์ง์์ ๋ค์ด๊ฐ ์ ์๋ ์์ธ ํ์ด์ง๋ค์ด ํ ๊ธํํ๋ก ์ฃผ๋ฅด๋ฅต ๋์ค๊ณ ๊ทธ ์์์ ๋ ์ ํํ ์ ์๋ ํํ๋ก, ๋์์ธ์ ๊ทธ๋ฅ ์ด๋์ ๋ง์ด ๋ดค๋ ๊ธฐ์ต์ ์ฐธ๊ณ ํ๋ค
<SlideItem onClick={() => history.push(`/main/${change}`)}>
{change == 'kor' ? 'ํ' : 'Home'}
</SlideItem>
<SlideItem
onClick={() => {
setIsOpenProgram(false)
setIsOpenLab(isOpenLab => !isOpenLab)
}}
>
{change == 'kor' ? '์๊ฐ' : 'About'}
</SlideItem>
<ul className={isOpenLab ? 'show-program' : 'hide-program'}>
<DetailSlideItem
onClick={() => history.push(`/lab/${change}`)
setIsOpen(false)}}
>
{change == 'kor' ? '์ฐ๊ตฌ์ ์๊ฐ' : 'Lab'}
</DetailSlideItem>
//ํ๋ต
๊ทผ๋ฐ ์ ๋ง ํฐ ๋ฌธ์ ๊ฐ ์์๋ค.
๊ธฐ์กด pc ๋ทฐ์์ ํ, ์๊ฐ, ํ๋ก๊ทธ๋จ ์๊ฐ, ์ฐ๊ตฌ์ ์์ ํ์ด์ง๋ก ๋ค์ด๊ฐ๋๋ react-router ๋ฅผ ์ด์ฉํด์ ์ด๋ํ๋ ํํ๊ณ , ๊ทธ ๋ด๋ถ์ ์์ธ ํ์ด์ง๋ค์ ์๋์ชฝ ์ปจํ
์ธ ๋ฅผ ์ํ๋ก ๊ด๋ฆฌํด์ ๋ฒํผ์ ํตํด ์ปจํ
์ธ ๊ฐ ๋ณ๊ฒฝ๋ ์ ์๋๋ก ํ๋ ํํ..
์ฆ, '์ฐ๊ตฌ์ ์๊ฐ' ํ์ด์ง์ ์ด๋ํ๋ ค๋ฉด '์๊ฐ' ํ์ด์ง ์ฃผ์์ธ /lab/kor
๋ก ์ด๋ํ๊ณ ์๋ ์ปจํ
์ธ ๋ฅผ ๊ด๋ฆฌํ๋ Detail ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์ ๋ฌํด์ ๋ทฐ๋ฅผ ๋์์ผ ํ๋๊ฒ 8ใ
8
๊ฒฐ๊ตญ, pc๋ทฐ์์๋ ์๊ด์ด ์์์ง๋ง ๋ชจ๋ฐ์ผ ๋ทฐ์์ ๋ด๊ฐ ๋ง๋ ๋ฉ๋ด๋ฐ๋ฅผ ํตํ๋ ค๋ฉด
react-router ๋ก ํ์ด์ง ์ด๋ํ๋ฉฐ ์ปดํฌ๋ํธ ์ํ๊น์ง ๋์์ ๊ด๋ฆฌ
ํด์ค์ผ ํ๋ ๊ฒ์ด์๋ค
๋คํํ ์ธ์์๋ ๋์ ๊ฐ์ ๊ณ ๋ฏผ์ ํ๋ ์ฌ๋๋ค์ด ์์ง ๋ง์ด ์์๋ค
https://velog.io/@dhlee91/this.props.history.push%EB%A1%9C-props-%EB%84%98%EA%B2%A8%EC%A3%BC%EA%B8%B0
<SlideItem onClick={() => history.push(`/main/${change}`)}>
{change == 'kor' ? 'ํ' : 'Home'}
</SlideItem>
์ด๋ ๊ฒ ์ฌ์ฉํ๋ history.push()
๋ฅผ
<DetailSlideItem
onClick={() => {
history.push({
pathname: `/lab/${change}`,
state: { detail: 1 },
})
setIsOpen(false)
}}
>
{change == 'kor' ? '์ฐ๊ตฌ์ ์๊ฐ' : 'Lab'}
</DetailSlideItem>
์ด๋ฐ์์ผ๋ก state:
๋ฅผ ์จ์ detail ์ด๋ผ๋ ๋ณ์๋ฅผ ์ ๋ฌ ํ ์ ์๋ค
๋ฐ๋ ํ์ด์ง์์๋
import { useHistory, useLocation } from 'react-router-dom'
//์ค๋ต
const location = useLocation(1)
console.log(location.state)
//์ค๋ต
<DetailPage
num={
isMobile
? location.state === undefined
? 1 : location.state.detail
: numState
}
lang={lang}
/>
์ด๋ ๊ฒ
location.state.detail
๋ก ์ ๋ฌ๋ฐ์ ์์ ์ ๊ทผ ํ ์ ์์๋ค
๊ฒฐ๋ง
์ฐ์ ํฌ๊ฒ ๊ธฐ์ต๋๋ ๊ณ ์?์ ์ด ๋๊ฐ์ง์๋ ๊ฒ ๊ฐ๋ค
์คํ๋ ค ๊ทธ ์ธ์๋ ๊ทธ๋ฅ ๋ฐฐ์ ๋๊ฑฐ ์ด์ฉํด์ ์คํ์ผ ๋ฐ๊พธ๊ณ ๋ชจ๋ฐ์ผ์ฉ ์ปดํฌ๋ํธ ๋ฐ๋ก ๋ง๋ค์ด์ ๋ณด์ฌ์ง๊ฒ ๋ง๋ค๊ณ .. ์ด๋ฐ ์์ ๋ค์ ๋ฐ๋ณต์ด๋ผ ์์ํ๊ฒ ํ ์ ์์๋ค.
๊ทธ ์ธ์ ์์ํ๊ฒ ๋ฐฐ์ด ๊ฒ๋ค
-
css Background ์์ฑ
https://ofcourse.kr/css-course/background-%EC%86%8D%EC%84%B1 -
html/css ์๋ ์ค๋ฐ๊ฟ
https://mouselish.com/165
ํ๊ณ ๋ฅผ ์ด๋ ๊ฒ ์ฐ๋๊ฒ ๋ง๋... ์ถ์ง๋ง ๋ญ ๋ด๊ฐ ๋ด ๋ณต์ต์ ์ํด ์์ฑํ๋๊ฑฐ๋๊น ํ์์ ์๊ด.. ์๊ฒ ์ง..??
๊ณ์ ๊ณต๋ถํ ๋ด์ฉ๋ง ์งค๋ง์งค๋งํ๊ฒ ๊ธฐ๋กํ๋ค๊ฐ ์ด๋ ๊ฒ ๋ด ์ด์ผ๊ธฐ๊ฐ ๋ง์ด ๋ค์ด๊ฐ ๊ธด ๊ธ์ ์์ฑํ๋ ์กฐ๊ธ ์ด์ํ๊ธด ํ๋ค... ์ด ๊ธ๋ง ๋ฐ๋ก ๋นผ๋๊ณ ์ถ์... ๋ธ๋ก๊ทธ๋ฅผ ํ๋ ๋ ๋ง๋ค์ด? (๋๋ ๊ธ ์์ฐ๊ณ ์ถ๋ค ใ
ใ
)
์๋ฌดํผ ์ ๋ง ๋ฌด๋ชจํ๊ฒ ๋์ ํ ํ๋ก์ ํธ์์ง๋ง ๊ทธ๋งํผ ๋ฐฐ์ด๊ฒ๋ ์ ๋ง ๋ง์๋ค.
๋ฐ๋ก ์ ๋ต์ด ์๋ ํ๋ก์ ํธ์์ ๋๊ตฐ๊ฐ์๊ฒ ๋ฌผ์ด๋ณด์ง ์๊ณ ๋ด๊ฐ ํผ์ ์ฐพ์๋ณด๋ฉด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ณผ์ ์ด ์๊ฐ๋ณด๋ค ์ฌ๋ฏธ์์๊ณ ๊ทธ๋งํผ ๋ฟ๋ฏํจ๋ ์ปธ๋ ๊ฒ ๊ฐ๋ค
๊ธฐํ๊ฐ ๋๋ค๋ฉด ์ด ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง ๊ฑฐํ๊ฒ ํ๋ฒ ํด๋ณด๊ณ ์ถ๋ค. ์ฝ๋ ์ ๋ฆฌ๋ ํ๊ณ ,,, (์ด์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ก ๋ค์ด๊ฐ์ผํด์ ๋น์ฅ์ ๋ชปํ๊ฒ ์ง๋ง๐ฅบ)
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฅ pc๋ทฐ๋ก ๋ง๋ค์ด์ง ์น์ฌ์ดํธ ๋ชจ๋ฐ์ผ ๋ทฐ ๊ฐ๋ฐ ์ธ์ฃผ ๐ฑ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@seondal/ํ๊ณ -pc๋ทฐ๋ก-๋ง๋ค์ด์ง-์น์ฌ์ดํธ์-๋ชจ๋ฐ์ผ-๋ทฐ-๊ฐ๋ฐํ๊ธฐ-์ธ์ฃผ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค