본문으로 건너뛰기

단원 1~9 섞어 풀기

HTML·CSS 목차규칙이 겹칠 때문제 12개

하루 지나 풀면 더 오래 남습니다. 9단원을 마친 다음 날 풀어 보세요. 1~9단원에서 12문제를 섞었고 — 반은 5~9단원, 반은 1~4단원입니다 — 어느 레슨의 문제인지는 정답을 펼쳐야 보입니다. 화면에 보일 글이나 값, 주소, 고친 줄은 종이에 끝까지 쓴 뒤 정답을 펼치세요. 막히면 정답 앞의 힌트를 먼저 펼칩니다. 점수는 매기지 않습니다.

결과를 묻는 문제의 결과 화면과 잰 값은 정답을 펼치면 보입니다. 결과 화면은 폼을 보내지도 다른 페이지로 떠나지도 않으니, 주소를 묻는 문제는 컴퓨터에서 파일로 저장해 브라우저로 열고 눌러 봅니다. 이긴 값을 묻는 문제는 종이에 손 점수판을 그려 풉니다. 결과는 모두 크롬 기준입니다.

이 과목의 짧은 길(선택) — 꾸미기보다 동작이 먼저 궁금하다면 이 길도 있습니다. 1~9단원과 17단원의 앞 두 레슨(완성 화면을 영역으로 나누기·이름표를 맞춘 HTML)만 하고 자바스크립트 과목으로 넘어가도 됩니다. 그 과목이 12단원에서 이 과목의 할 일 화면을 다시 쓸 때 필요한 것이 모두 들어 있습니다. 남은 10~16단원은 뒤에 와도 됩니다.

문제 1

동아리 회비 안내 문단을 꾸몄습니다. 짝마다 두 코드의 화면이 같은지 다른지 쓰세요. 다르면 어디가 다른지도 한 줄로 쓰세요. 셋 모두 같은 답이 나와도 됩니다.

(가)

<p>회비 5000원</p>
p {
  color: #005bb5;
  font-size: 18;
}
<p>회비 5000원</p>
p {
  color: #005bb5;
}

(나)

<p>회비 5000원</p>
p {
  color: #005bb5
  font-weight: bold;
}
<p>회비 5000원</p>
p {
  font-weight: bold;
}

(다)

<p>회비 5000원</p>
p {
  colr: #005bb5;
  font-weight: bold;
}
<p>회비 5000원</p>
p {
  font-weight: bold;
}
힌트

짝마다 앞 코드의 선언을 한 줄씩 읽고, 브라우저가 알아듣는 줄과 못 알아듣는 줄을 가려 보세요.

힌트 둘

알아듣지 못한 선언만 버려지는지, 규칙 전체가 버려지는지 정하세요. (나)는 끝에 ;이 없는 줄이 다음 줄과 어떻게 이어지는지도 봅니다.

정답

(가) 같다 · (나) 다르다 — 앞 코드는 글자가 굵지 않다 · (다) 같다

결과 화면(가) 첫째 코드
결과 화면(가) 둘째 코드
결과 화면(나) 첫째 코드
결과 화면(나) 둘째 코드
결과 화면(다) 첫째 코드
결과 화면(다) 둘째 코드
  • (가) font-size: 18은 단위가 없어 알아듣지 못하는 값이라, 브라우저가 그 선언만 버립니다(브라우저 규칙 4). 색 선언은 그대로 먹어 두 화면이 같습니다.
  • (나) 앞 코드는 #005bb5 뒤에 ;이 없어 #005bb5 font-weight: bold⁠까지가 color의 값 하나로 읽힙니다. 그 선언이 통째로 버려져 색도 굵기도 빠집니다. 뒤 코드는 굵습니다.
  • (다) colr는 없는 속성 이름이라 그 줄만 버려지고, 굵기 선언은 먹습니다.
  • (가) · (다) 다르다는 틀린 줄이 있으면 규칙 전체가 안 먹는다고 본 것입니다(CSS도 멈춘다는 생각).
  • (나) 같다는 ;이 빠져도 그 줄만 버려진다고 본 것입니다. ;이 없으면 다음 선언까지 함께 버려집니다.

다시 볼 레슨: 규칙의 모양

문제 2

