CSS 기초

기술노트
Admin (토론 | 기여)님의 2025년 4월 21일 (월) 14:51 판 (컴퓨터 과학 용어 정리 - CSS 기초 추가)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

CSS 기초

CSS(Cascading Style Sheets)는 웹 페이지의 디자인과 레이아웃을 담당하는 스타일 시트 언어입니다. HTML이 콘텐츠의 구조를 정의한다면, CSS는 그 구조의 시각적 표현을 담당합니다.

CSS 문법 및 선택자

기본 문법

CSS는 선택자(selector)와 선언 블록(declaration block)으로 구성됩니다:

```css 선택자 {

 속성: 값;
 속성: 값;

} ```

예시: ```css h1 {

 color: blue;
 font-size: 24px;

} ```

CSS 적용 방법

CSS를 HTML에 적용하는 세 가지 방법이 있습니다:

1. 인라인 스타일: HTML 요소의 style 속성을 사용 ```html

텍스트

```

2. 내부 스타일 시트: HTML 문서의 <head> 섹션 내 <style> 태그 사용 ```html <head>

 <style>
   p { color: red; font-size: 16px; }
 </style>

</head> ```

3. 외부 스타일 시트: 별도의 CSS 파일을 생성하고 <link> 태그로 연결 (권장) ```html <head>

 <link rel="stylesheet" href="styles.css">

</head> ```

선택자 유형

선택자 유형 예시 설명
요소 선택자 p { } 특정 HTML 태그를 선택
클래스 선택자 .example { } class 속성이 "example"인 모든 요소를 선택
ID 선택자 #unique { } id 속성이 "unique"인 요소를 선택
속성 선택자 [type="text"] { } 특정 속성 값을 가진 요소를 선택
자손 선택자 div p { } div 내의 모든 p 요소를 선택
자식 선택자 div > p { } div의 직계 자식인 p 요소만 선택
인접 형제 선택자 h1 + p { } h1 바로 다음에 오는 p 요소를 선택
가상 클래스 a:hover { } 특정 상태의 요소를 선택 (마우스가 링크 위에 있을 때)
가상 요소 p::first-line { } 요소의 특정 부분을 선택 (단락의 첫 번째 줄)

선택자 우선순위

