HTML
웹페이지의 뼈대 — 설치부터 자기소개 페이지까지
CLICK TO OPEN
웹페이지의 뼈대 — 설치부터 자기소개 페이지까지
CLICK TO OPEN
환경설정 · 태그 · 제목 · 이미지 · 목록 · 시맨틱
큰 그림
큰 그림 — 웹은 3가지로 만들어짐
웹페이지 하나는 HTML · CSS · JS 세 가지가 모여 만들어짐 — 레고로 집 만들기에 비유
레고 집 비유
• HTML — 집에 무엇이 있는지 (글·사진·버튼), 집의 뼈대
• CSS — 그게 어떻게 보이는지 (색·크기·자리), 집의 색칠·꾸미기
• JS — 그게 어떻게 움직이는지 (클릭·반응), 집의 전기·스위치
tip — 이 페이지는 HTML(뼈대) 부터 배움 — CSS·JS는 뒤에서 차근차근
개발환경 ①
개발환경 ① 작업 폴더 만들기
코드는 VSCode 에서 작성 — 메모장의 똑똑한 버전, 글자에 색이 입혀져 코드가 잘 보임
내 작업 폴더 열기
① 바탕화면에 새 폴더 → 이름 01_HTML
② VSCode 메뉴 File → Open Folder → 01_HTML 선택
③ 안내 창 뜨면 "Yes, I trust the authors" 클릭
개발환경 ②
개발환경 ② 첫 페이지 화면에 띄우기
코드를 저장하면 화면이 자동으로 바뀌게 해주는 도구 Live Server 하나만 설치 — 저장할 때마다 새로고침 안 해도 됨
Live Server 설치 (1번만)
① 왼쪽 줄에서 네모 4개 아이콘 클릭
② 검색창에 Live Server 입력 후 Install
첫 파일 만들고 띄우기
새 파일 index.html 만들기 → 아래 코드 붙여넣기 → 저장(Ctrl+S) → 오른쪽 아래 Go Live 클릭
브라우저가 열리고 글자가 보이면 성공 — 내가 쓴 글을 브라우저가 읽어 화면에 그려준 것
잘 안 되면
• Go Live 안 보임 → Live Server 설치됐는지 확인
• 한글이 ??? 로 깨짐 → <meta charset="UTF-8"> 있는지 확인
주석·단축키
주석과 편리한 단축키 (VSCode)
주석 = 화면에 안 나오는 메모 — 브라우저가 무시하고 안 그림, 나중의 나·팀에게 설명을 남기거나 코드를 잠깐 꺼둘 때 사용
주석 써보기
<!-- 로 열고 --> 로 닫는 사이의 글자는 화면에 안 그려짐 — 코드 한 줄을 지우지 않고 잠깐 끌 때도 편함
자주 쓰는 단축키 (Windows 기준, Mac은 Ctrl→Cmd)
• 주석 켜고 끄기 Ctrl + / — 고른 줄을 주석으로 만들거나 풀기
• 저장 Ctrl + S
• 줄 복제 Shift + Alt + ↓
• 전체 선택 Ctrl + A
• 찾기 Ctrl + F
태그 + 뼈대
태그(tag)란? + 웹페이지의 뼈대
HTML은 글마다 태그라는 이름표를 붙임 — 태그 = "이건 큰제목이야"처럼 무엇인지 알려 주는 이름표
태그는 둘이 한 쌍
<h1>안녕</h1> 을 뜯어보면
• <h1> — 여는 이름표 "여기부터 큰제목"
• 안녕 — 가운데 들어가는 내용
• </h1> — 닫는 이름표 (/ = "여기서 끝")
→ 이름표는 거의 다 열기 + 닫기 한 쌍, 닫기를 빠뜨리면 화면이 깨짐
→ 이 셋(여는 태그 + 내용 + 닫는 태그)을 합쳐 요소(element) 라 부름
tip — 태그 이름은 대소문자 안 가림(<H1> = <h1>) — 코드 속 <!-- 메모 --> 주석은 화면에 안 보임 (자세히는 STEP 04 참고)
웹페이지 뼈대 한 줄씩
핵심 — 눈에 보이는 건 전부 <body> 안에, <head>는 무대 뒤 준비 공간
제목·문단
제목과 문단 (h1~h6, p)
책 목차처럼 제목 크기 6단계 — <h1>이 제일 크고 <h6>이 제일 작음(숫자 커질수록 글씨 작아짐) — <p> = 글 한 덩어리(문단)
예제
신문에 비유하면 <h1>은 1면 헤드라인, <p>는 본문
강조·중첩
강조와 태그 중첩 (strong, nesting)
강조 + 태그 중첩(nesting)
선물 상자 안에 작은 상자 넣듯, 태그 안에 태그 넣기 = 중첩 — <strong>은 글자를 굵게 강조
규칙 — 먼저 연 태그를 나중에 닫음(바깥 상자를 마지막에 닫듯), 순서 엇갈리면 화면 깨짐 (<p><strong>…</p></strong> X)
코드에 꺾쇠 글자 쓰기 — 특수문자
< > &는 HTML이 명령어로 착각함 — 글자 그대로 보이려면 약속된 기호(엔티티)로 바꿔 적음
• < → <
• > → >
• & → &
이미지
이미지 (img)
<img> = 화면에 사진 붙이기 — src(사진 주소)·alt(안 뜰 때 대신 보일 글자) 속성과 함께 씀 (링크는 다음 STEP 09)
속성(attribute) — 태그에 정보 더하기
태그에 추가 정보를 적는 것 = 속성 — 이름="값" 꼴
• 태그 이름 뒤 한 칸 띄고
• 이름과 값 사이 =
• 값은 따옴표로 감쌈 — 예) alt="내 사진"
이미지
src = 사진 주소, alt = 사진이 안 뜰 때 대신 보일 글자
→ <img>는 속이 빈 상자처럼 넣을 내용이 없어 닫는 태그도 안 쓰는 빈 요소(void), 끝을 />로 마감 — br·hr·meta도 빈 요소(/는 생략 가능)
링크
링크 (a, href)
링크
href 안 주소로 이동 — https://까지 적어야 동작
목록·시맨틱
목록·시맨틱 태그 (ul·li, header·main·footer)
<ul><li> = 점 찍힌 목록 — <header><main><footer> = 어느 부분인지 뜻이 드러나는 이름표 상자(시맨틱 = 의미가 담긴 구역 나누기)
목록 + 시맨틱 구역
header · main · footer 언제 씀?
신문 한 면처럼 페이지를 위→가운데→아래 세 칸으로 나누는 이름표 — <div>로도 되지만, 뜻이 드러나는 이름을 쓰면 사람·검색엔진·화면낭독기가 구조를 바로 알아봄
• <header> — 페이지 맨 위 머리말 (로고·제목·메뉴) — 보통 1번
• <main> — 그 페이지의 핵심 내용 한 덩어리 (메뉴·푸터 뺀 진짜 본문) — 한 페이지에 딱 하나
• <footer> — 페이지 맨 아래 꼬리말 (저작권·연락처·약관)
tip — 외울 거 = "위는 header, 본문은 main, 아래는 footer" — 어디에 둘지 모르면 일단 main 안에
참고 — 블록 요소(p·h1·ul·header)는 벽돌처럼 한 줄을 통째로 차지(위→아래로 쌓임), 인라인 요소(a·strong·em)는 글자 사이에 끼어듦
자기소개(1차)
합치기 — 자기소개 페이지 (1차)
합치기 — 자기소개 페이지 (1차)
저장하면 글·사진·목록·링크가 담긴 페이지 한 장 완성 — 아직 꾸미기 전이라 밋밋함
번호 목록
번호 목록 (ol, li)
STEP 10의 <ul>은 점(•) 목록 — 순서가 중요하면 번호 목록 <ol> 사용 (요리 순서·등수처럼)
번호 목록
<ol>로 바꾸면 1·2·3 번호가 자동으로 붙음 — 안에 들어가는 <li>(목록 항목)는 ul과 똑같음
줄·선
줄바꿈과 가로선 (br, hr)
줄바꿈과 가로선
<br> = 한 문단 안에서 줄 바꾸기, <hr> = 내용을 나누는 가로 줄 — 둘 다 닫는 태그 없는 빈 요소
표
표 만들기 (table, tr, th, td)
시간표·성적표처럼 칸이 나뉜 표를 만드는 태그 — 가로 줄을 위에서 아래로 차곡차곡 쌓아 만듦
이름표 4개
• <table> — 표 전체를 담는 상자
• <tr> — 가로 한 줄(row)
• <th> — 제목 칸(굵게·가운데 정렬)
• <td> — 보통 내용 칸
시간표 예제
border="1" = 표에 선 그리기(없으면 칸 구분이 안 보임) — 한 <tr> 안에 칸(th·td)을 나란히 넣으면 가로로 줄지어 배치됨
폼·입력
입력 받기 — 폼 (form, input, button)
회원가입·검색창처럼 사용자가 글자를 입력하는 칸을 만드는 태그 — 입력칸들을 <form> 상자로 묶음
이름표 살펴보기
• <form> — 입력칸을 담는 묶음 상자
• <label> — 입력칸 옆 설명 글자
• <input> — 글자를 쓰는 빈 칸(빈 요소)
• <button> — 누르는 버튼
간단한 입력 폼
type="text" = 글자 칸, type="number" = 숫자 칸 — placeholder = 칸이 비었을 때 보이는 흐린 안내 글자
색 구분 — 코드에서 폼 태그를 색으로 빠르게 찾기
• 보라 = 묶음 상자 (form)
• 노랑 = 설명 글자 (label)
• 하늘색 = 입력 칸 (input)
• 주황 = 버튼 (button)
영상
영상 박기 (iframe·유튜브)
<iframe> = 내 페이지 안에 다른 페이지를 작은 네모 창으로 끼워 넣기 — 유튜브 영상·구글 지도를 그대로 박을 때 사용
유튜브 영상 넣기
width·height = 창 크기(가로·세로), src = 보여줄 영상 주소
→ 유튜브는 일반 주소가 아닌 embed 주소(youtube.com/embed/...)를 넣어야 화면에 떠
팁 — 다른 영상은 유튜브에서 공유 → 퍼가기(embed) 누르면 <iframe> 코드를 그대로 줌
지도
지도 박기 (iframe·구글)
구글 지도 넣기
지도도 영상과 똑같이 <iframe>으로 끼워 넣음 — 주소(src)만 지도 embed 주소로 바꾸면 끝
q=서울시청 = 보여줄 장소(원하는 곳 이름·주소로 바꾸기)output=embed = 페이지 안에 박는 모드
주소에서 조건 두 개를 잇는 &는 HTML이 특수문자로 봐서, 정석은 &로 적음 (STEP 07 엔티티 참고 — 브라우저가 알아서 고쳐 주지만 제대로 적는 습관)
→ 정확한 지도는 구글 지도 → 공유 → 지도 퍼가기 누르면 <iframe> 코드를 그대로 줌
공식 코드 받기 (정확·추천)
위 q=... 방식은 손으로 쓰기 쉬움 — 위치·확대까지 정확히 박으려면 구글이 만들어 주는 코드를 받아 붙이기
google.com/maps 접속<iframe src="…/maps/embed?pb=…"></iframe> 통째로 줌<body> 안에 그대로 붙여넣기받은 코드는 maps/embed?pb=… 꼴의 긴 자동 주소 — 위치·확대 비율이 정확히 들어가 있고, & 처리도 구글이 알아서 해 줌
받은 코드 예시 (고려대학교)
pb=… 부분은 위치·확대값이 담긴 암호 같은 주소 — 손대지 말고 통째로 두기, 다른 곳을 넣고 싶으면 구글 지도에서 새로 복사
뒤에 붙은 부가 속성 (몰라도 됨)
구글이 자동으로 붙여 주는 옵션 — 외울 필요 없이 "이런 게 있구나" 정도만
• width·height — 창 크기(가로·세로), STEP 16 영상에서 배움
• style="border:0;" — 지도 둘레 선 없애기 (style은 CSS 영역, 다음 과목 CSS에서 자세히)
• allowfullscreen — 전체화면 버튼 켜기
• loading="lazy" — 지도 로딩 미루기 (속도 ↑)
• referrerpolicy — 어디서 왔는지 정보를 얼마나 넘길지 정하는 보안 옵션
tip — 이 줄들은 구글 코드에 원래 들어 있음 — 지우지 말고 그대로 두면 됨, 의미는 나중에 CSS·심화에서 자연스럽게 익힘
class
class — 여러 개가 나눠 쓰는 이름표
태그에 이름표를 달아 두면 나중에 CSS·JavaScript가 그 요소를 콕 집어 꾸미거나 움직임 — 다음 단계 CSS로 가는 다리
class = 여러 개가 같이 쓰는 이름표(반 이름표처럼) — 같은 값을 여러 번 달아도 됨
class="note" = 두 문단에 같은 이름표를 단 것 — 나중에 CSS로 note 하나만 꾸미면 둘 다 같이 바뀜
id
id — 페이지에 딱 하나뿐인 이름표
id = 페이지에 딱 하나뿐인 이름표(학번처럼) — 같은 값을 두 번 쓰면 안 됨 (STEP 18 class와 짝)
id="top" = 이 페이지에 단 하나뿐인 이름표 — 같은 id 값을 두 번 쓰면 안 됨 (STEP 23에서 href="#top"으로 이 위치로 점프)
div
div — 만능 블록 상자 (한 줄 통째)
뜻 없는 빈 상자 — 여러 요소를 묶어서 한꺼번에 꾸밀 때 사용<div> = 블록 상자, 한 줄을 통째 차지(위→아래로 쌓임)
<div class="card"> = 사진·이름·가격 3개를 한 상자로 묶음 — 나중에 CSS로 card에 테두리·그림자를 한 번 주면 3개가 통째로 카드 모양이 됨
span
span — 인라인 상자 (글자 사이)
뜻 없는 빈 상자 — <span> = 인라인 상자, 줄을 바꾸지 않고 글자 사이에 끼어듦 (STEP 10 블록·인라인 참고)
<span>여기만</span> = 문장 속 글자 일부만 따로 묶는 인라인 상자 — 줄을 바꾸지 않고 글자 사이에 끼어듦<div>가 한 줄 통째 상자라면, <span>은 글자 몇 개만 감싸는 작은 상자 (화면 모양은 그대로 — 나중에 그 부분만 콕 집어 꾸미려고 미리 묶어두는 것)
div·span은 언제? (시맨틱 먼저)
<header>·<main>·<footer> 같은 시맨틱 상자는 이름만 봐도 "여긴 머리말·본문·꼬리말"이라고 뜻이 드러남 (STEP 10) — 반대로 <div>·<span>는 뜻이 없는 그냥 빈 상자
택배 상자에 비유 — 겉에 "주방용품"이라 적힌 상자(시맨틱)가 라벨 없는 민무늬 상자(div)보다 나중에 찾기 쉬움 — 사람도, 검색엔진·화면낭독기도 구조를 바로 알아봄
고르는 순서
① 뜻에 맞는 시맨틱 상자가 있나? (header·main·footer — STEP 10) → 있으면 그걸
② 마땅한 게 없고 그냥 묶기만 하면 됨 → 한 줄 통째면 <div>, 글자 일부면 <span>
경로
파일 주소(경로) — 이미지가 안 뜨는 이유 1위
이미지가 안 뜨는 이유 1위 = 경로가 틀림 — 경로 = 그 파일이 어느 폴더에 있는지 알려주는 길 안내 (STEP 08 보강)
• ./img/cat.png — 지금 폴더 안 img 폴더의 cat.png (./ = 지금 폴더)
• ../cat.png — 한 칸 위 폴더 (../ = 상위 폴더)
• https://... — 인터넷 주소 그대로 (절대경로)
링크 심화
링크 더 쓰기 (a 속성) — 색깔로 구분
<a>에 붙이는 속성마다 하는 일이 다름
• target="_blank" — 새 탭에서 열기
• href="#top" — 같은 페이지의 id="top" 위치로 점프(STEP 19 id와 짝)
• href="mailto:…" — 메일 쓰기 창
• href="tel:…" — 전화 걸기(폰)
색 구분 — 코드에서 속성을 색으로 빠르게 찾기
• 하늘색 = 새 탭에서 열기
• 보라 = 같은 페이지 점프
• 초록 = 메일 쓰기
• 주황 = 전화 걸기
입력 type
입력칸 종류 (input type)
<input>의 type만 바꾸면 칸 모양이 달라짐 — 회원가입 폼에 딱 맞는 칸 고르기 (STEP 15 보강)
• type="email" — 메일 칸(@ 검사)
• type="password" — 점(••)으로 가려지는 칸
• type="checkbox" — 여러 개 고르기(네모)
• type="radio" — 하나만 고르기(동그라미)
• type="date" — 날짜 고르기(달력)
• <textarea> — 여러 줄 긴 글 칸
• <select> — 펼쳐서 하나 고르기(드롭다운)
<textarea> = 여러 줄 긴 글 칸 — <select><option> = 펼쳐서 하나 고르는 드롭다운
색 구분 — 코드에서 입력칸 종류를 색으로 빠르게 찾기
• 노랑 = 메일 칸 (email)
• 빨강 = 비밀번호 칸 (password)
• 하늘색 = 체크박스 (checkbox)
• 분홍 = 라디오 (radio)
• 주황 = 날짜 (date)
• 보라 = 여러 줄 글 칸 (textarea)
• 초록 = 드롭다운 (select)
글자 꾸미기
글자 꾸미기 태그 (em·mark·code…)
글자 꾸미기 태그
• <em> 기울임 강조 · <mark> 형광펜 · <small> 작게
• <code> 코드 글씨 · <blockquote> 인용 덩어리
• <sub> 아래첨자(H<sub>2</sub>O) · <sup> 위첨자(x<sup>2</sup>)
표 합치기
표 칸 합치기 (colspan·rowspan)
표 칸을 옆·아래로 합치기 — colspan = 가로로 N칸 합침, rowspan = 세로로 N칸 합침 (STEP 14 보강)
<thead> = 표 머리(제목 줄), <tbody> = 표 몸통(내용 줄) — 구역을 나눠 두면 표 뜻이 또렷
접기
접는 상자 (details·summary)
접는 상자 (details·summary)
JavaScript 없이 클릭으로 펴고 접는 상자 — <summary>는 항상 보이는 제목, 나머지는 눌러야 펼쳐짐 (FAQ·더보기에 사용)
색 구분 — 보라 = 접히는 상자 전체(details) · 노랑 = 항상 보이는 제목(summary) → 제목 누르면 안쪽 <p>가 펴졌다 접혔다 함
시맨틱 구조
의미를 담은 구역 태그 (nav·section·article·aside)
똑같이 칸을 나눠도 <div>는 뜻이 없는 빈 상자 — 시맨틱 태그는 이름만 봐도 무슨 구역인지 드러남 (STEP 10 header·main·footer 보강)
네 가지 핵심 구역
• <nav> = 메뉴·길 안내 모음
• <section> = 한 주제로 묶인 덩어리
• <article> = 그 자체로 완결된 글(글·뉴스·카드)
• <aside> = 본문 곁다리(사이드바·광고)
색 구분
• 노랑 nav(메뉴)
• 보라 section(주제 묶음)
• 초록 article(완결된 글)
• 하늘색 aside(곁다리)
왜 쓰나 — 검색엔진·화면낭독기가 구조를 이해 → SEO·접근성에 유리 (div보다 똑똑한 칸 나누기)
영상 넣기
내 파일로 영상 재생 (video)
STEP 16 <iframe>은 남의 페이지(유튜브·지도)를 박는 것 — <video>는 내 영상 파일을 직접 재생, controls를 붙여야 재생 버튼이 뜸
영상 — video
색 구분 — 보라 video(영상 상자) · 파랑 controls(재생 버튼)
음성 넣기
내 파일로 음성 재생 (audio·source)
<audio>는 내 음성 파일을 직접 재생, controls를 붙여야 재생 버튼이 뜸 (STEP 29 video와 짝)
음성 — audio + source
<source>로 여러 파일 형식을 적어 두면 브라우저가 재생 가능한 것을 골라 씀 (호환성 대비)
색 구분 — 보라 audio(음성 상자) · 파랑 controls(재생 버튼) · 노랑 source(파일 후보)
실전 — 파파고에서 음성 파일(mp3) 얻기
내 음성 파일이 없을 때 — 파파고 번역기의 읽어주기(TTS)를 mp3로 받아 <audio>에 넣기 (STEP 32 개발자도구 활용)
F12로 개발자도구 열고 Network 탭 클릭c_lt_clara_...) 한 줄이 새로 뜸Request URL이 음성 주소 (papago.naver.com/apis/tts/...) — 이게 mp3 파일<source src="...">에 파일명 적기주의 — 남의 서비스 음성은 개인 학습·실습용으로만, 상업적 재배포 금지 (저작권)
Emmet 자동완성
Emmet — 짧게 쳐서 코드 빨리 만들기
VSCode에 기본 내장된 Emmet — 짧은 약어를 친 뒤 Tab을 누르면 긴 HTML로 한 번에 펼쳐짐, 손으로 다 칠 필요 없음
뼈대 한 번에 — ! 후 Tab
! 입력 후 Tab — <!DOCTYPE html> 부터 <body> 까지 기본 뼈대가 통째로 생김 (STEP 05 뼈대를 손 안 대고 자동 생성)
viewport 줄이 핵심 — width=device-width는 페이지 너비를 기기 화면 너비에 맞추고, initial-scale=1.0은 처음 확대 배율을 1배로 둠. 없으면 폰에서 글자가 깨알같이 작게 나옴
자주 쓰는 약어
약어를 치고 Tab — 화살표 → 오른쪽이 펼쳐진 결과
① 구조·반복 만들기
② class·id 단축
③ 내용·속성 채우기
기호 뜻 한눈에
• > — 안에 넣기(자식). ul>li = ul 안에 li
• *N — N번 반복. li*3 = li 3개
• .이름 — class 붙이기. .box = class="box"
• #이름 — id 붙이기. #top = id="top"
• {글자} — 태그 안의 내용. h1{안녕} = <h1>안녕</h1>
• [속성] — 속성 넣기. a[href=#] = href="#"
개발자도구 F12
개발자도구 (F12) — 화면 뒤를 들여다보는 꿀팁
브라우저에 숨어 있는 개발자도구 — 화면 뒤 HTML·CSS가 다 보이고, 값을 잠깐 바꿔 미리보기도 됨 — 에러 잡는 실전 도구 (별도 설치 X, 크롬·엣지 기본 내장)
여는 법
• F12 누르기 (Mac은 Cmd + Opt + I)
• 또는 화면 아무 곳 우클릭 → 검사
꿀팁 — 이렇게 써먹기
주의 — 여기서 바꾼 건 화면에서만 잠깐 — 내 파일은 안 바뀌고 새로고침하면 원래대로 (마음껏 실험해도 안전)
꿀팁 — 남의 잘 만든 사이트에서 F12 열어 구조 구경 = 가장 빠른 공부법
한 줄씩 질문하며 공부
한 줄씩 질문하며 공부하기 — 물고기 잡는 법
아래는 STEP 01~32를 한 페이지에 다 욱여넣은 약간 어려운 더미 코드 — 처음엔 모르는 게 당연함 — 외우지 말고 한 줄씩 Claude Code에 물어보며 빈칸을 채워 나가기 (정답을 떠먹는 게 아니라 스스로 묻는 습관을 익히는 단계)
먼저 — 약간 어려운 더미 코드 (한 줄씩 씹어 먹기)
코드 사이 <!-- 1. ~ --> 처럼 적힌 줄이 내가 Claude Code에 던질 질문 — 한 줄 보고 모르면 바로 물어보기
물고기 잡는 법 — Claude Code에 한 줄씩 묻기
<!-- -->)에 직접 적기 — 내 말로 바꿔 적어야 진짜 내 것그대로 따라 쳐도 되는 질문 템플릿
핵심 — 답을 받는 게 목표가 아니라 한 줄마다 질문을 만들어 내는 습관이 목표 — 질문이 떠오르면 이미 절반은 공부한 것
미니 프로젝트 (HTML)
미니 프로젝트 — 한 페이지짜리 내 소개 사이트 만들기
STEP 01~33에서 배운 걸 한 파일에 다 합쳐 작은 웹사이트 하나 완성하기 — 따라 치고 끝이 아니라 글자·색·메뉴를 내 것으로 바꿔 진짜 내 페이지로 만들기
이번 프로젝트에서 쓰는 것 (배운 것 복습)
• 뼈대(STEP 05) · 시맨틱 header/nav/main/section/footer(STEP 28)
• 제목·문단·목록·링크·이미지(STEP 06~16)
• id로 메뉴 점프(STEP 19·22) · class로 스타일 묶기(STEP 18) · 표(STEP 26) · 폼(STEP 15)
• 막히면 한 줄씩 질문(STEP 33) · F12로 확인(STEP 32)
완성 코드 — index.html 하나에 통째로
id와 class 실무 구분 (CSS에서 중요!)
• id = 페이지에 딱 하나 — 메뉴 점프(#about) · label 연결(for↔id) · JS로 콕 집을 때
• class = 여러 곳에 공유 — 같은 모양을 한 번에 꾸밀 때. nav-link 3개처럼 묶어서 CSS 한 줄로 똑같이 스타일
• 한 태그에 둘 다 가능 — <section class="section" id="about"> (class=공유 스타일, id=고유 점프)
• CSS에서 부를 때 — class는 .이름(점), id는 #이름(샵). 꾸미기는 주로 class, id는 아껴서 고유한 곳에만
만드는 순서
index.html → 위 코드 붙여넣기 → 저장(Ctrl+S)href="#id")한 단계 더 (도전)
• 좋아하는 것 <section> 하나 더 추가
• 링크(STEP 23)로 내 SNS 연결 <a href="..." target="_blank">
• 다음 단계 CSS에서 색·글꼴·여백을 입혀 진짜 사이트처럼 꾸미기
핵심 — 작아도 처음부터 끝까지 직접 완성해 보는 게 실력 — 완성한 파일은 Netlify·Vercel로 인터넷에 올릴 수도 있음