카페 메뉴를 span과 div로 한 줄에 하나씩 적었습니다. 화면에 보이는 글을 위에서부터 쓰세요. 줄이 바뀌는 곳은 ' / '로 씁니다.

<span>커피</span>
<span>라테</span>
<div>녹차</div>
<span>쿠키</span>
힌트

네 요소마다 블록인지 인라인인지 먼저 적어 보세요.

힌트 둘

코드에서 줄을 바꾼 자리는 그릴 때 무엇이 되나요? 줄을 실제로 나누는 것은 무엇인지 떠올려 보세요.

정답

받는 답: 커피 라테 / 녹차 / 쿠키

결과 화면
잰 값개발자 도구에서 본 값
  • body의 보이는 글커피 라테 / 녹차 / 쿠키
  • span은 인라인이라 글자처럼 한 줄 안에서 흐릅니다. '커피'와 '라테' 사이의 줄바꿈은 그릴 때 빈칸 하나가 됩니다(브라우저 규칙 2).
  • div는 블록이라 위에서 아래로 쌓입니다 — 앞뒤로 줄을 나눠 '녹차'가 제 줄을 차지하고, 뒤의 '쿠키'는 새 줄에서 시작합니다(브라우저 규칙 7).
  • 흔한 오답은 '커피 / 라테 / 녹차 / 쿠키'입니다. 코드에서 줄을 바꾼 대로 화면도 줄이 바뀐다고 본 것입니다(친 대로 나온다는 생각).
  • '커피라테 / 녹차 / 쿠키'는 줄바꿈이 아무것도 남기지 않는다고 본 것입니다. 빈칸 하나가 남습니다.

다시 볼 레슨: div·span과 블록·인라인 · 공백 규칙과 특수 문자

문제 3

여행 일정 페이지입니다. 맨 위 여행 이름은 CSS로 크고 굵게 칠했습니다. 화면 읽기 프로그램으로 '제목만 모아 듣기'를 하면 들리는 글을 모두 고르세요. 기호를 다 쓰세요.

<header>
  <p class="logo">가을 여행</p>
</header>
<main>
  <h1>첫째 날</h1>
  <p><b>점심</b></p>
  <h3>숙소</h3>
  <h2>둘째 날</h2>
</main>
.logo {
  font-size: 32px;
  font-weight: bold;
}
  • ㉠ 가을 여행
  • ㉡ 첫째 날
  • ㉢ 점심
  • ㉣ 숙소
  • ㉤ 둘째 날
힌트

다섯 글을 감싼 요소의 이름을 하나씩 적어 보세요.

힌트 둘

제목 차례는 화면 모양이 아니라 나무에 든 제목 요소(h1~h6)로 만들어집니다. 차례는 코드에 나온 차례입니다.

정답

받는 답: ㉡ ㉣ ㉤

결과 화면
잰 값개발자 도구에서 본 값
  • .logo의 역할paragraph
  • b의 역할generic
  • h1의 역할heading
  • h3의 역할heading
  • 화면 읽기 프로그램은 화면 모양이 아니라 나무의 요소에서 역할을 얻습니다(브라우저 규칙 3). 제목 역할은 h1 첫째 날 · h3 숙소 · h2 둘째 날 셋뿐이고, 나온 차례대로 들립니다.
  • ㉠ 화면에서 가장 크고 굵어도 p라 문단입니다 — 크게 칠해도 제목이 되지 않습니다(태그가 모양이라는 생각의 거꾸로).
  • ㉢ 굵은 글씨 b로 제목처럼 보이게 한 옛 습관입니다. 제목 차례에 들지 않습니다.
  • 들리는 차례는 단계 숫자가 아니라 코드에 나온 차례(첫째 날 → 숙소 → 둘째 날)입니다. h2 없이 h3를 먼저 쓴 곳은 검사기가 단계를 건너뛰었다고 알려 줍니다.

다시 볼 레슨: 제목 h1~h6 · 시맨틱 요소 · 화면 읽기 프로그램이 읽는 페이지

문제 4

레시피 노트 페이지의 세 요소입니다. (가) 단추 (나) 입력 칸 (다) 링크의 읽는 이름을 쓰세요. 읽는 이름이 없으면 '없음'이라고 씁니다.

<button aria-label="닫기">
  ×
</button>
<label>
  검색
  <input placeholder="메뉴" />
