๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

[React Native] 03-2 View ์ปดํฌ๋„ŒํŠธ์™€ CSS ๋ฐ•์Šค ๋ชจ๋ธ ๋ณธ๋ฌธ

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[React Native] 03-2 View ์ปดํฌ๋„ŒํŠธ์™€ CSS ๋ฐ•์Šค ๋ชจ๋ธ

adorableco 2023. 8. 7. 00:52
๋ฐ˜์‘ํ˜•

Platform๊ณผ Dimensions API

์‹คํ–‰ OS ํ™•์ธ

import {Platform{ from 'react-native'
console.log(Platform.OS)

โœ… ์•ฑ์ด ์‹คํ–‰๋˜๋Š” ํฐ์ด ์•ˆ๋“œ๋กœ์ด๋“œํฐ์ธ์ง€ ์•„๋‹ˆ๋ฉด ์•„์ดํฐ์ธ์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.

โœ… ์œ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด android ๋˜๋Š” ios ๋ผ๊ณ  ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

Dimension API

import {Dimension} from 'react-native'
const {width, height} = Dimensions.get('window')

โœ… width, height ๋Š” ํฐ์„ ๊ฐ€๋กœ๋กœ ํšŒ์ „ํ•˜๋”๋ผ๋„ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๋ทฐ ์ปดํฌ๋„ŒํŠธ์˜ backgroundColor ์Šคํƒ€์ผ ์†์„ฑ

โžก๏ธ ์ด๋ฆ„์— 'View' ๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ทฐ์ปดํฌ๋„ŒํŠธ๋Š” backgroudColor ์Šคํƒ€์ผ ์†์„ฑ์œผ๋กœ ์ž์‹ ์˜ ๋ฐ”ํƒ•์ƒ‰์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ์˜ fontSize ์Šคํƒ€์ผ ์†์„ฑ์—๋Š” ๋ฐ˜๋“œ์‹œ numberํƒ€์ž…์ด๋‚˜ undefined๋ฅผ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

View์˜ ๊ธฐ๋ณธ width๊ฐ’๊ณผ height๊ฐ’

๊ธฐ๋ณธ width๊ฐ’ : ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ width๋ฅผ ๊ทธ๋Œ€๋กœ ์„ค์ •

๊ธฐ๋ณธ height๊ฐ’ : ์ž์‹์š”์†Œ์˜ height (์ž์‹ ์š”์†Œ๊ฐ€ ์ˆ˜ํ‰์œผ๋กœ ๋ฐฐ์น˜๋ผ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ๋†’์€ ์š”์†Œ์˜ height ๊ฐ’์„, ์ˆ˜์ง์œผ๋กœ ๋ฐฐ์น˜๋ผ์žˆ๋‹ค๋ฉด ์ž์‹ ์š”์†Œ์˜ height ๊ฐ’์„ ๋ชจ๋‘ ๋”ํ•œ ๊ฐ’) ๋ฅผ ์„ค์ •

 

const {width, height} = Dimension.get('window')

์ด๋ ‡๊ฒŒ ์–ป์€ height ๊ฐ’์„ SafeAreaView์˜ height ์Šคํƒ€์ผ ์†์„ฑ์— ์„ค์ •ํ•˜๋ฉด ๋ทฐ์˜ ๋†’์ด๋ฅผ ํฐ ๋†’์ด๋งŒํผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

const styles = StyleSheet.create({
  SafeAreaView: {backgroundColor: MD2Colors.blue500, height:height}
})

โœ… ์—ฌ๊ธฐ์—์„œ height: height ๋Š” ๊ทธ๋ƒฅ height ๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. โžก๏ธ ์†์„ฑ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ๋‹ด์€ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๋˜‘๊ฐ™์„ ๋•Œ๋Š” ๊ฐ’์„ ๋‹ด์€ ๋ณ€์ˆ˜ ๋ถ€๋ถ„์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ถ€๋ชจ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํผ์„ผํŠธ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

โžก๏ธ CSS์—์„œ ํผ์„ผํŠธ(%) ๊ฐ’์€ ํ•ญ์ƒ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

 

flex ์Šคํƒ€์ผ ์†์„ฑ

โžก๏ธ flex: 1 == height: 100% / flex: 0.5 == height: 50%

โœ… flex์™€ width ํ˜น์€ height ์Šคํƒ€์ผ ์†์„ฑ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ์—๋Š” width์™€ height์˜ ์ ์šฉ ์šฐ์„ ์ˆœ์œ„๊ฐ€ flex ๋ณด๋‹ค ๋†’๋‹ค.

(์ž์„ธํ•œ๊ฑด ๋‚˜์ค‘ ์ฑ•ํ„ฐ์—์„œ ๋‹ค๋ฃฌ๋‹ค๊ณ  ํ•จ.)

 

margin ์Šคํƒ€์ผ ์†์„ฑ

โžก๏ธ ๋ถ€๋ชจ/์ž์‹ ๊ฐ„ ํ˜น์€ ์ด์›ƒํ•œ ํ˜•์ œ ์š”์†Œ ๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ ์กฐ์ •ํ•œ๋‹ค.

โžก๏ธ ์†์„ฑ: marginLeft, marginRight, marginTop, marginBottom

โœ… marginLeft ๊ฐ’ = marginRight ๊ฐ’ โžก๏ธ marginHorizontal ์Šคํƒ€์ผ ์†์„ฑ์œผ๋กœ ๋™์‹œ์— ์„ค์ • ๊ฐ€๋Šฅ

โœ… marginTop ๊ฐ’ = marginBottom ๊ฐ’ โžก๏ธ marginVertical ์Šคํƒ€์ผ ์†์„ฑ์œผ๋กœ ๋™์‹œ์— ์„ค์ • ๊ฐ€๋Šฅ

โœ… marginRight ๊ฐ’ = marginBottom ๊ฐ’ โžก๏ธ margin ์Šคํƒ€์ผ ์†์„ฑ์œผ๋กœ ๋™์‹œ์— ์„ค์ • ๊ฐ€๋Šฅ

 

padding ์Šคํƒ€์ผ ์†์„ฑ

margin ๊ณผ ๋˜‘๊ฐ™์Œ but, padding ์†์„ฑ์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ ์ชฝ์— ์ ์šฉํ•˜๋Š” ์Šคํƒ€์ผ๋กœ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์˜ ์˜์—ญ์„ ๊ฝ‰ ์ฑ„์šฐ์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

border ๊ด€๋ จ ์Šคํƒ€์ผ ์†์„ฑ

โžก๏ธ ๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”์–ด ์ปดํฌ๋„ŒํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ ์ž์‹  ์˜์—ญ์˜ ๊ฒฝ๊ณ„(border)๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

โ˜…์ค‘์š”ํ•œ ์ โ˜…

iOS ์—์„œ SafeAreaView๋Š” View ๊ฐ€ ์•„๋‹ˆ๋‹ค!!!!

โžก๏ธ iOS ์—์„œ๋งŒ ์ ์šฉ์ด ๋˜์ง€ ์•Š๋Š” ์Šคํƒ€์ผ ์†์„ฑ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ• Platform.select ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

OS์— ๋”ฐ๋ฅธ ์„ค์ •

paddingLeft: Platform.select({ios: 0, android: 20})

โœ… Platform.OS ๊ฐ€ ios์ผ ๋•Œ์˜ ๊ฐ’๊ณผ Platform.OS ๊ฐ€ android์ผ ๋•Œ์˜ ๊ฐ’์„ ๊ฐ๊ฐ ์„ค์ •ํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•