기초 66강 → R34 8단계 → R35 빈 파일 독립 제작
이 교재는 K-BOOKS 자체 제작 연습 자료이며 공식 공개문제나 실제 채점표가 아닙니다. 처음에는 강의와 함께 연습하고, 두 번째에는 이 교재를 보지 않고 빈 폴더에서 3시간 안에 작성해 보세요. 실제 시험장에서는 참고 자료 반입이 제한됩니다.
공식 안내: https://www.q-net.or.kr/cst006.do?artlSeq=5199079&brdId=Q006&code=1204&gSite=Q&id=cst00602
R42 E01 기준 정리: PC 1200px에서 헤더 100 + 슬라이드 300 + 콘텐츠 200 + 푸터 100 = 총 700px을 기준으로 확인합니다. 갤러리 이미지 3장은 콘텐츠의 탭 안에 두며, 별도 하단 갤러리 섹션은 추가하지 않습니다. 첫걸음 18단계의 완성 예제와 E01 독립 모의시험 참고본은 서로 다른 교육용 결과물입니다.
빈 폴더와 문제지를 먼저 확인하고 작업 범위를 파악한다.
문제지 · 프로젝트 폴더
KBOOKS_E01_MOCK/ ├─ index.html ├─ css/style.css ├─ js/script.js ├─ images/slide1.jpg ... └─ source/content.txt
상대경로 `images/slide1.jpg`는 **index.html 위치를 기준**으로 찾습니다. `../images/`는 다른 폴더를 가리킵니다.
이미지가 보이지 않음 — images가 index.html과 같은 레벨인지 확인합니다. images 폴더가 이중으로 중첩되었거나 ZIP 안에서 HTML을 열었는지 먼저 확인하세요.
HTML 한 파일에 헤더·슬라이드·콘텐츠·푸터의 의미 구조를 만든다.
index.html
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>여울 문화공간</title>
<link rel="stylesheet" href="css/style.css">
<script src="js/script.js" defer></script>
</head>
<body>
<header class="site-header">
<nav aria-label="주 메뉴">
<ul>
<li><a href="#about">공간 소개</a></li>
<li><a href="#program">프로그램</a></li>
<li><a href="#gallery">전시·공연</a></li>
<li><a href="#contact">이용 안내</a></li>
</ul>
</nav>
</header>
<main id="main">
<section id="about"><h1>여울 문화공간</h1></section>
<section id="program">
<h2>공지사항 · 갤러리 · 배너 · 바로가기</h2>
<div id="gallery">공지/갤러리 탭 영역</div>
</section>
</main>
<footer id="contact">여울 문화공간</footer>
</body>
</html>`defer`는 HTML 분석이 끝난 다음 JavaScript를 실행하게 해, 스크립트가 아직 없는 버튼을 찾는 실수를 줄입니다. `nav`는 메뉴의 부모이고 `li`는 각 메뉴의 자식입니다.
메뉴 클릭은 되는데 원하는 위치로 이동하지 않음 — `href="#gallery"`라면 문서에 `id="gallery"`가 반드시 하나 있어야 합니다. 대소문자와 철자를 비교하세요.
1200px 기준 레이아웃과 페이드 슬라이드의 기본 CSS를 완성한다.
css/style.css
.site-shell { max-width:1200px; margin:0 auto; }
.header-inner { display:flex; min-height:100px; align-items:center; }
.hero { height:300px; position:relative; overflow:hidden; }
.slide { position:absolute; inset:0; opacity:0; transition:opacity .65s; }
.slide.is-active { opacity:1; }
.panel-grid { display:grid; height:200px; grid-template-columns:1.35fr 1fr 1fr; gap:14px; }
.panel { min-width:0; }`position:relative`가 슬라이드의 부모 좌표 기준을 만들고, 자식 `.slide`를 `absolute`로 겹칩니다. `opacity` 변경이 페이드 효과이고 `display:none`만 바꾸면 페이드가 보이지 않습니다.
카드가 한 글자씩 세로로 찌그러짐 — 부모 `.panel-grid`에 적용된 grid-template-columns를 찾고 각 자식의 `min-width:0`, gap을 확인하세요. 부모 전체의 열 너비가 너무 작으면 모바일에서 1열 또는 2열로 낮춥니다.
클릭과 시간 경과에 따라 실제 화면이 변하도록 기능을 연결한다.
js/script.js
const slides = [...document.querySelectorAll('.slide')];
let current = 0;
function showSlide() {
slides.forEach((el, i) => {
el.classList.toggle('is-active', i === current);
});
}
if (slides.length > 1) {
setInterval(() => {
current = (current + 1) % slides.length;
showSlide();
}, 2800);
}
// 실제 답안에서는 일시정지, 탭·팝업 동작도 추가하세요.`querySelectorAll`은 같은 class의 여러 요소를 찾고, `setInterval`은 지정 시간마다 함수를 반복합니다. `classList.toggle`로 화면에 보일 슬라이드를 바꿉니다.
버튼을 눌러도 아무것도 바뀌지 않음 — HTML이 `js/script.js`를 정확하게 불러오는지, 선택자 `.slide`·`#tabNotice`와 실제 id/class가 같은지 비교하세요. 콘솔에 첫 오류가 있다면 그 줄부터 고칩니다.
겉보기 완성보다 파일 누락·스크립트 오류·클릭 실패부터 제거한다.
Chrome · 제출 검사기
index.html css/style.css js/script.js images/slide1.jpg, slide2.jpg, slide3.jpg images/gallery1.jpg, gallery2.jpg, gallery3.jpg images/logo.svg Chrome 개발자 도구 → Console → 오류 0건 확인
`404` 또는 `ERR_FILE_NOT_FOUND`는 파일을 못 찾는다는 뜻입니다. CSS·JS 문법이 맞아도 **경로가 틀리면** 브라우저가 파일을 불러오지 못합니다.
온라인 미리보기에서만 되고 직접 열면 이미지가 깨짐 — 온라인 편집기가 제공한 가상 경로와 실제 디스크 경로가 다를 수 있습니다. 로컬 `index.html` 기준의 `images/`, `css/`, `js/` 경로를 사용하세요.
마지막 15분에는 디자인 추가를 멈추고 파일을 정리해 제출 준비를 마친다.
프로젝트 최종 폴더
KBOOKS_E01_MOCK/ ├─ index.html ├─ css/ │ └─ style.css ├─ js/ │ └─ script.js └─ images/ ├─ logo.svg ├─ slide1.jpg ... slide3.jpg └─ gallery1.jpg ... gallery3.jpg ※ 실제 시험에서는 현장 문제지의 제출 지시를 따릅니다.
최종 제출에서는 코드만큼 **실행 가능한 상대경로와 빠진 파일이 없는 상태**가 중요합니다. 폴더 이름과 위치를 통째로 보존하세요.
완성 후 다른 폴더로 복사하니 스타일이 사라짐 — index.html만 복사하지 말고 css, js, images 폴더도 같이 복사해야 합니다. 상위 폴더 구조를 유지하세요.
실기 채점과 합격 여부는 Q-Net 기준이며 이 자체 점검표가 대체하지 않습니다.