</label>
<a href="kimchi.html">
  <img
    src="images/kimchi.svg"
    alt=""
    width="80"
    height="60"
  />
</a>
힌트

세 요소마다 이름이 될 만한 글이 어디에 있는지 모두 찾아 적어 보세요 — 요소 안의 글 · 속성 · 짝이 된 라벨.

힌트 둘

aria-label은 안의 글보다 먼저 이름이 됩니다. 라벨이 있으면 placeholder는 이름이 되지 않습니다. alt=""인 그림은 읽는 쪽 나무에서 빠집니다.

정답

받는 답: (가) 닫기 · (나) 검색 · (다) 없음

결과 화면
잰 값개발자 도구에서 본 값
  • button의 읽는 이름닫기
  • input의 읽는 이름검색
  • a의 읽는 이름(없음)
  • a의 역할link
  • (가) aria-label이 단추의 읽는 이름이 됩니다. 안의 '×'는 이름으로 쓰이지 않습니다(브라우저 규칙 3).
  • (나) 칸을 감싼 라벨 '검색'이 이름입니다. 흔한 오답 '메뉴'는 placeholder를 라벨로 본 것입니다(placeholder가 라벨이라는 생각). placeholder는 치기 시작하면 사라지는 안내입니다.
  • (다) 링크 안에 그림 하나뿐인데 alt=""라 그림이 읽는 쪽에서 빠지고, 링크에 읽을 글이 남지 않습니다. 무엇을 읽을지는 프로그램마다 다릅니다(주소를 읽기도 합니다). 그림만 든 링크는 alt에 가는 곳('김치볶음밥 레시피')을 적습니다.
  • (다)를 'kimchi.svg'로 쓴 것은 alt=""와 alt가 없는 것을 같게 본 것입니다. alt가 아예 없을 때 파일 이름을 읽기도 하고, alt=""는 '읽지 마라'는 뜻입니다.

다시 볼 레슨: 글자 없는 단추와 숨긴 라벨 · label로 칸에 이름 붙이기 · alt 제대로 쓰기

문제 5

동아리 페이지의 다섯 요소를 모두 단추처럼 회색 바탕으로 꾸몄습니다. 페이지를 열고 Tab만 눌러 갈 수 있는 요소를 모두 고르세요. 기호를 다 쓰세요.

<div class="go">신청</div>
<a class="go">안내</a>
<a
  class="go"
  href="list.html"
>목록</a>
<span class="go">공유</span>
<button class="go">
  저장
</button>
.go {
  background-color: #d2d2d7;
}
  • ㉠ div 신청
  • ㉡ a 안내(href 없음)
  • ㉢ a 목록
  • ㉣ span 공유
  • ㉤ button 저장
힌트

다섯 요소의 태그 이름과 href가 있는지를 하나씩 보세요.

정답

㉢ ㉤ — href가 있는 링크와 단추입니다.

페이지를 열고 Tab을 한 번 눌렀을 때입니다.

결과 화면
잰 값개발자 도구에서 본 값
  • 지금 포커스의 읽는 이름목록

Tab을 두 번 눌렀을 때입니다.

<div class="go">신청</div>
<a class="go">안내</a>
<a
  class="go"
  href="list.html"
>목록</a>
<span class="go">공유</span>
<button class="go">
  저장
</button>
.go {
  background-color: #d2d2d7;
}
결과 화면
잰 값개발자 도구에서 본 값
  • 지금 포커스의 읽는 이름저장
  • 지금 포커스의 역할button
  • Tab은 누를 수 있는 역할을 가진 요소에만 멈춥니다 — href가 있는 링크 · 단추 · 입력 칸(브라우저 규칙 3). 회색 바탕은 모양일 뿐이라 div · span에는 역할이 생기지 않습니다.
  • href가 없는 a는 링크 역할이 없어 건너뜁니다.
  • 흔한 오답은 다섯 모두입니다. 단추처럼 보이면 단추처럼 동작한다고 본 것입니다(모양이 역할이라는 생각). 누를 일이면 button, 다른 페이지로 가는 일이면 href가 있는 a를 씁니다.

다시 볼 레슨: 링크와 단추 가르기 · 키보드로 다니기

문제 6

