// styled-components import하기
import styled from "styled-components";
/* 변수로 선언(StBox)하여 태그로서 사용이 될 수 있는 컴포넌트가 됨
styled.HTML요소(태그)를 사용하여 return부분의 태그로 사용해준다.
css방식은 문자열이기 때문에 백틱으로 감싸준다. JS방식 {}과 다름 */
const StBox = styled.div`
/* css 방식으로 적어준다. */
width: 100px;
height: 100px;
border: 1px solid red;
`
function App() {
return (
// 이렇게 만들어진 StBox는 실제 태그로서 사용됨
<StBox>박스</StBox>
);
}
export default App;
import styled from "styled-components";
const StBox = styled.div`
width: 100px;
height: 100px;
/* props를 받아줌(백틱 안에 JS를 받아야해서 ${ } 안에 적어준다.(함수모양)) */
border: 1px solid ${(props) => props.borderColor};
margin: 20px;
`
function App() {
return (
<>
// 태그 안에 들어간 borderColor를 props로 내려줌
<StBox borderColor='red'>빨간박스</StBox>
<StBox borderColor='blue'>파란박스</StBox>
<StBox borderColor='green'>초록박스</StBox>
</>
);
}
export default App;
import styled from "styled-components";
// 박스들을 감싸주는 div를 가로로 배열될 수 있도록 StContainer를 만들어 감싸주기
const StContainer = styled.div`
display: flex;
`;
const StBox = styled.div`
width: 100px;
height: 100px;
border: 1px solid ${(props) => props.borderColor};
margin: 20px;
`;
// 박스의 색을 배열로 나타낸 변수 선언
const boxList = ['red', 'blue', 'green', 'black'];
// switch함수를 사용하여 색을 넣으면 이름을 반환하는 getBoxName라는 함수를 만들어준다.
const getBoxName = (color) => {
switch (color) {
case 'red':
return "빨간 박스";
case 'blue':
return "파란 박스";
case 'green':
return "초록 박스";
default:
return "검정 박스";
}
}
function App() {
return (
<StContainer>
{
/* map 함수를 사용하여 boxList의 색들을 돌아가며 props에 대입해주고,
해당 박스의 이름을 함께 넣어준다 */
boxList.map((box)=>{
return <StBox borderColor={box}>{getBoxName(box)}</StBox>;
})
}
</StContainer>
);
}
export default App;
// App.js
import styled from "styled-components";
import TestPage from './TestPage';
function App() {
return (
<>
<TestPage
title="제목입니다"
contents="내용입니다"></TestPage>
</>
);
}
export default App;
// TestPage.jsx
import styled from "styled-components";
function TestPage(props) {
return (
<Wrapper>
<Title>{props.title}</Title>
<Contents>{props.contents}</Contents>
</Wrapper>
);
}
const Title = styled.h1`
font-family: "Helvetica", "Arial", sans-serif;
line-height: 1.5;
font-size: 1.5rem;
margin: 0;
margin-bottom: 8px;
`;
const Contents = styled.p`
margin: 0;
font-family: "Helvetica", "Arial", sans-serif;
line-height: 1.5;
font-size: 1rem;
`;
const Wrapper = styled.div`
border: 1px solid black;
border-radius: 8px;
padding: 20px;
margin: 16px auto;
max-width: 400px;
`;
export default TestPage;
font-family: "Helvetica", "Arial", sans-serif;
line-height: 1.5;
import { createGlobalStyle } from "styled-components";
const GlobalStyle = createGlobalStyle`
// 바디 태그 아래에 있는 것들은 모두 이 스타일로 지정하겠다.
body {
font-family: "Helvetica", "Arial", sans-serif;
line-height: 1.5;
}
`
export default GlobalStyle
// App.js
import styled from "styled-components";
import TestPage from './TestPage';
import GlobalStyle from './GlobalStyle';
function App() {
return (
<>
<GlobalStyle></GlobalStyle>
<TestPage
title="제목입니다"
contents="내용입니다"></TestPage>
</>
);
}
export default App;
// TestPage.jsx
import styled from "styled-components";
function TestPage(props) {
return (
<Wrapper>
<Title>{props.title}</Title>
<Contents>{props.contents}</Contents>
</Wrapper>
);
}
const Title = styled.h1`
font-size: 1.5rem;
margin: 0;
margin-bottom: 8px;
`;
const Contents = styled.p`
margin: 0;
font-size: 1rem;
`;
const Wrapper = styled.div`
border: 1px solid black;
border-radius: 8px;
padding: 20px;
margin: 16px auto;
max-width: 400px;
`;
export default TestPage;
// 변수화된 스타일
$color: #4287f5;
$borderRadius: 10rem;
div {
background: $color;
border-radius: $borderRadius;
}
label {
padding: 3% 0px;
width: 100%;
cursor: pointer;
color: $colorPoint;
// 중첩 가능
&:hover {
color: white;
background-color: $color;
}
}
// common.scss
// colors 목록
$color1: #ed5b46;
$color2: #f26671;
$color3: #f28585;
$color4: #feac97;
//style.scss
// common.scss를 import하여 사용
@import "common.scss";
.box {
background-color: $color3;
}
// reset.css
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
import "./reset.css"
function App() {
return (
<div>
<span>default Style 테스트</span>
<h1>이건 h1 태그입니다.</h1>
<p>나는 p 태그입니다.</p>
</div>
);
}
export default App;
웹을 꾸밀 수 있는 방법이 무궁무진해서 배울때마다 신기하고 머리도 함께 터질 것 같다 ㅎㅎ.. 아직 props를 정확하게 이해한게 아니라서 공부를 좀 더 해야할 것 같다 ㅠㅠ