HTML/CSS 입문 강의록

#html#css

Part 1. HTML — 웹 페이지의 구조 잡기

1-1. 텍스트 태그

제목 / 단락

태그설명
h1 ~ h6제목 (숫자가 클수록 작아짐)
p문단
br줄바꿈
hr수평선 구분선
pre공백·줄바꿈을 그대로 출력

인라인 강조

태그설명
b / strong굵게 / 의미 있는 강조
i / em기울임 / 의미 있는 강조
mark형광펜 효과
del삭제 표시

strong, em은 단순 시각 효과가 아닌 의미(시맨틱) 강조다.


1-2. 목록

<!-- 순서 없는 목록 --> <ul> <li>항목</li> </ul> <!-- 순서 있는 목록 --> <ol> <li>첫 번째</li> </ol>

1-3. 표 (Table)

<table> <caption>표 제목</caption> <thead> <tr> <th>헤더</th> </tr> </thead> <tbody> <tr> <td rowspan="2">세로 2칸 병합</td> <td colspan="2">가로 2칸 병합</td> </tr> </tbody> </table>
  • rowspan — 아래 행과 합치기
  • colspan — 오른쪽 열과 합치기

1-4. 링크

<!-- 외부 사이트 --> <a href="https://google.com">구글</a> <!-- 새 탭으로 열기 --> <a href="https://naver.com" target="_blank">네이버</a> <!-- 페이지 내부 이동 --> <a href="#section-id">바로가기</a>

1-5. 미디어

<img src="image.png" alt="이미지 설명" width="300"> <!-- 이미지 + 설명을 의미적으로 묶기 --> <figure> <img src="photo.png" alt="사진"> <figcaption>사진 설명</figcaption> </figure> <audio src="audio.mp3" controls></audio> <video src="video.mp4" controls></video>

alt 속성은 이미지 로드 실패 시 대체 텍스트이자 스크린리더용 설명이므로 필수다.


1-6. 폼 (Form)

<form action="/submit" method="post"> <fieldset> <legend>그룹 제목</legend> <!-- label for ↔ input id 연결 → 클릭 편의성 향상 --> <label for="user-id">아이디</label> <input id="user-id" name="userId" type="text" placeholder="입력"> <input type="password" name="pw"> <input type="radio" name="group" value="a"> <!-- 하나만 선택 --> <input type="checkbox" name="hobby" value="html"> <!-- 복수 선택 --> <textarea name="memo" rows="5"></textarea> <button type="submit">제출</button> <button type="reset">초기화</button> </fieldset> </form>
  • action — 데이터를 보낼 서버 주소
  • name — 서버에서 데이터를 받을 때 쓰는 키값

1-7. 레이아웃 태그

범용 컨테이너

태그특성설명
div블록한 줄 전체 차지
span인라인내용 크기만큼만 차지

시맨틱 태그div 대신 의미 있는 이름을 붙인 태그

<header>머리말</header> <main> <section>소개</section> <section>기술 스택</section> </main> <footer>저작권</footer>

검색엔진(SEO)·스크린리더에 구조를 명확히 전달한다.


Part 2. CSS — 디자인 입히기

CSS 적용 방식 3가지

방식예시비고
인라인<p style="color:red">우선순위 최고, 유지보수 어려움
내부 스타일시트<style> 태그 내부해당 파일에만 적용
외부 파일<link rel="stylesheet" href="style.css">실무 기본

2-1. 선택자와 우선순위

/* 태그 선택자 */ h2 { color: red; } /* 클래스 선택자 (.): 여러 요소에 별명 */ .highlight { background: yellow; } /* 아이디 선택자 (#): 페이지에서 유일한 요소 */ #main-title { font-size: 2rem; } /* 후손 선택자 (띄어쓰기): 하위 모든 요소 */ #list li { font-weight: bold; } /* 자손 선택자 (>): 직계 자식만 */ ul > li:last-child { color: green; }

우선순위: 태그 < .class < #id < 인라인 style


2-2. 박스 모델

모든 HTML 요소는 사각형 박스 구조를 가진다.

[ margin ]
  [ border ]
    [ padding ]
      [ content ]
.box { width: 300px; height: 150px; padding: 20px; /* 안쪽 여백 */ border: 2px solid green; /* 테두리 */ margin: 30px; /* 바깥 여백 */ border-radius: 15px; /* 모서리 둥글게 */ box-shadow: 5px 5px 30px rgba(0,0,0,0.4); /* 그림자 */ background-color: bisque; }

2-3. 텍스트 스타일

body { font-family: "IBM Plex Sans KR", sans-serif; font-size: 16px; /* rem 단위 권장: 1rem = 기본 16px */ font-weight: 400; line-height: 1.8; color: #333; text-align: left; }

Google Fonts는 <link> 태그로 불러온 뒤 font-family에 적용한다.


2-4. 레이아웃

Flexbox — 1차원 (행 또는 열)

.flex-container { display: flex; justify-content: space-around; /* 주축 (가로) 정렬 */ align-items: center; /* 교차축 (세로) 정렬 */ }

Grid — 2차원 (행 + 열 동시)

.grid-container { display: grid; grid-template-columns: 1fr 1fr 2fr; /* 1:1:2 비율 */ grid-template-rows: 2fr 1fr; gap: 10px; } /* 특정 아이템이 여러 칸 차지 */ .item:first-child { grid-column: 1 / 3; /* 1번~3번 열 경계까지 */ }

Position — 절대 위치 지정

.container { position: relative; /* 기준점 설정 */ } .child { position: absolute; /* 기준점으로부터 좌표 지정 */ top: 50px; left: 50px; }

2-5. 인터랙션

.button { transition: all 0.3s ease; /* 변화를 부드럽게 */ } /* 마우스 올렸을 때 */ .button:hover { background-color: teal; transform: translateY(-10px); /* 위로 10px 이동 */ box-shadow: 0 5px 15px rgba(0,0,0,0.4); } /* 클릭 중일 때 */ .button:active { transform: translateY(-2px); }
  • transition — 상태 변화를 애니메이션으로 이어줌
  • transform — 요소의 위치·크기·회전 변형 (레이아웃에 영향 없음)
  • :hover / :active — 가상 클래스 선택자

핵심 요약

구분역할
HTML웹 페이지의 구조내용
CSS웹 페이지의 스타일레이아웃
시맨틱 태그의미 있는 구조 → SEO·접근성 향상
박스 모델모든 요소는 margin·border·padding·content 구조
Flexbox1차원 정렬의 기본
Grid2차원 복잡 레이아웃
transition + :hover인터랙션의 기본 패턴