React Native Styling - ParkEunwoo/seoul-smart-app GitHub Wiki
React Native์์ css๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ StyleSheet๋ฅผ importํด์ผํ๋ค. ์คํ์ผ์ ์ ์ฉํด์ผํ๋ ์ปดํฌ๋ํธ ํ์ผ ์๋จ์ import๋ฅผ ํด์ค๋ค.
import { StyleSheet } from 'react-native';
์ด์ style๋ค์ ํ๊ณณ์ ๋ชจ์ ๊ฐ์ฒด๋ก ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค. css์๋ ๋ค๋ฅธ ์ ์ด ์๋๋ฐ ์ด๋ ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ธ๋ค.
- ์์ฑ์ ์ด๋ฆ์ด css๋
-
๋ก ๊ตฌ๋ถ์ด ๋์ด์๋๋ฐ StyleSheet๋ camelCase๋ก ์ง์ ํ๋ค. - ๊ฐ ์์ฑ๋ณ ๊ตฌ๋ถ์๊ฐ css๋
;
์ผ๋ก StyleSheet๋,
๋ก ๊ตฌ๋ถํด์ค๋ค.
.container {
border-radius: 20px;
}
container: {
borderRadius: 20,
},
- shorthand๊ฐ ์ ์ฉ์ด ์๋๋ค.
.container {
border: 1px solid black;
}
container: {
borderWidth: 1,
borderStyle: 'solid',
borderColor: 'black',
}
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ๋ฒ๋๋ก ๊ธ์๋ string์ผ๋ก ์ซ์๋ numberํํ๋ก ์์ฑํด์ฃผ์ด์ผํ๋ค.
- ํฌ๊ธฐ์ ๋จ์๋ฅผ ์ง์ ํด์ฃผ๋ ค๋ฉด string์ผ๋ก ์ฌ์ฉํด์ผํ๋ค.
css์์ class๋ฅผ ์ง์ ํด์ค ๊ฒ ์ฒ๋ผ style์ ์ง์ ํด์ฃผ์ด์ผํ๋ค. ๋ชจ๋ ์ปดํฌ๋ํธ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ก return
์ผ๋ก html๊ณผ ๋น์ทํ jsx๋ฅผ ๋ฐํํ๋๋ฐ ๊ทธ๊ณณ์์ ์ ์ฉํด์ค๋ค.
export default function App(){
return(
<View style={{
flex:1,
justifyContent: 'center',
alignItems: 'center'
}}>
<Text>์๋
ํ์ธ์</Text>
</View>
)
}
ํด๋น ํ๊ทธ์ style ์์ฑ์ ๋ถ์ฌํ๋ค. ๊ทธ ๊ฐ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด {}
๋ก ๊ฐ์ธ์ค๋ค. ๊ทธ ํ ์ค์ ๊ฐ์ด ๊ฐ์ฒด๊ฐ ๋ค์ด๊ฐ์ผํ๊ธฐ ๋๋ฌธ์ ๋ค์ {}
๋ก ๊ฐ์ธ์ค๋ค.
ํ์ง๋ง ์ ๋ ๊ฒ ์์ฑํ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ๋ณด๊ธฐ ๋ถํธํ ๋จ์ ์ด ์๋ค. ๊ทธ๋์ style์ ํ๊ณณ์ ๋ชจ์ ๊ด๋ฆฌํ๋๋ก ํ๋ค. ํด๋น ํจ์ ์ ์ธ ์๋ถ๋ถ์ ์์ฑํ๋ค.
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
export default App(){
return (
<View style={styles.container}>
<Text>ใ
ใ
ใ
ใ
</Text>
</View>
)
}
์ ์ฉํ๋ ๊ณณ์ ์๋ง๋ ์ด๋ฆ์ ์ง์ด์ฃผ์์ผ๋ฉด ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๊ธฐ๋ฅผ ๋๋์ด์ ์คํ์ผ์ ์ฉ์ ํ ์๋ ์๊ณ ์ฌ๋ฌ๊ฐ์ ์คํ์ผ์ ๋ฐฐ์ด๋ก ๋ฌถ์ด์ ์ ์ฉํ ์ ์๋ค.
- ํฐํธ ์ฌ์ฉ๋ฒ
components/StyledText.js
๋ฅผimport
ํฉ๋๋ค. ์ด ์์๋NanumGothic
,NanumGothicBold
,NanumGothicExtraBold
๊ฐ ๋ค์ด์์ต๋๋ค. ์ด ์ค ์ฌ์ฉํ ํฐํธ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ ํ์Text
์ปดํฌ๋ํธ ์ฌ์ฉํ์ค ๋์ ๋์ผํ๊ฒ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
import { NanumGothic, NanumGothicBold, NanumGothicExtraBold } from '../components/StyledText';
export default function App(){
return (
<View>
<Text>์ผ๋ฐ ๊ธ์จ</Text>
<NanumGothic>๋๋๊ณ ๋ ์ ์ฉ ๊ธ์จ</NanumGothic>
</View>
)}
- ์์ ์ฌ์ฉ๋ฒ
constants/Colors.js
์ ๋ง์ด ์ฌ์ฉ๋๋ ์์๋ค์ด ์ ์ฅ ๋์ด ์์ต๋๋ค.mainColor: '#0287cb'
tintColor: '#bfe1f2'
pauseColor: '#bd1138'
-
ongoingColor: '#7c192f'
import
ํด์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
import Colors from '../../constants/Colors';
const styles = StyleSheet.create({
button: {
backgroundColor: Colors.mainColor,
}
})
- ํฌ๊ธฐ ์ฌ์ฉ๋ฒ
constants/Layout.js
์ ํฐ์ ๊ฐ๋ก๊ธธ์ด์ ์ธ๋ก๊ธธ์ด๊ฐ ์ ์ฅ ๋์ด ์์ต๋๋ค. flex๋ฅผ ์ ์ฉํ ์ ์์ด ๋ถ๋์ดํ๊ฒ width์ height๋ฅผ ์ฌ์ฉํด์ผํ ๊ฒฝ์ฐ ์ค์ ํฐ์ ๊ฐ๋ก๊ธธ์ด์์ ๋น์จ์ ๋ง์ถ์ด ์ ์ฉํด์ฃผ์๊ธธ ๋ฐ๋๋๋ค. font๋ 16px์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ก์๋์์ต๋๋ค. ํฐํธํฌ๊ธฐ๋ ์ซ์๊ฐ ์ง์ ์ ์ฉ๋๋ ๊ฒฝ์ฐ์ ํด๋ํฐ ๋ณ๋ก normalize๋ฅผ ํด์ฃผ์ด์ผํฉ๋๋ค.
import {width, height, font, normalize} from '../../constants/Layout';
const styles = StyleSheet.create({
button: {
width: width/3,
height: height/10
},
text: {
fontSize: normalize(font*2),
}
})
์ด๋ฏธ์ง๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค. assets/images
์ ์๋ ์ด๋ฏธ์ง๋ฅผ requireํด์ ์ฌ์ฉํ๋ค.
import {Image} from 'react-native';
export default function App(){
return(
<Image source={require('./../assets/images/MainPage.png')} />
)}
์ด๋ฏธ์ง์ source์๋ ์ฑ ํด๋์์ ์์ฒด์ ์ผ๋ก ์ด๋ฏธ ๊ฐ๊ณ ์๋ ์ด๋ฏธ์ง๋ ์น์ด๋ ์๋ฒ์ ์กด์ฌํ๋ ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. ์ด๋ฏธ ๊ฐ๊ณ ์๋ ์ด๋ฏธ์ง๋ require('์์น')
๋ฅผ ํตํด ๋ถ๋ฌ์ค๊ณ ์ธ๋ถ์ ์ด๋ฏธ์ง๋ {uri:'์ฃผ์'}
๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค. ์ด๋ฏธ์ง๋ ๋ฐ๋์ ํฌ๊ธฐ ์์ฑ์ ์ง์ ํด ์ฃผ์ด์ผ ํ๋๋ฐ ๋ฐ๋์ width
์ ๊ฐ์ ์์ฑ์ด ์๋์ด๋ flex
๋ฅผ ์ด์ฉํด์๋ ์ ์ฉํด ์ค ์ ์๋ค.
๋ชจ๋ ํจ์ํ ์ปดํฌ๋ํธ๋ ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ ธ์๋ค. ์ด ํ๊ทธ์ display
์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ flex
์ด๋ค. flexbox๋ฅผ ์ด์ฉํด ํฌ๊ธฐ๋ฅผ ์ ์ง์ ํด์ฃผ์์ผ๋ฉด ํ๋ค.
- ํฌ๊ธฐ๋ ์ ๋ ์์น๋ก ์ง์ ํ์ง ์๋๋ค.
width
์height
์ ์ฌ์ฉ์ ์ ๋์ ์ผ๋ก ์์ ํฉ๋๋ค. ํฌ๊ธฐ๋ฅผ 100%๋ก ๋๋ฆฌ๊ณ ์ถ๋ค๋ฉดflex
(grow์๋ต)์์ฑ๊ณผalignSelf
์์ฑ์ ์ด์ฉํด๋ด ์๋ค. - ํฌ๊ธฐ๊ฐ ๋ง๊ฒ ๋์ค๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ ๋
borderWidth: 1
์ ์ถ๊ฐํด์ ์ด๋์ ๋ ํฌ๊ธฐ์ธ์ง ์ง์ ํ์ธํด ๋ด ์๋ค. - ๋ ์ด์์์ flex๋ฅผ ์ต๋ํ ํ์ฉํ๊ณ ์ฌ๋ฌ ์ปดํฌ๋ํธ์ ํฌ๊ธฐ๋
margin
๊ณผpadding
์ ์ด์ฉํฉ๋๋ค. - ์ด๋ฏธ์ง์ ํฌ๊ธฐ์กฐ์ ์
resizeMode
๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. ๊ฐ์ผ๋ก๋contain
๋๋cover
๊ฐ ์ ์ฉ๋ ์ ์์ต๋๋ค. - ํฐํธ, ๋ฉ์ธ ํ
๋ง ์์, ํ๋ฉด์ฌ์ด์ฆ๋
components/StyledText.js
,constants/Color.js
,constants/Layout.js
์ ๋ค์ด์์ต๋๋ค. ์์ง ์ ์ฉ์๋์์ผ๋ ์ ์ฉํด์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.