6단원 '폼'의 일곱 레슨에서 12문제를 내고, 4 · 5단원에서 2문제를 섞었습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 보낼 주소나 읽는 이름, 고친 줄은 종이에 끝까지 쓴 뒤 정답을 펼치세요. 막히면 정답 앞의 힌트를 먼저 펼칩니다. 점수는 매기지 않습니다.
결과를 묻는 문제의 결과 화면과 잰 값은 정답을 펼치면 보입니다. 결과 화면에서는 단추를 눌러도 폼이 떠나지 않습니다 — 떠나 간 주소는 잰 값 form의 주소로 보이고, 컴퓨터가 있으면 문제의 코드를 파일로 저장해 열고 눌러 주소창 끝을 봅니다. 주소의 ?부터 끝까지가 받는 답이고, 앞에 파일 이름을 붙여 써도 같은 답입니다. 칸 모양과 말풍선 글은 크롬 기준입니다.
이 단원을 이미 안다면 1 · 2 · 3 · 5 · 6 · 9번을 먼저 풀어 보세요. 건너뛸지 볼 때는 힌트를 펴지 않고 풉니다. 다 맞히면 이 단원은 건너뛰어도 됩니다. 틀린 문제와 힌트를 펴고 맞힌 문제는 정답 끝의 '다시 볼 레슨'으로 갑니다. 끝의 두 문제(13 · 14번)는 직접 만들어 보는 문제라, 건너뛸지 가릴 때는 풀지 않아도 됩니다. 12번까지 풀고 쉬었다가 13번부터 이어 풀어도 됩니다. ⟨컴퓨터⟩가 붙은 문제는 컴퓨터에서 파일을 만들어 풉니다. 폰으로만 본다면 그 문제 끝의 폰 물음 하나로 대신합니다.
문제 1
레시피 노트의 재료 찾기 폼입니다. 재료 칸에 egg를 치고, 단추를 누르지 않고 그 칸에서 Enter를 눌렀습니다. 주소 끝에 무엇이 붙을까요? ?부터 끝까지 쓰세요. 아무 데도 가지 않으면 '떠나지 않음'이라고 씁니다.
<form action="find.html">
<label for="it">재료</label>
<input id="it" name="item" />
<label for="mx">시간</label>
<input id="mx" name="max" />
<button>찾기</button>
</form>
힌트
Enter가 무엇을 하는지 정한 뒤, 칸 둘의 name과 값을 차례로 적어 보세요.
힌트 둘
값을 비워 둔 칸도 name이 있습니다. 그 칸이 주소에서 빠지는지, 빈 값으로 붙는지 따져 봅니다.
정답
받는 답: ?item=egg&max=
form의 주소find.html?item=egg&max=
- 글자 칸에서
Enter를 누르면 그 폼의 제출 단추를 누른 것과 같습니다 — 폼이 칸의 값을 모아find.html로 떠납니다(브라우저 규칙 1). - 비운 칸도
name이 있으면max=처럼 빈 값으로 붙습니다. - '떠나지 않음'은 글자 칸의
Enter는 줄바꿈이나 아무 일도 아니라고 본 것입니다. 여러 줄 글 칸(textarea)이 아니면Enter는 제출입니다. ?item=egg만 쓴 것은 비운 칸은 보내지지 않는다고 본 것입니다.
다시 볼 레슨: 폼과 제출 · name과 value
문제 2
플로우 카페의 미리 주문 폼입니다. 세 칸에 차례로 tom lee · 0101234 · hot tea를 치고 '주문 넣기'를 누르면 주소 끝에 무엇이 붙을까요? ?부터 끝까지 쓰세요.
<form>
<label for="who">이름</label>
<input id="who" name="who" />
<label for="tel">연락처</label>
<input id="tel" />
<label for="dr">음료</label>
<input id="dr" name="drink" />
<button>주문 넣기</button>
</form>
힌트
칸마다 name과 친 값을 나란히 적어 보세요.
힌트 둘
name이 없는 칸은 주소에 어떻게 되는지, 값 안의 빈칸이 주소에서 어떤 기호가 되는지 떠올려 봅니다.
정답
받는 답: ?who=tom+lee&drink=hot+tea
form의 주소?who=tom+lee&drink=hot+tea
- 주소에 붙는 것은
name이 있는 칸의이름=값이고, 칸 사이는&, 값 안의 빈칸은+입니다. - 연락처 칸은
id만 있고name이 없어 건너뜁니다.id는 라벨과 CSS가 찾는 이름표일 뿐, 보낼 이름이 아닙니다. tel=0101234를 넣은 것은id가 있으면 보내진다고 본 것입니다.tom lee처럼 빈칸을 그대로 쓴 것은 띄어쓰기가 그대로 간다고 본 것입니다.
다시 볼 레슨: name과 value
문제 3
동아리 가입 폼의 두 칸입니다. 이름 칸에는 라벨을 붙이고, 연락처 칸에는 라벨 대신 칸 안에 회색 보기 글을 넣었습니다. 두 칸에 haneul · 0101234를 친 뒤입니다.
<label for="nm">이름</label>
<input id="nm" name="nick" />
<input
id="ph"
name="phone"
placeholder="연락처"
/>
- (가) 두 칸의 읽는 이름을 차례로 쓰세요.
- (나) 두 칸에 글을 친 지금, 무엇을 적는 칸인지 화면에 글로 남아 있는 칸은 어느 것일까요?
힌트
두 칸마다 짝지은 label이 있는지 보세요.
힌트 둘
칸에 글이 들어가면 회색 보기 글이 어떻게 되는지 떠올려 봅니다.
정답
(가) 이름 · 연락처 · (나) 이름 칸
#nm의 읽는 이름이름#ph의 읽는 이름연락처#ph의 :placeholder-shown꺼짐
- 라벨이 없는 칸에는 크롬이
placeholder글을 읽는 이름으로 씁니다. 그래서 읽는 이름만 보면 두 칸이 같아 보입니다. - 하지만
placeholder는 칸이 비었을 때만 보이는 보기 글입니다. 잰 값의:placeholder-shown 꺼짐은 보기 글이 지금 안 보인다는 뜻입니다 — 글을 친 연락처 칸은 무엇을 적던 칸인지 화면에서 사라졌습니다. 라벨 '이름'은 치는 동안에도 남습니다. - (나)에 연락처 칸도 넣은 것은
placeholder가 라벨처럼 늘 남는다고 본 것입니다(placeholder가 라벨이라는 생각). - 연락처 칸에도
<label for="ph">연락처</label>을 붙이고, 보기 글은 '예: 010…'처럼 보기로만 씁니다.
다시 볼 레슨: label로 칸에 이름 붙이기
문제 4
여행 신청 폼에서 출발일 칸을 복사해 도착일 칸을 만들었습니다. id를 고치는 것을 잊었습니다.
<label for="d">출발일</label>
<input id="d" name="start" />
<label for="d">도착일</label>
<input id="d" name="end" />
- (가) '도착일' 글자를 누르면 어느 칸이 골라질까요? 출발일 칸 · 도착일 칸 가운데 하나로 쓰세요.
- (나) 도착일 칸의 읽는 이름은 무엇일까요? 이름이 없으면 '없음'이라고 씁니다.
힌트
두 라벨의 for와 두 칸의 id를 줄마다 나란히 적어 보세요.
힌트 둘
같은 id가 둘일 때 for="d"가 어느 칸을 찾을지 정하세요. 같은 id 둘에 # 링크를 걸면 어디로 갔는지 떠올려 봅니다.
정답
받는 답: (가) 출발일 칸 · (나) 없음
- 지금 포커스의 읽는 이름출발일 도착일
input:last-of-type의 읽는 이름(없음)
잰 값 첫 줄은 '도착일' 글자를 누른 뒤 포커스가 간 칸 — 출발일 칸의 이름이고, 둘째 줄은 도착일 칸을 잰 것입니다.
for="d"는id가d인 첫 요소를 찾습니다 — 같은id둘에 건#링크가 앞쪽으로 가는 것과 같습니다. 그래서 라벨 둘이 모두 출발일 칸에 붙어, '도착일' 글자를 눌러도 출발일 칸이 골라집니다.- 도착일 칸에는 짝지은 라벨이 없어 읽는 이름이 빕니다.
- 라벨 둘이 한 칸에 붙으면 크롬은 두 라벨 글을 이어 그 칸의 이름으로 씁니다. 잰 값 첫 줄의 '출발일 도착일'이 그것입니다.
id는 한 페이지에 하나뿐인 이름표입니다. 둘째 칸을id="d2"로, 둘째 라벨을for="d2"로 고칩니다. 검사기도 같은id를 Error로 잡습니다.- (가)에 도착일 칸, (나)에 '도착일'을 쓴 것은 라벨이 저마다 바로 뒤 칸에 붙는다고 본 것입니다. 라벨의 짝은 자리가 아니라
for와id가 정합니다.
다시 볼 레슨: id와 class · label로 칸에 이름 붙이기
문제 5
후기 폼에 사진을 올려도 되는지 묻는 체크박스를 더했습니다. value는 적지 않았습니다.
<form>
<label for="nm">이름</label>
<input id="nm" name="nm" />
<input
type="checkbox"
id="ag"
name="agree"
/>
<label for="ag">
사진 올려도 됨
</label>
<button>보내기</button>
</form>
- (가) 이름 칸에
jiho를 치고 체크박스를 고른 뒤 '보내기'를 누르면, 주소 끝에 무엇이 붙을까요??부터 끝까지 쓰세요. - (나) 체크박스를 고르지 않고 보내면 주소 끝은 어떻게 될까요?
힌트
체크박스를 고른 때와 고르지 않은 때를 나눠, 칸마다 name과 보낼 값을 적어 보세요.
힌트 둘
체크박스의 value가 비었을 때 보내지는 값과, 고르지 않은 체크박스가 주소에 남는지를 따로 따져 보세요.
정답
(가) ?nm=jiho&agree=on · (나) ?nm=jiho
form의 주소?nm=jiho&agree=on
체크박스를 고르지 않고 보낸 뒤입니다.
<form>
<label for="nm">이름</label>
<input id="nm" name="nm" />
<input
type="checkbox"
id="ag"
name="agree"
/>
<label for="ag">
사진 올려도 됨
</label>
<button>보내기</button>
</form>form의 주소?nm=jiho
- 체크박스 · 라디오는 고른 것만 보내고, 보내는 값은
value입니다.value를 적지 않으면 브라우저가on을 보냅니다 — 받는 쪽은 무엇을 골랐는지 알기 어렵습니다.value="yes"처럼 적어 둡니다. - (가)에 라벨 글을 값으로 쓴 것은 라벨이 보내진다고 본 것입니다. 보내지는 것은 늘
value입니다. - (나)에
agree=을 붙인 것은 체크박스도 비운 글자 칸처럼 빈 값으로 간다고 본 것입니다. 고르지 않은 체크박스는 아예 빠집니다.
다시 볼 레슨: 입력 칸의 종류 · name과 value
문제 6
후기 폼의 한 줄 평 칸에 처음 글 '맛있어요'를 넣었습니다. 줄 나누기 꼴대로 여는 태그 다음 줄에 두 칸 들여 썼습니다. 결과 화면의 칸은 어떻게 보일까요? 보기 셋 가운데 고르세요.
<textarea>
맛있어요
</textarea>
힌트
<textarea …> 바로 뒤부터 </textarea> 바로 앞까지의 글자를 빈칸 · 줄바꿈까지 하나하나 적어 보세요.
힌트 둘
여러 줄 글 칸 안의 빈칸과 줄바꿈도 문단처럼 하나로 합쳐질까요?
정답
② — 첫 줄에 두 칸 띄고 '맛있어요'가 보입니다.
textarea안의 빈칸과 줄바꿈은 합쳐지지 않고 그대로 칸 안 글이 됩니다(브라우저 규칙 2의 예외). 여는 태그 바로 뒤 줄바꿈 하나만 버리니, 둘째 줄의 두 칸 들임과 '맛있어요' 뒤 줄바꿈이 남습니다. 그대로 보내지기도 합니다.- 그래서
textarea는 줄 나누기 꼴로 나누지 않고>바로 뒤에 글을 붙여 씁니다 — ①이 그렇게 쓴 화면입니다. - ①은 칸 안도 문단처럼 빈칸이 합쳐진다고 본 것입니다.
- ③은 처음 글은
value속성에만 적는다고 본 것입니다.textarea의 처음 글은 태그 사이에 씁니다.
다시 볼 레슨: 여러 줄 글과 고르는 칸 · 공백 규칙과 특수 문자
문제 7
자전거 대여 폼의 헬멧 크기 칸입니다. option에 value를 적지 않았습니다. 'M'을 고르고 '빌리기'를 누르면 주소 끝에 무엇이 붙을까요? ?부터 끝까지 쓰세요.
<form>
<label for="hm">헬멧</label>
<select id="hm" name="helmet">
<option>S</option>
<option>M</option>
</select>
<button>빌리기</button>
</form>
힌트
select의 name과, 고른 option 줄에 적힌 것을 따로 적어 보세요.
힌트 둘
고른 option에 value가 없을 때 무엇이 값으로 가는지 떠올려 봅니다.
정답
받는 답: ?helmet=M
form의 주소?helmet=M
select는name="helmet"으로 고른option의value를 보냅니다.value를 적지 않으면 그option의 화면 글 'M'이 값이 됩니다.- 화면 글이 한글이면
%꼴로 길게 가니, 받는 쪽이 쓸 값은value로 적어 둡니다. ?helmet=로 쓴 것은value가 없으면 빈 값이 간다고 본 것입니다.?hm=M으로 쓴 것은id가 보낼 이름이라고 본 것입니다.
다시 볼 레슨: 여러 줄 글과 고르는 칸 · name과 value
문제 8
동아리 가입 폼입니다. 두 칸 모두 꼭 채울 칸인데, 둘 다 비운 채 '신청'을 눌렀습니다.
<form>
<label for="nm">이름</label>
<input
id="nm"
name="nick"
required
/>
<label for="ph">연락처</label>
<input
id="ph"
name="phone"
required
/>
<button>신청</button>
</form>
- (가) 폼이 떠나나요?
- (나) 포커스가 옮겨 가 말풍선이 뜨는 칸의 읽는 이름은?
- (다) 그 말풍선의 글은 어느 것일까요(크롬 한국어)? ① 이 입력란을 작성하세요. ② 값은 1 이상이어야 합니다. ③ 두 칸에 말풍선이 하나씩 뜬다
힌트
두 칸의 검사 속성을 보고, '신청'을 누른 뒤 브라우저가 하는 일을 차례로 적어 보세요.
정답
(가) 떠나지 않는다 · (나) 이름 · (다) ①
form의 주소(떠나지 않음)- 지금 포커스의 읽는 이름이름
#nm의 말풍선이 입력란을 작성하세요.
required인 칸이 비면 브라우저가 제출을 막고, 잘못된 칸 가운데 첫 칸 하나로 포커스를 옮겨 말풍선을 띄웁니다. 둘째 칸은 첫 칸을 채운 뒤 다시 누르면 말풍선이 뜹니다.- ②는 숫자 칸의
min이 띄우는 말풍선입니다. 이 폼에는min이 없습니다. - ③은 잘못된 칸마다 한꺼번에 말풍선이 뜬다고 본 것입니다.
- 말풍선 글은 브라우저와 언어마다 다릅니다 — 이 글은 크롬 한국어 기준입니다. 결과 화면에서는 눌러도 말풍선이 뜨지 않으니, 내 파일에서 눌러 봅니다.
다시 볼 레슨: 브라우저가 해 주는 검사
문제 9
자전거 동아리의 코스 찾기 폼입니다. 나중에 JavaScript로 지도를 띄우려고 '지도 보기' 단추를 먼저 더해 두었습니다. 칸에 bike를 치고 '지도 보기'를 누르면 주소 끝에 무엇이 붙을까요? ?부터 끝까지 쓰세요. 떠나지 않으면 '떠나지 않음'이라고 씁니다.
<form>
<label for="q">찾기</label>
<input id="q" name="q" />
<button>지도 보기</button>
</form>
힌트
button 여는 태그에 type이 적혀 있는지 보세요.
힌트 둘
폼 안에서 type을 적지 않은 단추는 어떤 단추로 치는지 떠올려 봅니다.
정답
받는 답: ?q=bike
form의 주소?q=bike
- 폼 안의
button은type을 적지 않으면 제출 단추입니다. 이름이 '지도 보기'여도 누르면 칸의 값을 들고 떠납니다(브라우저 규칙 1). 새로 불려 온 페이지의 칸은 비어 있습니다. - 나중에 JavaScript가 할 일을 붙일 단추처럼, 보내지 않을 단추는
type="button"으로 적습니다. - '떠나지 않음'은 단추가 누르면 제 이름대로의 일만 한다고 본 것입니다(단추는 조용하다는 생각).
문제 10
9번 폼의 단추를 꾸민 규칙입니다. 글자 크기를 본문과 같게 하려다 단위를 빠뜨렸습니다.
<button>지도 보기</button>
button {
font-size: 16;
color: #ffffff;
background-color: #005bb5;
}
- (가) 단추의 글자색과 바탕색은?
- (나) 단추를 골라 Styles 창을 보면
font-size: 16;줄은 어떻게 보일까요? 그 단추의 글자 크기는 본문만 하게 바뀔까요, 기본 스타일의 크기 그대로일까요?
힌트
세 선언을 한 줄씩 따로 보고, 값마다 단위나 꼴이 맞는지 보세요.
정답
(가) 글자색 #ffffff · 바탕색 #005bb5 · (나) 취소선이 그어지고 ⚠가 붙는다 — 글자 크기는 기본 스타일 그대로다
button의 font-size 선언(없음)button의 글자색rgb(255, 255, 255)button의background-colorrgb(0, 91, 181)button의 글자 배율0.83
font-size의 길이에는 단위가 있어야 합니다.16처럼 단위 없는 값은 알아듣지 못해 그 선언 한 줄만 버립니다(브라우저 규칙 4). 뒤의 두 선언은 그대로 닿습니다.- 버린 선언은 Styles 창에서 취소선이 그어지고 ⚠가 붙습니다. 잰 값의
font-size 선언 (없음)은 브라우저가 그 선언을 남기지 않았다는 뜻입니다. - 그래서 단추 글자 크기는 기본 스타일 그대로입니다. 단추의 기본 글자는 본문보다 작아(글자 배율 0.83), 본문만 하게 하려면
16px로 씁니다. - (가)에 기본 색(흰 바탕 · 검은 글자)을 쓴 것은 틀린 줄 아래 선언이 모두 버려진다고 본 것입니다(CSS도 멈춘다는 생각).
- (나)에 '본문만 하게'를 쓴 것은 브라우저가 단위 없는
16을16px로 알아서 읽는다고 본 것입니다.
다시 볼 레슨: 규칙의 모양 · 색 쓰기 · 브라우저 기본 스타일과 Styles 창
문제 11
하고 싶은 일에 쓸 요소나 속성 · 값의 이름을 쓰세요.
- (가) 칸 앞의 글을 그 칸의 이름으로 붙인다(글자를 눌러도 칸이 골라진다)
- (나) 칸의 값을 보낼 때 주소에 붙는 이름을 적는다
- (다) 한 물음의 라디오 여럿을 묶고, 물음 글을 함께 적는다
- (라) 누르면 칸들을 파일에 적힌 값으로 되돌리는 단추의
type값
힌트
(다)는 묶는 요소와 물음 글을 적는 요소, 둘을 씁니다.
정답
받는 답: (가) label · (나) name · (다) fieldset과 legend · (라) reset
- (가)에
placeholder를 쓰면 다른 답입니다 — 칸이 비었을 때만 보이는 보기 글입니다. - (나)에
id를 쓰면 다른 답입니다 —id는 라벨과 CSS가 찾는 이름표입니다. - (다)에
fieldset하나만 써도 반은 맞습니다. 물음 글은 그 안 맨 처음의legend에 씁니다. - (라)에
button을 쓰면 다른 답입니다 —type="button"은 아무것도 하지 않는 단추입니다.
다시 볼 레슨: label로 칸에 이름 붙이기 · name과 value · 여러 줄 글과 고르는 칸 · 단추의 type
문제 12
후기 폼에 한 줄 평 칸을 넣었더니, 아래 '보내기' 단추가 사라지고 칸 안에 <button>보내기</button> 같은 글이 보입니다. 검사기에 넣었더니 아래 줄들이 떴습니다. 몇 번 줄을 어떻게 고쳐야 할까요? 고칠 줄을 골라 고쳐 보세요.
- Error1줄Self-closing syntax (“/>”) used on a non-void HTML element. Ignoring the slash and treating as a start tag.
- Error2줄End of file seen when expecting text or an end tag.
- Error1줄Unclosed element “textarea”.
힌트
검사기의 첫 Error가 가리키는 줄과, 그 줄의 끝 기호를 보세요.
힌트 둘
/>로 끝내도 되는 요소는 안에 아무것도 담지 않는 빈 요소(img · input)뿐입니다. textarea는 처음 글을 태그 사이에 담는 요소입니다.
위아래 화살표로 줄을 옮기고 Enter로 고릅니다.
여기서 고친 코드는 저장하지도 보내지도 않습니다. 새로 열면 처음 코드입니다.
정답
받는 답: 1번 줄을 <textarea></textarea>로 고칩니다.
<textarea></textarea>
<button>보내기</button>button의 고른 글보내기textarea의 값(없음)
'안 먹을 때 찾는 차례'의 2번 '요소가 나무에 내 생각대로 있나'에서 찾습니다.
- 1번은 지나갑니다 — 칸은 그려졌으니 파일은 열렸습니다.
- 2번 — 검사기 첫 줄이 '빈 요소가 아닌 요소에
/>를 썼다 — 빗금을 버리고 여는 태그로 친다'고 알려 줍니다. 브라우저는 멈추지 않고<textarea>를 연 채로 두어, 그 뒤의 글자를 모두 칸 안의 처음 글로 읽었습니다. 단추는 나무에 요소로 지어지지 않았습니다(브라우저 규칙 2). 나머지 Error 둘은 이 하나에서 이어진 것입니다. textarea는 여는 태그와 닫는 태그를 짝으로 씁니다. 처음 글이 없으면 둘을 붙여 씁니다.
<textarea />
<button>보내기</button>body의 나무<textarea><button>보내기</button></body></html></textarea>
고치기 전의 나무입니다. < · >는 칸 안 글이 된 < · >이고, 파일 끝의 </body> · </html>까지 칸 안 글이 되었습니다.
- 흔한 오답은
/만 지워<textarea>로 두는 것입니다. 빗금은 원래 버려지니 아무것도 바뀌지 않습니다. - 닫는 태그를 다음 줄에 두는 것(
<textarea>다음 줄</textarea>)은 칸이 비고 단추도 돌아옵니다. 여는 태그 바로 뒤의 줄바꿈 하나는 버려지기 때문입니다. 다만 그 사이에 빈칸이 들면 칸 안 글이 되니, 붙여 쓰는 꼴을 권합니다.
다시 볼 레슨: 여러 줄 글과 고르는 칸 · 요소 안의 요소 · 검사기로 틀린 HTML 찾기
문제 13 (만들어 보기)
자전거 동아리 가입 폼의 메일 칸을 만듭니다. 칸 앞에 라벨 '메일'을 두고, 친 글은 join.html로 mail이라는 이름으로 보냅니다. 비우거나 메일 주소 꼴이 아니면 보내지 못하게 하고, 단추 '가입'으로 보냅니다.
하위 목표 넷을 차례로 채우세요. 2 · 3은 1에서 쓴 칸에 속성을 더합니다.
<form action="join.html">
<!-- 1. 라벨과 칸 짝 -->
…
<!-- 2. 보낼 이름 -->
<!-- 3. 검사 속성 -->
<!-- 4. 단추 type -->
…
</form>
나와야 할 결과는 둘입니다.
- 칸에
abc를 치고 '가입'을 누르면 떠나지 않고, 메일 칸에 '@'가 없다는 말풍선이 뜬다. - 라벨 '메일'을 누르면 메일 칸이 골라지고, 칸의 읽는 이름이 '메일'이다.
힌트
3은 칸의 종류(type)와 꼭 채울 칸 표시, 둘을 떠올립니다.
정답
모범 답입니다.
<form action="join.html">
<label for="mail">
메일
</label>
<input
type="email"
id="mail"
name="mail"
required
/>
<button type="submit">
가입
</button>
</form>form의 주소(떠나지 않음)#mail의 말풍선이메일 주소에 '@'를 포함해 주세요. 'abc'에 '@'가 없습니다.#mail의 읽는 이름메일
말풍선 글은 크롬 한국어 기준입니다.
확인 목록을 다 채웠으면 맞습니다. 코드가 모범 답과 달라도 됩니다.
다르게 써도 되는 곳:
input의 속성 차례(type·id·name·required)는 바꿔도 됩니다.- 폼 안의 단추는
type을 적지 않아도submit이라type="submit"을 빼도 같은 결과입니다. 다만 무엇을 하는 단추인지 읽히게 적어 둡니다. - 라벨 안에 칸을 넣어 감싸는 꼴(
for·id없이)도 읽는 이름이 '메일'입니다.
흔한 잘못:
type="email"만 두고required를 빠뜨리면 비운 칸은 그대로 보내집니다. 꼴 검사는 글이 있을 때만 합니다.- 라벨의
for에 칸의name값을 적으면,name과id가 다를 때 짝이 끊깁니다. 짝은 늘id와 맞춥니다. - 단추를
type="button"으로 쓰면 바른 메일을 쳐도 보내지지 않습니다.
다시 볼 레슨: label로 칸에 이름 붙이기 · name과 value · 브라우저가 해 주는 검사 · 단추의 type
문제 14 (만들어 보기)
레시피 노트의 다섯째 단계입니다(⟨컴퓨터⟩ · 30분 안팎 · 걸음마다 멈춰도 됩니다). 김치볶음밥 페이지 끝에 후기 남기기 폼을 더하고, 라벨 · 칸 · 단추의 글자와 색을 꾸밉니다.
이 단계 시작 파일 — 5단원 끝 상태
5단원 연습 문제 13번의 모범 답입니다. recipe-note 폴더에 세 파일을 두고 시작합니다.
recipe-note 안 images 폴더에 그림 여섯을 받아 둡니다 — 앞 단계에서 받았으면 그대로 씁니다.
할 일 — 네 걸음입니다. 이 단계에서는 목록 페이지를 고치지 않습니다.
걸음 1. 후기 영역 — 김치볶음밥 페이지의 article 맨 끝(영양 정보 section 뒤)에 section을 하나 더하고, 그 안에 제목 h2 '후기 남기기'와 form을 둡니다. 받는 곳이 따로 없으니 action · method는 적지 않습니다 — 보내면 지금 페이지로 다시 옵니다.
걸음 2. 칸 넷 — 폼 안에 아래 차례로 씁니다. 앞의 셋은 저마다 div로 감쌉니다.
| 묻는 것 | 칸 | 라벨 · 보낼 이름 · 검사 |
|---|---|---|
| 이름 | 글자 칸 | 라벨 '이름' · nickname · 꼭 채움 · 20자까지 |
| 별점 | 고르는 칸 select | 라벨 '별점' · rating · 보기 '5점' ~ '1점'(보내는 값 5 ~ 1) · 처음에 5점이 골라져 있음 |
| 한 줄 평 | 여러 줄 글 칸(두 줄) | 라벨 '한 줄 평' · comment · 100자까지 |
| 다시 만들 의향 | 라디오 둘 '네' · '아니요'(보내는 값 yes · no) | 묶음과 물음 '다시 만들어 볼 건가요?' · again · 꼭 고름 |
걸음 3. 보내는 단추 — 폼 끝에 제출 단추 '후기 남기기'를 둡니다.
걸음 4. CSS 한 걸음 — 라벨 · 칸 · 단추의 글자와 색 — style.css 끝에 규칙을 더합니다. 여러 요소를 한 규칙으로 묶는 법은 8단원에서 배우니, 요소마다 규칙을 하나씩 씁니다. 여백은 10단원에서 다룹니다.
| 고를 요소 | 바꿀 것 |
|---|---|
라벨(label) | 굵게 |
글자 칸(input) · 고르는 칸(select) · 여러 줄 글 칸(textarea) | 글자 크기 16px(본문과 같게) |
단추(button) | 바탕 #005bb5 · 글자색 #ffffff · 글자 크기 16px |
확인 목록:
- 라벨 글자를 누르면 그 칸이 골라진다(화면 · 걸음 2).
- 라디오 '네'와 '아니요'는 하나만 골라진다(화면 · 걸음 2).
- 이름을 비운 채 '후기 남기기'를 누르면 떠나지 않고, 이름 칸에 말풍선이 뜬다(화면 · 걸음 2 · 3).
- 이름
haneul, 별점 4점, 한 줄 평good, '네'를 골라 보내면 주소 끝에nickname=haneul부터again=yes까지 네 조각이&로 이어 붙는다(주소창 · 세 걸음 끝). - 칸 안 글자가 본문과 같은 크기이고, 단추는 파란 바탕에 흰 글자다(화면 · 걸음 4).
- 검사기 Error가 0이다(검사기 — Info는 접어 둠 · 네 걸음 끝).
폰으로만 따라왔다면 이 물음 하나로 대신합니다. 확인 목록 넷째 줄처럼 보냈을 때, 주소 끝의 조각이 붙는 차례대로 기호를 늘어놓으세요.
- ㉠
again=yes - ㉡
comment=good - ㉢
nickname=haneul - ㉣
rating=4
힌트
걸음마다 그 걸음의 확인 목록을 봅니다. 칸마다 라벨의 for와 칸의 id를 같은 글자로, 보낼 이름은 name으로 따로 적습니다.
정답
모범 답 전체는 받기 파일입니다. 내 파일과 견줘 봅니다.
걸음 1 ~ 3 — 후기 section(제목 h2 '후기 남기기' 아래) 안의 폼 뼈대입니다. div 셋은 차례로 이름 · 별점 · 한 줄 평이고, 칸마다 속성은 받기 파일에 있습니다.
<form>
<div>…</div>
<div>…</div>
<div>…</div>
<fieldset>
<legend>
다시 만들어 볼 건가요?
</legend>
…
</fieldset>
<button type="submit">
후기 남기기
</button>
</form>별점 칸의 처음 줄과 다시 만들 의향의 첫 라디오입니다.
<label for="rating">
별점
</label>
<select
id="rating"
name="rating"
>
<option
value="5"
selected
>
5점
</option>
…
</select><input
type="radio"
id="again-yes"
name="again"
value="yes"
required
/>
<label
for="again-yes"
>
네
</label>걸음 4 — style.css 끝에 더한 규칙입니다.
<label for="nm">이름</label>
<input id="nm" />
<button type="submit">
후기 남기기
</button>
label {
font-weight: bold;
}
input {
font-size: 16px;
}
select {
font-size: 16px;
}textarea {
font-size: 16px;
}
button {
background-color: #005bb5;
color: #ffffff;
font-size: 16px;
}label의font-weight700input의font-size16pxbutton의background-colorrgb(0, 91, 181)button의 글자색rgb(255, 255, 255)button의font-size16px
확인 목록을 다 채웠으면 맞습니다. 코드가 모범 답과 달라도 됩니다.
다르게 써도 되는 곳:
- 라벨 안에 칸을 넣어 감싸는 꼴로 써도 됩니다. 그 꼴이면
for·id가 없어도 짝입니다. select의 처음 고른 칸은selected를 '5점'에 붙여도 되고, 아예 빼도 됩니다 — 아무것도 고르지 않았으면 맨 위 '5점'이 골라져 보입니다.- 라디오 둘에 모두
required를 붙여도 됩니다. 묶음 가운데 하나에만 붙여도 묶음 전체가 꼭 고를 칸이 됩니다.
흔한 잘못:
- 라디오 둘의
name을 다르게 쓰면 둘 다 골라지고, 주소에 두 이름이 따로 붙습니다. option에value를 빼면 '4점' 같은 화면 글이%꼴로 길게 갑니다(7번).textarea를 줄 나누기 꼴로 다음 줄에 닫으며 들여 쓰면, 들인 빈칸이 칸 안 글이 됩니다(6번).- 단추 규칙에
font-size: 16;처럼 단위를 빠뜨리면 그 줄만 버려져 단추 글자가 작게 남습니다(10번). - CSS에서
input, select, textarea처럼 쉼표로 묶어도 같은 화면이 됩니다 — 8단원에서 배울 선택자 목록입니다. 다만 쉼표 하나를 빠뜨리면 전혀 다른 뜻이 되니 그때 자세히 봅니다.
폰 물음의 답은 ㉢ ㉣ ㉡ ㉠입니다. 주소의 조각은 폼 안 칸의 차례대로 붙습니다 — 받기 파일을 열어 보내면 주소 끝이 ?nickname=haneul로 시작해 &again=yes로 끝납니다.
다시 볼 레슨: 폼과 제출 · name과 value · label로 칸에 이름 붙이기 · 입력 칸의 종류 · 여러 줄 글과 고르는 칸 · 단추의 type · 글자 꾸미기