CSS에서 충돌하는 스타일이 있을 때 적용되는 우선순위는 다음과 같습니다:

  1. 인라인 스타일 (style 속성)
  2. ID 선택자 (#example)
  3. 클래스 선택자 (.example), 속성 선택자 ([type="text"]), 가상 클래스 (:hover)
  4. 요소 선택자 (p), 가상 요소 (::first-line)

!important 선언은 모든 우선순위를 무시하므로 신중하게 사용해야 합니다.

박스 모델과 레이아웃

CSS 박스 모델

모든 HTML 요소는 박스로 간주되며, 다음 영역으로 구성됩니다:

  • 콘텐츠(Content): 텍스트나 이미지가 표시되는 영역
  • 패딩(Padding): 콘텐츠와 테두리 사이의 공간
  • 테두리(Border): 패딩 주위를 감싸는 선
  • 마진(Margin): 테두리 바깥쪽의 공간

```css div {

 width: 300px;
 padding: 20px;
 border: 5px solid black;
 margin: 30px;

} ```

box-sizing 속성은 요소의 전체 크기를 계산하는 방법을 결정합니다:

  • content-box: 기본값, width/height는 콘텐츠 영역만 포함
  • border-box: width/height에 패딩과 테두리까지 포함 (더 직관적)

```css

  • {
 box-sizing: border-box;

} ```

디스플레이와 포지셔닝

display 속성

display 속성은 요소가 레이아웃에서 어떻게 처리되는지 정의합니다:

설명
block 항상 새 줄에서 시작하며, 가능한 모든 너비를 차지 (div, p, h1)
inline 줄 바꿈 없이 필요한 만큼의 너비만 차지 (span, a)
inline-block inline처럼 한 줄에 표시되지만 block처럼 width/height 속성 적용 가능
none 요소를 화면에서 완전히 제거
flex 유연한 레이아웃 구성 가능
grid 격자 기반 레이아웃 구성 가능

position 속성

position 속성은 요소의 배치 방법을 결정합니다:

설명
static 기본값, 일반적인 문서 흐름에 따라 배치
relative 일반 위치를 기준으로 상대적 오프셋 적용
absolute 가장 가까운 position이 static이 아닌 조상 요소를 기준으로 배치
fixed 브라우저 창을 기준으로 고정 배치 (스크롤해도 위치 유지)
sticky 스크롤 위치에 따라 relative와 fixed 사이를 전환

반응형 디자인과 미디어 쿼리

반응형 웹 디자인은 다양한 화면 크기와 장치에 웹사이트가 적절하게 대응하도록 하는 접근 방식입니다.

미디어 쿼리

미디어 쿼리는 장치의 특성(주로 화면 크기)에 따라 다른 스타일을 적용할 수 있게 합니다:

```css /* 모바일 우선 접근법 */ /* 기본 스타일: 모바일용 */

/* 태블릿 스타일 */ @media (min-width: 768px) {

 .container {
   width: 750px;
 }

}

/* 데스크톱 스타일 */ @media (min-width: 1024px) {

 .container {
   width: 970px;
 }

} ```

뷰포트 설정

반응형 디자인을 위해 HTML 문서에 뷰포트 메타 태그를 추가해야 합니다:

```html <meta name="viewport" content="width=device-width, initial-scale=1.0"> ```

Flexbox와 Grid

Flexbox

Flexbox는 일차원(행 또는 열) 레이아웃을 위한 모던 CSS 기술입니다.

```css .container {

 display: flex;
 flex-direction: row; /* row, column, row-reverse, column-reverse */
 justify-content: space-between; /* 주축 정렬: flex-start, flex-end, center, space-around, space-between */
 align-items: center; /* 교차축 정렬: flex-start, flex-end, center, stretch, baseline */
 flex-wrap: wrap; /* 여러 줄에 걸쳐 표시할지 여부: nowrap, wrap, wrap-reverse */

}

.item {

 flex: 1; /* flex-grow, flex-shrink, flex-basis의 축약형 */
 order: 2; /* 요소의 순서 지정 */

} ```

CSS Grid

Grid는 이차원(행과 열) 레이아웃을 위한 강력한 CSS 시스템입니다.

```css .container {

 display: grid;
 grid-template-columns: 1fr 2fr 1fr; /* 열 크기 지정 */
 grid-template-rows: 100px auto; /* 행 크기 지정 */
 gap: 20px; /* 격자 사이 간격 */

}

.item {

 grid-column: 1 / 3; /* 열 시작/종료 위치 */
 grid-row: 1 / 2; /* 행 시작/종료 위치 */

} ```

CSS 변수

CSS 변수(사용자 정의 속성)는 재사용 가능한 값을 저장합니다:

```css

root {
 --primary-color: #3498db;
 --secondary-color: #2ecc71;
 --font-size-base: 16px;

}

h1 {

 color: var(--primary-color);
 font-size: calc(var(--font-size-base) * 2);

}

button {

 background-color: var(--secondary-color);
 border: 1px solid var(--primary-color);

} ```

모범 사례

CSS 구조화

  • 논리적인 섹션별로 코드 구성 (레이아웃, 타이포그래피, 컬러 등)
  • 일관된 네이밍 규칙 사용 (BEM, SMACSS, OOCSS)
  • 주석을 통한 코드 문서화

성능 최적화

  • 불필요한 선택자 및 복잡한 선택자 피하기
  • 속성 단축형 사용 (margin, padding, border 등)
  • CSS 스프라이트, 최소화 활용

유지보수성

  • CSS 변수를 활용한 테마 관리
  • 미디어 쿼리의 체계적 관리
  • 스타일 재사용성 고려

학습 자료

다음 학습 단계