091
[JS/React] CSS 문법(선택자,레이아웃), Styled-Component 본문
[JS/React] CSS 문법(선택자,레이아웃), Styled-Component
공구일 2026. 6. 8. 01:511. CSS
- CSS는 스타일과 레이아웃을 정의하는 언어로, 크게 선택자(Selector)와 스타일로 구성되어있습니다.

- Selector
h1 {
color: green;
}
• Element Selector: 특정 HTML 태그를 선택합니다.
<div id="section">
...
</div>
#section {
background-color: blue;
}
• ID Selector: 엘리먼트에 고유 id를 정의하여 사용합니다.
<span class="medium">
...
</span>
<p class="medium">
...
</p>
.medium {
font-size: 20px;
}
p.medium {
font-size: 30px;
}
• Class Selector: 여러 개의 엘리먼트를 분류하기 위해 사용합니다. . 뒤에 클래스명을 붙여서 사용합니다.
* { font-size: 20px; }
• Universal Selector: 전체 요소에 적용할 때 사용하며 *을 사용합니다.
h1, h2 { color: black; }
• Grouping Selector: 여러가지 선택자를 그룹으로 묶어 하나의 스타일을 적용하기 위해 사용합니다.
button:hover { font-weight: bold; }
option:checked { background: #0f0; }
a:active { color: red; }
input:focus { color: #000; }
p:first-child { background: red; }
p:last-child { background: blue; }
• 상태(state) 관련 Selector: 요소의 현재 상태에 따라 스타일을 다르게 적용할 때 사용합니다.
-> :hover - 마우스 커서가 엘리먼트 위에 올라왔을 때
-> :checked - radio, checkbox 같은 유형의 input 태그가 체크되어 있는 경우
-> :active - 주로 <a> 태그에 사용. 엘리먼트가 클릭됐을 때.
-> :focus - 주로 <input> 태그에 사용. 엘리먼트가 focus 되었을 때
-> :first-child, :last-child - 상위 엘리먼트를 기준으로 각각 첫 번째 child, 마지막 child일 경우
- 레이아웃
div {
display: none | block | inline | inline-block | flex;
}
-> none: 엘리먼트를 화면에 숨기기 위 해 사용합니다.
-> block: 블록 단위로 엘리먼트를 배치합니다. 새로운 줄에서 시작하여 위치한 곳 전체의 width를 차지합니다. <p>, <div>, <h1>~<h6> 태그의 기본 속성입니다.

-> inline: 줄바꿈 없이 한 줄에 다른 엘리먼트들과 나란히 배치합니다. width, height 속성은 무시됩니다. <span>, <a>, <em> 태그의 기본 속성입니다.

-> inline-block: inline처럼 동작하면서 width, height, margin, padding 등 속성 지정 가능합니다. <button>, <input>, <select> 태그의 기본 속성입니다.
div {
display: flex;
felx-direction: row | column | row-reverse | column-reverse;
align-items: stretch | flex-start | center | flex-end | baseline;
justify-content: flex-start | center | flex-end | space-between | space-around;
}
-> flex: 엘리먼트를 블록 레벨의 플렉스 컨테이너로 표시하는 것으로 내부에 다른 엘릴먼트들을 포함합니다.


• flex-direction


• align-items

• justify-content
- Styled-components는 CSS 문법을 그대로 사용하면서 결과물을 스타일링된 컴포넌트 형태로 만들어주는 오픈소스 라이브러리입니다.
npm install styled-components@latest
+) npm 패키지 관련 명령어
npm install <패키지명>@버전 //특정 버전을 설치
npm install -g <패키지명> //패키지를 전역으로 설치
npm update <패키지명> //패키지 업데이트
npm uninstall <패키지명> //패키지 삭제
- Styled-components을 기본적으로 사용할 때는 tagged 템플릿 리터럴을 사용합니다.
-> 템플릿 리터럴이란 리터럴을 템플릿 형태로 사용하는 자바스크립트 문법으로, 백틱 기호를 사용하여 문자열을 작성하고 그 안에 대체 가능한 expression을 넣는 방법을 의미합니다.
const name = "공구일";
`안녕 ${name}` // untagged — 함수 없음, 백틱만
myFunc`안녕 ${name}` // tagged — 앞에 함수 있음
-> 템플릿 리터럴에는 함수가 없는 untagged 템플릿 리터럴이 있고, 앞에 함수가 붙은 tagged 템플릿 리터럴이 있습니다.
• tagged 템플릿 리터럴
name="공구일"
region="서울"
function tagFunction(strings, nameExp, regionExp) {
// ↑배열 ↑첫번째${} ↑두번째${}
let str0 = strings[0]; // "제 이름은 "
let str1 = strings[1]; // "이고, 사는 곳은 "
let str2 = strings[2]; // "입니다."
return `${str0}${nameExp}${str1}${regionExp}${str2}`;
// "제 이름은 " + "Jeonghun" + "이고, 사는 곳은 " + "Seoul" + "입니다."
}
const output = tagFunction`제 이름은 ${name}이고, 사는 곳은 ${region}입니다.`
console.log(output); //제 이름은 공구일이고, 사는 곳은 서울입니다.
-> tagged 함수의 경우 백틱 안을 JS가 자동으로 분리해서 전달을 하는 특별한 문법입니다. 만약에 regionExp을 파라미터로 받지 않는 경우에는 오류가 발생하지 않고 그냥 사라집니다.
import styled from 'styled-components';
const Wrapper = styled.div`
padding: lem;
background: grey;
`;
-> 백틱으로 둘러 쌓인 문자열 부분에 CSS 속성을 넣어줍니다.
-> 태그 함수 위치에 styled.<HTML 태그> 형태로 사용해줍니다.
-> HTML 태그에 CSS 속성들이 적용된 형태의 리액트 검포넌트가 만들어집니다.
- 실습: Props로 동적 스타일링
import styled from 'styled-components';
const Button = styled.button`
color: ${props => props.dark ? 'white' : 'black'};
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;
- 실습: 기존 컴포넌트 확장
import styled from 'styled-components';
const Button = styled.button`
color: grey;
border: 2px solid palevioletred;
`;
const RoundedButton = styled(Button)`
border-radius: 16px;
`;
function Sample(props) {
return (
<div>
<Button>Normal</Button>
<RoundedButton>Rounded</RoundedButton>
</div>
);
}
export default Sample;
-> 새로 만들 때는 styled.태그이름, 상속받을 때는 styled(컴포넌트이름)으로 작성합니다.
'Programming Language > JavaScript&TypeScript' 카테고리의 다른 글
| [TS/React] TypeScript (1) | 2026.06.07 |
|---|---|
| [JS/React] Shared State, Context (0) | 2026.06.06 |
| [JS/React] REST (0) | 2026.06.06 |
| [JS/React] 리액트 라우터(React Router) (0) | 2026.05.24 |
| [JS/React] 리스트와 키, 입력 폼 (0) | 2026.04.18 |