CSS(Cascading Style Sheets)는 웹 페이지의 시각적 표현(디자인)을 정의하는 언어입니다. HTML이 웹 페이지의 골격(구조)을 담당한다면, CSS는 레이아웃, 색상, 폰트 등 스타일을 담당하여 페이지를 아름답고 편리하게 만듭니다.
CSS 없는 웹 페이지는 마치 벽돌만 쌓아올린 건물과 같습니다. 기능은 하지만 보기에 좋지 않고 사용하기도 불편합니다. CSS가 있어야 현대적이고 사용자 친화적인 웹사이트를 만들 수 있습니다.
HTML 문서에 CSS를 적용하는 방법은 크게 세 가지가 있습니다.
빨간색 굵은 글씨
<head>
<style>
.highlight {
color: blue;
background-color: yellow;
padding: 5px;
border-radius: 3px;
}
#main-title {
font-size: 24px;
text-align: center;
color: #333;
}
</style>
</head>
<body>
<h1 id="main-title">중앙 정렬된 제목</h1>
<p class="highlight">하이라이트된 문단</p>
</body>
카드 내용
CSS 코드의 기본 구조는 다음과 같습니다:
선택자(selector) {
속성(property): 값(value);
속성(property): 값(value);
/* 주석 */
}
/* 실제 예시 */
h1 {
color: blue; /* 글자색을 파란색으로 */
font-size: 24px; /* 글자 크기를 24픽셀로 */
text-align: center; /* 텍스트를 중앙 정렬 */
margin-bottom: 20px; /* 아래쪽 여백을 20픽셀로 */
}
선택자는 CSS의 핵심으로, 어떤 HTML 요소에 스타일을 적용할 것인지 결정합니다.
p {
color: blue;
}
모든 <p> 태그에 적용
.highlight {
background: yellow;
}
class="highlight" 요소에 적용
#main-content {
padding: 20px;
}
id="main-content" 요소에 적용
* {
margin: 0;
padding: 0;
}
모든 요소에 적용 (초기화에 주로 사용)
h1, h2, h3 {
color: navy;
}
여러 태그에 동시 적용
div p {
font-style: italic;
}
div 내부의 모든 p 요소에 적용
직계 자식 p (파란색)
손자 p (빨간색)
이★ 것은 가상 요소 예시입니다. ✓
기본 파란색 텍스트
클래스로 빨간색 텍스트
ID로 초록색 텍스트 (가장 높은 우선순위)
인라인 스타일로 보라색 텍스트 (최고 우선순위)
인라인 스타일 (1000) > ID (100) > 클래스/속성/가상클래스 (10) > 태그 (1)
!important를 사용하면 최고 우선순위 (남용 금지)웹 페이지의 모든 요소는 하나의 "박스"로 취급됩니다. 이 박스는 네 개의 영역으로 구성됩니다.
전체 너비 = width + padding-left + padding-right + border-left + border-right
전체 높이 = height + padding-top + padding-bottom + border-top + border-bottom
예시: width 200px + padding 20px + border 3px = 실제 너비 246px
대부분의 개발자들은 box-sizing: border-box를 선호합니다. 지정한 width/height가 곧 실제 요소의 크기가 되어 계산이 편리하기 때문입니다.
/* 모든 요소에 적용 */
* {
box-sizing: border-box;
}
CSS에서 요소들을 배치하는 방법은 여러 가지가 있습니다. 현대 웹 개발에서는 주로 Flexbox와 Grid를 사용합니다.
Flexbox는 요소들을 한 방향(가로 또는 세로)으로 유연하게 배치하는 레이아웃 방법입니다.
Grid는 가로와 세로를 동시에 제어할 수 있는 강력한 2차원 레이아웃 시스템입니다.
.grid-layout {
display: grid;
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
gap: 10px;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }
CSS에서 색상을 지정하는 다양한 방법들이 있습니다.
/* 색상 지정 방법 */
.color-examples {
color: red; /* 색상 이름 */
color: #ff0000; /* 16진수 */
color: rgb(255, 0, 0); /* RGB */
color: rgba(255, 0, 0, 0.5); /* RGBA (투명도 포함) */
color: hsl(0, 100%, 50%); /* HSL */
color: hsla(0, 100%, 50%, 0.5); /* HSLA */
}
다양한 크기의 기기(모바일, 태블릿, 데스크톱)에 대응하기 위해 미디어 쿼리(Media Queries)를 사용합니다.
/* 기본 스타일 */
.responsive-box {
background: blue;
padding: 20px;
color: white;
}
/* 태블릿 (768px 이하) */
@media screen and (max-width: 768px) {
.responsive-box {
background: green;
padding: 15px;
}
}
/* 모바일 (480px 이하) */
@media screen and (max-width: 480px) {
.responsive-box {
background: red;
padding: 10px;
font-size: 14px;
}
}
| 기기 | 화면 크기 | 미디어 쿼리 |
|---|---|---|
| 모바일 | ~ 480px | @media (max-width: 480px) |
| 태블릿 | 481px ~ 768px | @media (max-width: 768px) |
| 데스크톱 | 769px ~ | @media (min-width: 769px) |
| 대형 화면 | 1200px ~ | @media (min-width: 1200px) |
CSS를 사용해 요소에 동적인 효과를 줄 수 있습니다.
박스에 마우스를 올려보세요!
.animation-properties {
animation-name: bounce; /* 키프레임 이름 */
animation-duration: 2s; /* 지속 시간 */
animation-timing-function: ease; /* 타이밍 함수 */
animation-delay: 0.5s; /* 지연 시간 */
animation-iteration-count: infinite; /* 반복 횟수 */
animation-direction: alternate; /* 방향 */
animation-fill-mode: forwards; /* 채움 모드 */
/* 단축 속성 */
animation: bounce 2s ease-in-out 0.5s infinite alternate forwards;
}
/* Block__Element--Modifier */
/* Block (블록) */
.card { }
/* Element (요소) */
.card__header { }
.card__body { }
.card__footer { }
/* Modifier (수정자) */
.card--large { }
.card--featured { }
.card__header--highlighted { }
:root {
--primary-color: #007bff;
--secondary-color: #6c757d;
--font-size-base: 16px;
--border-radius: 8px;
--shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.button {
background: var(--primary-color);
font-size: var(--font-size-base);
border-radius: var(--border-radius);
box-shadow: var(--shadow);
}
다음 강의에서는 JavaScript 기초에 대해 배울 예정입니다. HTML 구조에 CSS 스타일을 입힌 페이지에 동적인 기능을 추가하는 방법을 다룰 것입니다.