CSS의 기본 문법은 선택자
를 먼저 쓰고, 중괄호
안에 속성:속성값
쌍을 세미콜론
으로 구분하여 넣는 형태이다.
h1 {
color: green;
font-size: 16px;
}
① element selector
h1 {
color: green;
font-size: 16px;
}
② id selector
<div id="section">
...
</div>
#section {
background-color: black;
}
③ class selector
<span class="medium">
...
</span>
<p class="medium">
...
</p>
.medium {
font-size: 20px;
}
p.medium {
font-size: 20px;
}
④ universal selector
* {
font-size: 20px;
color: blue;
}
⑤ group selector
h1, h2, p {
color: black;
text-align: center;
}
⑥ state selector
button:hover {
font-weight: bold;
}
a:active {
color: red;
}
input:focus {
color: #000000;
}
option:checked {
background: #00ff00;
}
p:first-child {
background: #ff0000;
}
p:last-child {
background: #0000ff;
}
화면에 엘리먼트를 어떻게 배치할 것인지와 관련한 속성들에 대해 알아보자.
① display
div {
display: none | block | inline | flex;
}
② visibility
div {
visibility: visible | hidden;
}
③ position
④ height/width
CSS를 이용해 레이아웃을 구성할 때, display: block
이나 display: inline
등의 속성만으로는 다양한 레이아웃을 자유롭게 구성하는 데에 어려움이 있다. 이러한 문제를 해결하기 위해 사용하는 것이 Flex Box이다.
Flex Box는 Container와 Item으로 구성된다. 위에서도 잠깐 설명했지만, display: flex
를 사용하여 엘리먼트를 Flex Container로 만들 수 있다. 그리고 이 때, Flex Container에 포함된 여러 개의 엘리먼트를 Flex Item이라고 부른다.
컨테이너 안에 존재하는 여러 개의 아이템을 어떠한 방향과, 순서로 배치할지 정의하는 방법은 아래와 같다.
div {
display: flex;
flex-direction: row | column | row-reverse | column-reverse;
align-itmes: stretch | flex-start | center | flex-end | baseline;
justify-content: flex-start | cetner | flex-end | space-between | space-around;
}
① display: flex
② flex-direction
③ align-items
④ justify-content
① font-family
#title1 {
font-family: "Times New Roman", Times, serif;
}
② font-size
#title1 {
font-size: 16px;
}
③ font-weight
#title1 {
font-weight: bold;
}
④ font-style
#title1 {
font-style: italic;
}
① backgorund-color
div {
background-color: red;
}
② border
div {
border: 1px solid black;
}
Styled Components는 CSS 문법을 사용하여 스타일링된 컴포넌트를 만들기 위해 사용하는 오픈소스 라이브러리이다. Styled Components를 설치하는 명령어는 아래와 같다.
npm install --save styled-components
이후 아래의 import 문을 작성해야 한다.
import styled from 'styled-components';
사용 형식은 아래와 같다.
const {컴포넌트 명} = styled.{태그명}`
{속성}: {속성 값};
...
`;
이제 실제 사용 방법에 대해 알아보자.
import React from "react";
import styled from "styled-components";
const Wrapper = styled.div`
padding: 1em;
background: grey;
`;
const Title = styled.h1`
font-size: 1.5em;
color: white;
text-align: center;
`;
function MainPage(Props) {
return (
<Wrapper>
<Title>
안녕하세요!
</Title>
</Wrapper>
)
}
export default MainPage;
상황에 따라 동적으로 변하는 값을 스타일링에 사용해야 할 수도 있다. 바로 예시 코드를 살펴보기로 하자.
import React from "react";
import styled from "styled-components";
const Button = styled.button`
color: ${props => props.dark ? "white" : "dark"};
background: ${props => props.dark ? "black" : "white"};
border: 1px solid black;
`;
function Sample(props) {
return (
<div>
<Button>Normal</Button>
<Button dark>Dark</Button>
</div>
)
}
export default Sample;
위 코드는 Button 컴포넌트의 Props로 "dark"가 주어지면 흰 글씨에 검정 바탕이 적용되도록 만드는 것이다. 이와 같이 컴포넌트의 Props를 이용하면, 동적으로 변하는 값을 스타일링에 사용할 수 있게 된다.