๐จ ์คํ์ผ๋ง
๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด ์คํ์ผ๋ง
๋ฐฉ๋ฒ1. ์ธ๋ผ์ธ ์คํ์ผ๋ง
: ์ปดํฌ๋ํธ์ ์ง์ ์คํ์ผ ์ ๋ ฅ
HTML์ ์ธ๋ผ์ธ ์คํ์ผ๋ง๊ณผ ๋น์ท,
but ๊ฐ์ฒด ํํ๋ก ์ ๋ฌํด์ผํจ (HTML์ ๋ฌธ์์ด ํํ๋ก ์คํ์ผ ์
๋ ฅ)
- ์ฅ์ :
์ด๋ค ์คํ์ผ์ด ์ ์ฉ๋๋์ง ์ ๋ณด์ธ๋ค - ๋จ์ :
๋น์ทํ ์ญํ ์ ํ๋ ์ปดํฌ๋ํธ์ ๋์ผํ ์ฝ๋ ๋ฐ๋ณต
ํด๋น ์คํ์ผ ์ ์ฉ ์ด์ ๋ฅผ ๋ช ํํ๊ฒ ์ดํดํ๊ธฐ ์ด๋ ค์
<Text
style={{
flex: 1,
backgroundColor: "#fff",
}}
>
๋ด์ฉ
</Text>
๋ฐฉ๋ฒ2. ํด๋์ค ์คํ์ผ๋ง
: ์คํ์ผ ์ํธ์ ์คํ์ผ์ ์ ์ํ๊ณ ์ปดํฌ๋ํธ์๋ ์ ์๋ ์คํ์ผ์ ์ด๋ฆ์ผ๋ก ์ ์ฉ
= CSS ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌ
- ์ฅ์ : ์ ์ฒด์ ์ธ ์คํ์ผ์ ๊ด๋ฆฌํ๊ธฐ๊ฐ ์ฝ๋ค
const App = () => {
return (
<Text style={styles.text}>Inline Styling - Text</Text>
);
};
const styles = StyleSheet.create({
text: {
padding: 10,
fontSize: 26,
fontWeight: "600",
color: "black",
},
});
ํ๋ฒ์ ๋๊ฐ์ง ์คํ์ผ๋ง ์ ์ฉํ๊ธฐ
- ํด๋์ค์คํ์ผ๋ง ์ธ๋ผ์ธ์คํ์ผ๋ง ๋์์
<Text style={(textStyles.text, { color: "green" })}> Inline Styling - Text </Text>
- ํด๋์ค์คํ์ผ๋ง ๋๊ฐ ์ด์ ๋์์ ์ ์ฉ
<Text style={[textStyles.text, textStyles.error]}> Inline Styling - Error </Text>
๊ฐ๋จํ๊ฒ ํ๋ฉด์ ํ์ธํ๋ ์ํฉ -> ์ธ๋ผ์ธ์คํ์ผ ใฑใ
์ฅ๊ธฐ์ ์ผ๋ก๋ -> ํด๋์ค ์คํ์ผ๋ง์ด ๋์
๐ท ์คํ์ผ ์์ฑ๋ค
1. flex
: width
๋ height
์ ๋ฌ๋ฆฌ ๋น์จ๋ก ํฌ๊ธฐ๋ฅผ ๊ฒฐ์
- ์ซ์๋ฅผ ๊ฐ์ผ๋ก ๋ฐ์ (๋จ์๊ฐ ์์)
- ๊ฐ์ด 0์ผ๋ ->
width
height
๋ฐ๋ผ ๊ฒฐ์ - ๊ฐ์ด ์์์ผ๋ -> flex ๊ฐ์ ๋น๋กํ์ฌ ํฌ๊ธฐ ์กฐ์
2. ์ ๋ ฌ
flexDierection
: ์์ ์ปดํฌ๋ํธ๊ฐ ์์ด๋ ๋ฐฉํฅ์ ๋ณ๊ฒฝ
column
(๊ธฐ๋ณธ) : ์ธ๋ก๋ฐฉํฅcolumn-reverse
: ์ธ๋ก๋ฐฉํฅ ์ญ์row
: ๊ฐ๋ก๋ฐฉํฅrow-reverse
: ๊ฐ๋ก๋ฐฉํฅ ์ญ์
justifyComponent
: flexDirection ์์ ๊ฒฐ์ ํ ๋ฐฉํฅ๊ณผ ๋์ผํ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ
flex-start
(๊ธฐ๋ณธ) : ์์์ ๋ถํฐflex-end
: ๋์์๋ถํฐcenter
: ์ค์space-between
: ์ปดํฌ๋ํธ ์ฌ์ด์ ๊ณต๊ฐ์ ๋์ผํ๊ฒspace-around
: ์ปดํฌ๋ํธ ๊ฐ๊ฐ์ ์ฃผ๋ณ ๊ณต๊ฐ์ ๋์ผํ๊ฒspace-evenly
: ์ปดํฌ๋ํธ ์ฌ์ด์ ์๋ ๊ณต๊ฐ์ ๋์ผํ๊ฒ
alignItems
: flexDirection
์์ ๊ฒฐ์ ํ ๋ฐฉํฅ๊ณผ ์์์ธ ๋ฐฉํฅ์ผ๋ก ์ ๋ ฌ
flex-start
(๊ธฐ๋ณธ) : ์์์ ์์๋ถํฐflex-end
: ๋์์๋ถํฐcenter
: ์ค์stretch
: alitnItems ์ ๋ฐฉํฅ์ผ๋ก ์ปดํฌ๋ํธ ํ์ฅbaseline
: ๋ด๋ถ์ ํ ์คํธ ๋ฒ ์ด์ค๋ผ์ธ ์ ๊ธฐ์ค์ผ๋ก
3. ๊ทธ๋ฆผ์
iOS
shadowColor
: ๊ทธ๋ฆผ์์ ์shadowOffset
: (width ์ height ์ด์ฉ) ๊ทธ๋ฆผ์ ๊ฑฐ๋ฆฌshadowOpacity
: ๊ทธ๋ฆผ์์ ๋ถํฌ๋ช ๋shadowRadius
: ๊ทธ๋ฆผ์์ ํ๋ฆผ ๋ฐ๊ฒฝ
android
elevation
: ๊ทธ๋ฆผ์์ ๊ณ ๋
platform
: ํ๋ซํผ (iOS, android) ๋ณ๋ก ๋ค๋ฅธ ์ฝ๋๊ฐ ์ ์ฉ๋๊ฒ ํ๋ ๋ฆฌ์กํธ ๋ชจ๋
https://reactnative.dev/docs/platform-specific-code#platform-module
...Platform.select({
ios: {
shadowColor: "#000",
shadowOffset: {
width: 10,
height: 10,
},
shadowOpacity: 0.5,
shadowRadius: 10,
},
android: {
elevation: 20,
},
}),
๐ ์คํ์ผ๋ ์ปดํฌ๋ํธ
: ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ์์ ์คํ์ผ์ ์์ฑํ๋ CSS-in-JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ
= ์คํ์ผ์ด ์ ์ฉ๋ ์ปดํฌ๋ํธ
- ์นด๋ฉํ๊ธฐ๋ฒ์ด ์๋ ํ์ดํ ์ฌ์ฉ ๊ฐ๋ฅ
- CSS ์์ฑ๊ณผ ์ด๋ฆ์ด ๊ฐ์๋ ํ์ ๊ณผ ๋จ์๋ ํต์ผ
- ์ ๋ ฅ๊ฐ์ ๋ง์ถฐ ํ์ ์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ์๋ค
- ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ค์ ๊ด๋ฆฌํ ์ ์๋ค
- Tagged Template Literals
์ค์น
npm install styled-components
๊ธฐ๋ณธ๋ฌธ๋ฒ
import styled from 'styled-components/native';
const ์ด๋ฆ = styled.์ปดํฌ๋ํธ์ด๋ฆ`
๋ด์ฉ
`
ex
const TextComponent = styled.Text`
color: #fff;
`
์ด๋ฏธ ์กด์ฌํ๋ ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ
const ์ปดํฌ๋ํธ์ด๋ฆ = styled(์์๋ฐ์์ปดํฌ๋ํธ์ด๋ฆ)`
๋ด์ฉ
`
const NameTextComponent = styled(TextComponent)`
color: blue;
`
props ์ฌ์ฉํ๊ธฐ
const ์ด๋ฆ = styled.์ปดํฌ๋ํธ์ด๋ฆ`
์์ฑ: ${(props) =>
์กฐ๊ฑด ? ์ฐธ์ผ๋์ ์์ฑ๊ฐ : ๊ฑฐ์ง์ผ๋์ ์์ฑ๊ฐ};
`;
ex
const ButtonContainer = styled.TouchableOpacity`
background-color: ${(props) =>
props.title === "Seondal" ? "#3498db" : "#9b59b6"};
`;
attrs
- ์คํ์ผ์ ์์ฑํ๋ ๊ณณ์์ ์ปดํฌ๋ํธ์ ์์ฑ ์ค์ ๊ฐ๋ฅ
- ์์ฑ ์ค์ ํ ๋ ์ ๋ฌ๋ props ์ฌ์ฉ ๊ฐ๋ฅ -> props ๋ฐ๋ผ ์์ฑ ์ค์
const ์ด๋ฆ = styled.์ปดํฌ๋ํธ์ด๋ฆ.attrs((props) => ({
์์ฑ: props.props์์,
}))`
์์ฑ1: ${(props) => props.props์์};
์์ฑ2: ์์ฑ๊ฐ;
`;
ThemeProvider
: Context API ๋ฅผ ํ์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ์คํ์ผ๋ ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ ๋ ๋ฏธ๋ฆฌ ์ ์ํ ๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก props ๋ก ์ ๋ฌ
์ฑ๊ฐ๋ฐ์ด๋ ์น๊ฐ๋ฐ์์ ๋์ดํธ๋ชจ๋ ๋ฑ์ ์ค์ ํ ๋ ์ฌ์ฉํ๋ฉด ์ข์๋ฏ
'3-1๊ธฐ ์คํฐ๋ > React Native' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[5์ฃผ์ฐจ] ๋ด๋น๊ฒ์ด์ (0) | 2021.11.22 |
---|---|
[4์ฃผ์ฐจ] Hooks์ Context API (0) | 2021.11.17 |
[3์ฃผ์ฐจ] ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ๋ก โ TODO List ๋ง๋ค๊ธฐ (0) | 2021.11.08 |
[1์ฃผ์ฐจ] ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ์ปดํฌ๋ํธ (1์ฅ~3์ฅ) (0) | 2021.10.15 |
๋๊ธ