CSS
import “./style.css”;๋ฅผ ์์ฑํ์ฌ ๋ถ๋ฌ์ค๋ ๊ฐ๋จํ ๋ฐฉ์์ผ๋ก, css๋ฅผ ์ด์ฉํ์ฌ ์คํ์ผ๋งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
CSS๋ก ์คํ์ผ๋ง์ ํ๋ฉด ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋๋ฐ, ์ด๋ด ๋ SASS ๋๋ SCSS ๋ฑ์ ํตํด ํด๊ฒฐํ ์ ์๋ค.
Sass(syntactically awesome stylesheet)
์์ฃผ ์ฌ์ฉํ๋ css ์ ์ฒ๋ฆฌ๊ธฐ ์ค ํ๋์ด๋ค. css3์ ํ์ฅ์ผ๋ก Dart๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ฉฐ, ๋ ์ฝ๊ฒ ์์ฑํ๊ฒ ํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
์คํ์ผ ์ฝ๋์ ์ฌํ์ฉ์ฑ์ ๋์ฌ์ฃผ๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๋ฏ๋ก ์ ์ง๋ณด์์ ๋์์ด ๋๋ค.
ํ์ฅ์๋ .scss์ .sass ๋๊ฐ์ง๋ฅผ ์ง์ํ๋ค.
.sass
Importํ๊ธฐ ์ํด์ node-sass๋ฅผ ์ค์นํ๋ค.
$ yarn add node-sass
//utils.scss
@import '../../../node_modules/library/styles';
@import '~library/styles';
node_modules ๋๋ ํฐ๋ฆฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ค.
$font-stack: Helvetica, sans-serif
$primary-color: #333
// ๋ค์ฌ์ฐ๊ธฐ๋ก ๊ตฌ๋ถ
body
font: 100% $font-stack
color: $primary-color
์ค๊ดํธ({})์ ์ธ๋ฏธ์ฝ๋ก (;)์ ์ฌ์ฉํ์ง ์๋๋ค.
.scss
๊ธฐ์กด css ์์ฑ๋ฒ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค.
utilsํ์ผ๋ก ๋ถ๋ฆฌํ๊ณ importํ์ฌ ์ฌ์ฉํ๋ค.
ํด๋์ค ์์ ๋ ๋ค๋ฅธ ํด๋์ค์ ์คํ์ผ ์ ์ฉ์ด๋ค.
// ๋ณ์ ์ฌ์ฉ
$red: #fa5252;
$orange: #fd7e14;
// mixin ๋ง๋ค๊ธฐ (์ฌ์ฌ์ฉ๋๋ ์คํ์ผ ๋ธ๋ก์ ํจ์์ฒ๋ผ ์ฌ์ฉ ํ ์ ์์)
// CSS์์ ์ฌ์ฉํ๋ ํจ์๋ฅผ ๋ปํ๋ค.
@mixin square($size) {
$calculated: 32px * $size;
width: $calculated;
height: $calculated;
}
.SassComponent {
display: flex;
.box {
background: red; // ์ผ๋ฐ CSS ์์ .SassComponent .box ์ ๋ง์ฐฌ๊ฐ์ง
cursor: pointer;
transition: all 0.3s ease-in;
&.red {
// ํ์ฌ ์ ํ์ ์ฐธ์กฐ(&)- ๊ฐ๋
์ฑ์ด ์ข์์ง
// .red ํด๋์ค๊ฐ .box ์ ํจ๊ป ์ฌ์ฉ ๋์ ๋
background: $red;
@include square(1);
// mixin์ผ๋ก ์ ์ธํ ๊ฒ์ include๋ก ์ ์ฉ
}
&.orange {
background: $orange;
@include square(2);
} }
Css Module
CSS๋ฅผ ์ ์ญ์ ์ด์ง ์๊ณ ์ง์ญ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋ค.
CSSํด๋์ค์ ์ด๋ฆ์ ํ์ผ๋ง๋ค ๊ณ ์ ํ ์ด๋ฆ๊ฐ ์ต์ ์ด๋ค.
์ฆ, [ํ์ผ ์ด๋ฆ]_[ํด๋์ค ์ด๋ฆ]_[ํด์๊ฐ]ํํ๋ก ์๋์ผ๋ก ๋ง๋ค์ด์ ์ปดํฌ๋ํธ ์คํ์ผ ํด๋์ค ์ด๋ฆ์ด ์ค์ฒฉ๋๋ ํ์์ ๋ฐฉ์งํด์ฃผ๋ ๊ธฐ์ ์ด๋ค.
[ํ์ผ์ด๋ฆ].module.cssํ์ฅ์๋ก ํ์ผ์ ์ ์ฅํ๊ธฐ๋ง ํ๋ฉด CSS Module์ด ์ ์ฉ๋๋ค.
styled-components
์กํธ์ ๋ฆฌ์กํธ ๋ค์ดํฐ๋ธ์ ์ปดํฌ๋ํธ์ ์คํ์ผ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๋์ผํ ์ปดํฌ๋ํธ์์ ์ปดํฌ๋ํธ ์ด๋ฆ์ ์ฐ๋ฏ ์คํ์ผ์ ์ง์ ํ๋ ๊ฒ์ styled-components๋ผ๊ณ ๋ถ๋ฅธ๋ค.
CSSํ์ผ์ import ํ์ง ์์๋ CSS์์ ์ ํ ์ ์๋ค.(CSS ๋ฌธ๋ฒ ์ฌ์ฉ)
// styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ import ํด์จ styled๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ด์ฉํฉ๋๋ค
// ์๋์ ๊ฐ์ด div ํ๊ทธ๋ฅผ ๋ง๋ค๊ณ ๋ฐฑํฑ(‘)๋ด๋ถ์ ์คํ์ผ์ ์ง์ ํด์ฃผ๋ฉด Text, Container๋ผ๋ ์คํ์ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค
import React from "react";
import styled from "styled-components";
function App() {
return (
// Container, Text๋ ์ปดํฌ๋ํธ์ด๋ฏ๋ก props๊ฐ์ ํตํด ์ ๋ฌ ๋ฐ์ ๊ฐ์ ์ ๋์ ์ผ๋ก ์คํ์ผ ์ค ์ ์๋ค.
<Container>
<StyledButton type="primary"> test Button </StyledButton>
</Container>
);
}
// Styled-Component๋ก ๋ง๋ค์ด์ง ์ปดํฌ๋ํธ๋ค์ ์คํ์ผ ์์์ด ๊ฐ๋ฅํ๋ค.
// ๊ธฐ์กด divํ๊ทธ๋ฅผ ์ด์ฉํด์ ์คํ์ผ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ค.(๊ธฐ์กด divํ๊ทธ์ ์์ฑ์ ๊ทธ๋๋ก ์์ ๋ฐ๋๋ค.)
// divํ๊ทธ๋ ๋ธ๋ก๋จ์๋ก ๋ฌถ์ด ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
// const ์ปดํฌ๋ํธ ๋ช
= styled.์์ฑ ํ๊ทธ(div, span, button....๋ฑ)`
// ์์ฑ ์ ์ `;
const Container = styled.div`
background-color: #f6e58d;
`;
const StyledButton = styled(Button)`
margin: 30px;
background-color: blue;
`;
export default App;
์คํ์ผ ์ปดํฌ๋ํธ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํด์ผ ํ๋ค.
tagged template literal ๋ฐฑํฑ(‘ ’)์ ์ฌ์ฉํ๋ฉด ํ์ ์ ์๊ด์์ด Function, Number, Array, Object ๋ฑ์ ์ ๋ฌํ๊ณ ์ด๋ฅผ ์คํํ ์ ์๋ค.
'๐ Development > React Native' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React ๊ฐ๋ฐ์ Node.js๊ฐ ํ์ํ ์ด์ (0) | 2023.06.15 |
---|---|
[React Native] ๋ ์ด์์ ์คํ์ผ๋ง (0) | 2023.06.15 |
[React Native] context API๋ (0) | 2023.06.15 |
[React Native] State์ React Hook(useState) - ํจ์ํ ์ปดํฌ๋ํธ์ ํด๋์คํ ์ปดํฌ๋ํธ ๋์ ์ธ ๋ฐ์ดํฐ ๋ค๋ฃจ๊ธฐ (0) | 2023.06.15 |
[React Native] Props ๋? ์์ (0) | 2023.06.15 |