CSS 기초 · 색상 & 폰트 · 박스 모델 · 배경 & 테두리
CSS를 HTML에 연결하는 3가지 방법, 선택자 종류, 우선순위(specificity), 상속 개념과 기본 텍스트 속성을 익힙니다. CSS의 다양한 색상 표기(HEX/RGB/RGBA/HSL), 폰트 속성과 Google Fonts 연결, CSS 변수(:root)로 디자인 시스템을 구축하는 법을 익힙니다. CSS의 모든 요소가 박스 형태로 렌더링되는 원리(content/padding/border/margin), box-sizing의 차이, display 속성과 margin 겹침 현상을 익힙니다. background-color/image/gradient, border와 border-radius, box-shadow와 그림자, opacity·cursor, 부드러운 전환을 위한 transition을 익혀 버튼·카드 UI를 만듭니다.
이 강의에서 배우는 것
- 1인라인/내부/외부 3가지 CSS 적용 방식의 장단점을 설명한다
- 2태그·클래스·ID·자손·자식·형제·가상 클래스 선택자를 사용한다
- 3우선순위 점수(인라인 1000, ID 100, 클래스 10, 태그 1)를 이해한다
- 4상속되는 속성과 그렇지 않은 속성을 구분한다
- 5색상 이름·HEX·RGB·RGBA·HSL을 상황에 맞게 사용한다
- 6Google Fonts로 한국어 웹폰트(Noto Sans KR)를 적용한다
- 7font-family/size/weight/line-height/letter-spacing을 자유롭게 다룬다
- 8:root와 var()로 디자인 토큰을 한 곳에서 관리한다
- 9박스 모델 4단계(content/padding/border/margin)를 구별한다
- 10box-sizing: border-box를 적용해 크기 계산을 단순화한다
- 11width/max-width/min-height의 차이를 안다
- 12overflow와 display 속성을 적절히 사용한다
- 13margin 겹침 현상의 원인과 해결을 안다
- 14배경 이미지의 size·position·repeat을 자유롭게 다룬다
- 15linear-gradient / radial-gradient로 그라데이션을 적용한다
- 16border와 border-radius로 둥근 모서리·원을 만든다
- 17box-shadow로 깊이 있는 카드를 표현한다
- 18transition으로 hover 효과를 부드럽게 만든다
CSS 기초
CSS를 HTML에 연결하는 3가지 방법, 선택자 종류, 우선순위(specificity), 상속 개념과 기본 텍스트 속성을 익힙니다.
1. CSS 연결 방법
1-1. 인라인 (비추천)
<p style="color: red; font-size: 18px;">인라인 스타일</p>1-2. 내부 스타일
<head>
<style>
p { color: blue; }
</style>
</head>1-3. 외부 스타일 (실무 표준)
<head>
<link rel="stylesheet" href="style.css">
</head>여러 HTML 파일에서 동일한 CSS를 재사용. 유지보수가 가장 쉬워 실무에서 표준입니다.
2. 선택자
| 종류 | 예시 | 설명 |
|---|---|---|
| 태그 | p { } | 모든 <p> 선택 |
| 클래스 | .card { } | class="card" 요소 |
| ID | #header { } | id="header" 요소 |
| 자손 | div p { } | div 안의 모든 p |
| 자식 | ul > li { } | ul의 직계 자식 li |
| 형제 | h1 + p { } | h1 바로 다음 p |
| 전체 | * { } | 모든 요소 |
가상 클래스
a:hover { color: red; }
a:visited { color: purple; }
li:first-child { color: blue; }
li:last-child { color: green; }
li:nth-child(2) { color: orange; }3. 우선순위 (Specificity)
인라인 > ID > 클래스 > 태그| 선택자 | 점수 |
|---|---|
| 인라인 (style="") | 1000 |
| ID (#id) | 100 |
| 클래스 (.class), 가상 클래스 (:hover) | 10 |
| 태그 (p, div) | 1 |
/* 같은 <p id="title" class="text">에 모두 적용될 때 */
p { color: black; } /* 1점 */
.text { color: blue; } /* 10점 */
#title { color: red; } /* 100점 → 적용됨 */!important는 모든 우선순위를 무시하지만 남용하면 유지보수가 어려워집니다.
4. 상속
body {
font-family: 'Arial', sans-serif; /* 모든 자식에게 상속 */
color: #333;
}- 상속됨: color, font-family, font-size, line-height, text-align …
- 상속 안 됨: margin, padding, border, background, width …
5. 기본 텍스트 속성
p {
color: #333333;
font-size: 16px;
font-weight: bold; /* normal, bold, 100~900 */
text-align: center; /* left, center, right, justify */
text-decoration: none; /* 링크 밑줄 제거 */
line-height: 1.6;
}색상 & 폰트
CSS의 다양한 색상 표기(HEX/RGB/RGBA/HSL), 폰트 속성과 Google Fonts 연결, CSS 변수(:root)로 디자인 시스템을 구축하는 법을 익힙니다.
1. 색상 표현법
색상 이름
color: red;
color: blue;
color: tomato;
color: cornflowerblue;직관적이지만 종류가 제한적. 실무에서 거의 사용하지 않음.
HEX
color: #ff0000;
color: #333333;
color: #fff; /* 단축형 */#RRGGBB. 실무에서 가장 많이 사용.
RGB / RGBA
color: rgb(255, 0, 0);
color: rgba(0, 0, 0, 0.5); /* 투명도 0~1 */
background-color: rgba(52, 152, 219, 0.2);HSL
color: hsl(0, 100%, 50%); /* 빨강 */
color: hsl(210, 50%, 50%); /* 파랑 계열 */hsl(색조, 채도, 명도). 색상 조정이 직관적이라 디자이너가 선호.
2. Google Fonts
<!-- HTML <head>에 추가 -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;700&display=swap"
rel="stylesheet">body {
font-family: 'Noto Sans KR', sans-serif;
}Noto Sans KR은 한국어 웹폰트로 가장 널리 사용됩니다.
3. 폰트 속성
p {
font-family: 'Noto Sans KR', sans-serif;
font-size: 16px;
font-weight: 400; /* normal=400, bold=700 */
font-style: italic;
line-height: 1.6; /* 단위 없는 배수 권장 */
letter-spacing: 0.5px;
word-spacing: 2px;
}4. 텍스트 꾸미기
p {
text-decoration: underline; /* line-through, none */
text-transform: uppercase; /* lowercase, capitalize */
text-align: left; /* center, right, justify */
}5. CSS 변수 (Custom Properties)
:root {
--color-primary: #3498db;
--color-secondary: #2ecc71;
--color-background: #f5f5f5;
--font-size-base: 16px;
}
h1 {
color: var(--color-primary);
font-size: var(--font-size-base);
}
button {
background-color: var(--color-secondary);
}- 색상을 한 곳에서 관리 → 변경이 쉬워짐
- 브랜드 컬러·디자인 토큰을 체계적으로 관리
박스 모델
CSS의 모든 요소가 박스 형태로 렌더링되는 원리(content/padding/border/margin), box-sizing의 차이, display 속성과 margin 겹침 현상을 익힙니다.
1. 박스 모델 4단계
┌─────────────────────────────────┐
│ margin (바깥 여백) │
│ ┌───────────────────────────┐ │
│ │ border (테두리) │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ padding (안쪽 여백) │ │ │
│ │ │ ┌───────────────┐ │ │ │
│ │ │ │ content (내용) │ │ │ │
│ │ │ └───────────────┘ │ │ │
│ │ └─────────────────────┘ │ │
│ └───────────────────────────┘ │
└─────────────────────────────────┘div {
width: 200px;
height: 100px;
padding: 10px 20px; /* 상하 10, 좌우 20 */
border: 2px solid #333;
border-radius: 8px;
margin: 20px auto; /* 상하 20, 좌우 auto(중앙) */
}2. box-sizing
/* content-box (기본): width = content만 */
.default {
width: 200px;
padding: 20px;
border: 2px solid;
/* 실제 크기 = 200 + 40 + 4 = 244px */
}
/* border-box: width = content + padding + border */
.better {
width: 200px;
padding: 20px;
border: 2px solid;
box-sizing: border-box;
/* 실제 크기 = 항상 200px */
}실무에서는 * { box-sizing: border-box; }로 전체에 적용하는 게 표준입니다.
3. width / max-width
.container {
width: 100%;
max-width: 1200px; /* 반응형 필수 */
height: auto;
min-height: 100vh;
}4. overflow
.box {
overflow: visible; /* 기본: 밖으로 튀어나옴 */
overflow: hidden; /* 잘라냄 */
overflow: scroll; /* 항상 스크롤바 */
overflow: auto; /* 필요할 때만 (권장) */
}5. display
display: block; /* div, p, h1~h6 기본 */
display: inline; /* span, a, strong 기본 */
display: inline-block; /* img, button 기본 */
display: none; /* 화면에서 완전히 제거 */6. margin 겹침 현상
.first { margin-bottom: 30px; }
.second { margin-top: 20px; }
/* 실제 간격: 30px (50px가 아님!) */세로 방향 인접 두 요소의 margin은 더해지지 않고 큰 쪽만 적용됩니다. padding 사용 / 부모에 overflow:hidden / Flexbox·Grid 사용 등으로 회피.
배경 & 테두리
background-color/image/gradient, border와 border-radius, box-shadow와 그림자, opacity·cursor, 부드러운 전환을 위한 transition을 익혀 버튼·카드 UI를 만듭니다.
1. 배경
배경색
.box {
background-color: #3498db;
background-color: rgba(52, 152, 219, 0.5);
}배경 이미지
.hero {
background-image: url('image.jpg');
background-size: cover; /* 꽉 채움 */
background-size: contain; /* 전체 보임 */
background-position: center;
background-repeat: no-repeat;
}그라데이션
.gradient {
background: linear-gradient(to right, #667eea, #764ba2);
background: linear-gradient(135deg, #f093fb, #f5576c);
background: radial-gradient(circle, #f093fb, #f5576c);
}단축 속성
background: url('image.jpg') center/cover no-repeat;2. 테두리
.box {
border: 2px solid #333; /* 두께 스타일 색상 */
border-style: solid; /* dashed, dotted, double */
border-top: 3px dashed red;
border-radius: 8px; /* 네 모서리 동일 */
border-radius: 50%; /* 원 (정사각형 일 때) */
border-radius: 10px 0 10px 0; /* 모서리별 */
}3. 그림자 (box-shadow)
.card {
/* offset-x | offset-y | blur | color */
box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.2);
/* spread 추가 */
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
/* 안쪽 그림자 */
box-shadow: inset 0 2px 6px rgba(0, 0, 0, 0.15);
/* 여러 그림자 */
box-shadow: 0 2px 4px rgba(0,0,0,0.1), 0 8px 16px rgba(0,0,0,0.1);
}4. outline
border와 달리 요소 크기에 영향을 주지 않습니다. 주로 포커스 표시(접근성)에 활용.
button:focus {
outline: 3px solid #3498db;
outline-offset: 2px;
}5. opacity & cursor
.dim { opacity: 0.5; }
.clickable { cursor: pointer; } /* not-allowed, crosshair */6. transition
.button {
background-color: #3498db;
/* property | duration | timing-function | delay */
transition: background-color 0.3s ease;
transition: all 0.3s ease;
transition: transform 0.2s ease-out, box-shadow 0.2s ease;
}
.button:hover {
background-color: #2980b9;
}- ease — 천천히 시작/끝 (기본)
- linear — 일정 속도
- ease-in / ease-out / ease-in-out
댓글 0
아직 댓글이 없습니다. 첫 댓글을 남겨 주세요.
댓글은 회원만 쓸 수 있습니다.
광고·욕설·비방·개인정보·불법 내용이 담긴 댓글은 숨기거나 지웁니다. 댓글은 닉네임과 함께 공개됩니다. 개인정보처리방침