플로우 카페 사이트의 라테 페이지 menu/latte.html에 주문 폼을 넣었습니다. '주문'을 누르면 브라우저가 떠나 가는 주소는 사이트 폴더에서 보면 어떻게 될까요? 경로부터 ? 뒤 끝까지 쓰세요.

cafe/
  index.html
  done.html
  menu/
    latte.html
<form action="done.html">
  <input
    name="menu"
    value="latte"
  />
  <button>주문</button>
</form>
힌트

폴더 나무에서 latte.html과 done.html이 저마다 어느 폴더에 있는지 짚어 보세요.

힌트 둘

상대 주소는 그 주소를 적은 파일이 든 폴더에서 출발합니다. 폼의 action도 같습니다.

정답

받는 답: menu/done.html?menu=latte

결과 화면
잰 값개발자 도구에서 본 값
  • form의 주소menu/done.html?menu=latte

앞에 cafe/를 붙여 쓴 것과 ?menu=latte를 띄어 쓴 것은 꼴만 다릅니다.

  • 제출은 브라우저가 칸의 값을 모아 action 주소 뒤에 붙이고 그 주소로 떠나는 일입니다(브라우저 규칙 1).
  • action="done.html"은 이 폼을 적은 latte.html이 든 menu/에서 출발합니다. 그래서 menu/done.html을 찾아갑니다. 그 폴더에는 done.html이 없어 브라우저가 파일을 찾지 못합니다.
  • 흔한 오답은 done.html?menu=latte입니다. 주소가 늘 사이트 맨 위에서 출발한다고 본 것입니다(출발점이 늘 같다는 생각). 맨 위의 done.html로 가려면 action="../done.html"⁠로 한 칸 올라갑니다.
  • ?menu=latte를 빠뜨린 것은 action이 있으면 칸의 값을 따로 보낸다고 본 것입니다. 값은 주소 뒤에 붙어 함께 갑니다.

다시 볼 레슨: 경로 읽기 · 폼과 제출 · name과 value

문제 7

카페 메뉴 목록입니다. 세 선택자가 저마다 고르는 요소를 그 요소 바로 안의 글로 쓰세요 — 안에 든 다른 요소의 글은 빼고 씁니다. 둘 이상이면 ' · '로 잇습니다.

<ul class="menu">
  <li class="hot">커피</li>
  <li>
    라테 <b class="hot">인기</b>
  </li>
</ul>
  • (가) li.hot
  • (나) li .hot
  • (다) li, .hot
힌트

세 선택자에서 li와 .hot 사이에 무엇이 있는지 보세요 — 아무것도 없음 · 빈칸 · 쉼표.

정답

받는 답: (가) 커피 · (나) 인기 · (다) 커피 · 라테 · 인기

결과 화면
잰 값개발자 도구에서 본 값
  • li.hot의 고른 글커피
  • li .hot의 고른 글인기
  • li, .hot의 고른 글커피 · 라테 · 인기

'고른 글'은 고른 요소마다 바로 안의 글입니다 — 둘째 li의 바로 안 글은 '라테'입니다. 둘째 li를 '라테 인기'로 쓴 것도 고른 요소는 같아 맞은 것으로 칩니다.

  • (가) 붙여 쓰면 한 요소의 두 조건 — 'class가 hot인 li'라 첫 줄 하나입니다(브라우저 규칙 4).
  • (나) 띄어 쓰면 'li 안에 든 .hot' — 둘째 줄 안의 b입니다.
  • (다) 쉼표는 선택자 목록이라 li 둘과 .hot이 붙은 요소를 모두 고릅니다. 커피 li는 두 조건에 다 맞아도 한 번만 셉니다.
  • (가)와 (나)를 같게 쓴 것은 빈칸 하나는 뜻이 없다고 본 것입니다.

다시 볼 레슨: 조건 겹치기와 속성 선택자 · 하위·자식·형제 선택자 · 태그·클래스·ID 선택자

문제 8

하고 싶은 일마다 쓸 요소 · 속성 · 가상 클래스를 쓰세요.

  • (가) 브라우저 탭에 보이는 페이지 이름을 적는 요소
  • (나) 페이지 맨 위에서 사이트 이름과 내비게이션을 묶는 영역 요소
  • (다) 폼을 보낼 때 칸의 값 앞에 붙을 이름을 적는 속성
  • (라) 키보드로 왔을 때(글자 칸은 눌러도) 포커스 표시를 그리는 가상 클래스
힌트

(나)는 <body> 안에, 화면에 보이는 영역입니다. (라)는 :focus 뒤에 한 낱말이 더 붙습니다.

정답

받는 답: (가) title · (나) header · (다) name · (라) :focus-visible

같은 답으로 치는 꼴: 꺾쇠를 붙인 <title> · <header>, 앞의 :을 뺀 focus-visible.

틀리는 꼴 — 까닭:

  • (가) h1 — 페이지 안 맨 위의 큰 제목입니다. 탭의 이름은 head 안의 title입니다.
  • (나) head — 화면에 보이지 않는 문서 정보(title · meta)를 담는 곳입니다.
  • (다) id — 라벨과 짝을 짓거나 CSS · 링크가 고를 때 쓰는 이름표입니다. id만 있는 칸은 값을 보내지 않습니다.
  • (라) :focus — 마우스로 단추를 눌러도 켜져, 마우스 사용자에게도 윤곽선이 그려집니다.

다시 볼 레슨: 문서 뼈대 · 시맨틱 요소 · name과 value · 마우스와 키보드 상태

문제 9

카페 주문 폼에 주문 전에 내용을 보는 '미리 보기' 단추를 더했습니다. 칸을 고치지 않고 '미리 보기'를 누르면 주소 끝에 무엇이 붙을까요? ?부터 끝까지 쓰세요. 떠나지 않으면 '떠나지 않음'이라고 씁니다.

<form>
  <input
    name="menu"
    value="latte"
  />
  <input
    name="extra"
    value="no ice"
  />
  <input id="cup" value="2" />
  <button>미리 보기</button>
  <button type="submit">
    주문
  </button>
</form>
힌트

'미리 보기' 단추의 여는 태그에 적힌 속성을 보세요. 그다음 세 칸의 속성을 칸마다 적어 봅니다.

힌트 둘

type을 적지 않은 폼 안 단추는 무슨 단추인지 떠올리세요. 세 칸 가운데 주소에 붙는 칸은 어느 속성이 있는 칸인가요? 값 안의 띄어쓰기는 주소에서 어떤 기호가 되나요?

정답

받는 답: ?menu=latte&extra=no+ice

결과 화면
잰 값개발자 도구에서 본 값
  • form의 주소?menu=latte&extra=no+ice

? 기호를 빼고 쓴 것은 꼴만 다릅니다.

  • 폼 안의 단추는 type을 적지 않으면 제출 단추입니다. '미리 보기'를 눌러도 폼이 지금 페이지 주소로 떠납니다(action이 없으면 지금 페이지 — 브라우저 규칙 1).
  • 보내는 것은 name이 있는 칸뿐이고 이름=값을 &로 잇습니다. 잔 수 칸은 id만 있어 빠집니다. 값 안의 띄어쓰기는 + 기호가 됩니다.
  • 흔한 오답은 '떠나지 않음'입니다. 단추는 제 글자대로 일한다고 본 것입니다(단추는 조용하다는 생각). 보내지 않을 단추에는 type="button"을 적습니다.
  • ?menu=latte&extra=no+ice&cup=2⁠는 id가 있으면 보내진다고 본 것입니다.

다시 볼 레슨: 단추의 type · name과 value · 폼과 제출

문제 10

레시피 노트의 '재료 사기' 링크를 단추처럼 꾸몄습니다. CSS는 site.css와 order.css 두 파일이고, link 두 줄로 이 차례대로 이었습니다. 이 링크의 네 속성 color · background · font-weight · font-size마다 손 점수판을 채워 이긴 값을 쓰세요. 기본 스타일 가운데 이 링크에 닿는 것은 a { color: #0000ee; } 하나입니다. background는 짧게 적기라 한 줄이 속성 여럿을 정하지만 — 10단원 '여백 짧게 적기'에서 자세히 — 이 문제의 두 줄은 background끼리라 쓴 그대로 겨룹니다.

<div class="box">
  <a
    class="go quiet"
    href="shop.html"
  >재료 사기</a>
</div>
/* site.css */
.box {
  color: #1d1d1f;
  font-size: 18px;
}

.box a {
  background: #f5f5f7;
}
/* order.css */
.go {
  background: #005bb5;
  font-weight: bold;
}

.quiet {
  font-weight: normal;
}
속성선언출처명시도차례이긴 값
color……………
background……………
…………
font-weight……………
…………
font-size……………
힌트

먼저 네 속성마다 이 링크에 닿는 선언을 모두 모읍니다 — 기본 스타일의 선언도 셉니다.

힌트 둘

.box 규칙은 링크가 아니라 div를 고릅니다. link 두 줄로 이은 두 파일은 한 파일을 이어 붙인 것과 같아, 차례는 site.css의 규칙부터 셉니다. 닿는 선언이 하나도 없는 속성만 부모에게 물려받습니다.

정답

받는 답: color #0000ee · background #f5f5f7 · font-weight normal · font-size 18px

속성선언출처명시도차례이긴 값
colora · #0000ee기본 스타일0-0-1—#0000ee
background.box a · #f5f5f7우리 CSS0-1-12#f5f5f7
.go · #005bb5우리 CSS0-1-03
font-weight.quiet · normal우리 CSS0-1-04normal
.go · bold우리 CSS0-1-03
font-size닿는 선언 없음———18px(부모 .box에서 물려받음)

차례 칸은 이어 붙인 두 파일의 규칙 차례입니다 — .box 1 · .box a 2 · .go 3 · .quiet 4. 한 규칙의 선언은 같은 번호이고, 줄은 명시도의 점수판처럼 이긴 선언부터 적었습니다 — 코드 차례로 적어도 칸의 값이 같으면 맞습니다.

정답의 첫 결과 화면은 site.css만 이었을 때, 둘째는 두 파일을 이어 그린 것입니다.

결과 화면
결과 화면
잰 값개발자 도구에서 본 값
  • a의 글자색rgb(0, 0, 238)
  • a의 background-colorrgb(245, 245, 247)
  • a의 font-weight400
  • a의 font-size18px

#0000ee는 rgb(0, 0, 238), normal은 400, #f5f5f7은 rgb(245, 245, 247)로 써도 같은 답입니다.

  • color — 링크에 닿는 글자색 선언은 기본 스타일의 하나뿐이라 그것이 이깁니다. 부모 .box의 #1d1d1f는 닿는 선언이 없을 때만 물려받는데, 링크에는 기본 스타일 선언이 닿아 있습니다(브라우저 규칙 5).
  • background — 출처가 같아 명시도로 갑니다. .box a(0-1-1)가 뒤의 .go(0-1-0)를 이깁니다.
  • font-weight — .go와 .quiet는 명시도까지 0-1-0으로 같아 나중에 쓴 .quiet가 이깁니다.
  • font-size — 닿는 선언이 없어 부모 .box의 18px을 물려받습니다. 글자 크기는 물려받는 속성입니다.
  • 흔한 오답 — background를 #005bb5로 쓴 것은 뒤 파일 · 뒤 규칙이 늘 이긴다고 본 것입니다(뒤가 늘 이긴다는 생각). color를 #1d1d1f로 쓴 것은 링크도 부모 색을 물려받는다고 본 것입니다(다 물려받는다는 생각). font-size를 '없음'이나 기본 크기로 쓴 것은 거꾸로 아무것도 안 물려받는다고 본 것입니다.

반만 쓴 표는 안 쓴 것과 같습니다 — 네 줄이 저마다 다른 칸에서 갈렸습니다.

다시 볼 레슨: 명시도 · 나중에 쓴 규칙 · 물려받기

문제 11

레시피 노트 페이지의 뼈대입니다. 이 코드를 검사기에 넣으면 Error가 나는 요소를 모두 고르세요. 없으면 ㉣을 고릅니다.

<header>
  <h1>레시피 노트</h1>
</header>
<main>
  <h1>김치볶음밥</h1>
</main>
<main>
  <section>
    <p>재료</p>
  </section>
</main>
  • ㉠ 5번 줄 — 둘째 h1
  • ㉡ 7번 줄 — 둘째 main
  • ㉢ 8번 줄 — 제목 없는 section
  • ㉣ 없음
힌트

세 요소마다 같은 요소가 이 뼈대에 몇 번 나오는지, 안에 무엇이 들었는지 적어 보세요.

힌트 둘

세 요소마다 '한 페이지에 하나만'인지, '쓰면 안에 무엇을 두라'는 권함인지 떠올려 보세요.

정답

㉡ — 둘째 main입니다.

결과 화면
검사기Error 1개
  • Error7줄A document must not include more than one visible “main” element.
  • Warning8줄Section lacks heading. Consider using “h2”-“h6” elements to add identifying headings to all sections, or else use a “div” element instead for any cases where no heading is needed.
  • main은 페이지의 본문 영역이라 보이는 것은 하나뿐이어야 합니다. 둘째 main에 Error가 납니다.
  • 제목 없는 section은 Warning — '제목을 두거나 div를 쓰라'는 권함입니다. Error가 아니라 화면도 그대로입니다.
  • h1은 둘이어도 검사기가 막지 않습니다. 다만 페이지마다 큰 제목 하나를 권합니다.
  • ㉢까지 고른 것은 Warning도 Error로 본 것입니다. 검사기 결과는 Error부터 봅니다.
  • ㉠을 고른 것은 h1도 main처럼 하나만 써야 한다고 본 것입니다.

다시 볼 레슨: 시맨틱 요소 · article과 section 가르기 · 검사기로 틀린 HTML 찾기

문제 12

카페 안내 페이지입니다. '가는 길'만 링크로 만들었는데, 아래 문단 '주차는 건물 뒤'까지 파란 밑줄 링크로 그려집니다. 검사기에 넣었더니 아래 Error가 나왔습니다. 고칠 줄을 골라 고쳐 보세요.

검사기Error 3개
  • Error3줄End tag “p” seen, but there were open elements.
  • Error2줄Unclosed element “a”.
  • Error4줄End tag for “body” seen, but there were unclosed elements.
힌트

맨 위 Error의 줄 번호로 가서, 그 줄이 닫으려는 요소 안에 아직 열려 있는 요소가 무엇인지 보세요.

힌트 둘

브라우저는 닫히지 않은 링크를 다음 문단에서 다시 열어 이어 줍니다. 열린 a를 어디에서 닫아야 하는지 정하세요.

결과 화면일부러 틀린 코드

여기서 고친 코드는 저장하지도 보내지도 않습니다. 새로 열면 처음 코드입니다.

정답

받는 답: 2번 줄을 <a href="map.html">가는 길</a>⁠로 고칩니다.

<p>
  <a href="map.html">
    가는 길
  </a>
</p>
<p>주차는 건물 뒤</p>
결과 화면
잰 값개발자 도구에서 본 값
  • a의 고른 글가는 길
  • p:last-child의 나무주차는 건물 뒤

정답 접기 안 29칸에 맞춰 링크 안을 나눠 실었습니다. 링크가 문단의 처음부터 끝까지라 나눠도 화면이 같습니다.

고친 코드는 검사기 Error가 0입니다.

찾는 차례 2번 '요소가 나무에 내 생각대로 있나'에서 찾습니다. 검사기 Error는 나무가 생각과 달리 지어진 자리를 알려 줍니다 — 맨 위 Error부터 읽습니다.

  • 2번 줄에서 연 a를 닫지 않아, 3번 줄 </p>에서 문단을 닫을 때 링크가 아직 열려 있습니다(맨 위 Error). 브라우저는 오류 없이 나무를 고쳐 지어, 다음 문단 전체를 같은 링크로 감쌉니다(브라우저 규칙 2).
  • Elements 패널에서는 둘째 p가 a 안에 든 나무로 보입니다.
<p><a>가는 길</a></p>
<a><p>주차는 건물 뒤</p></a>

다르게 고쳐도 되는 곳: 3번 줄을 </a></p>로 고쳐도 됩니다 — 링크가 문단 안에서 닫힙니다(링크 글 끝에 빈칸 하나가 들지만 화면은 같습니다).

  • 흔한 오답은 4번 줄 '주차는 건물 뒤' 문단에 </a>를 넣는 것입니다. 그 문단은 이미 다시 열린 링크 안이라, 링크가 문단 안에 든 채로 남습니다.
  • 둘째 문단에 CSS로 color와 밑줄을 지우는 것도 흔합니다. 화면은 비슷해져도 눌러 보면 여전히 링크입니다 — 증상만 덮은 것입니다.

다시 볼 레슨: 요소 안의 요소 · 검사기로 틀린 HTML 찾기 · 링크 a

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

HTML·CSS 목차로