모달창 open이 생각한 것보다 잘되지 않아서 애를 먹었다.
여러 시도 끝에 해결한 방법!
일단 모달창을 숨겨두고 display:none
(여기까진 진행)
function modalOpen() {
document.querySelector('.modal-box').style.display = 'block';
}
로그인 버튼에 onclick="modalOpen()"
을 지정한다.
구글링으로 코드를 참고해서
querySelector
를 사용했는데getElementById
와의 차이점이 궁금해졌다.
getElementById
: id를 통해 element를 반환한다.
querySelector
: Selector의 구체적인 그룹과 일치하는 document의 첫번째 element를 반환한다.
getElementById가 처리속도가 빠르고 브라우저 호환성이 좋다고 한다.
그래서 거의 getElementById를 사용하지만, 페이지가 복잡하고 모든 페이지에 ID를 추가하지 않으려면 querySelector를 사용하기도 한다.
open과 비슷한 원리로 close 버튼에도 적용했다. close에는 onclick="modalClose()"
주기
function modalClose() {
document.querySelector('.modal-box').style.display = 'none';
document.querySelector('body').style.display = 'block';
}
1. 로고 이미지 alt 값 수정 (alt="위니브로고" → “위니브”)
2. check-box 클릭 수정
p
로 1차 작업을 했는데, input type="checkbox"
, label
로 수정
<input type="checkbox" id="check-box" class="check-box-hide">
<label for="check-box" class="check-box-hold">로그인 상태 유지</label>
checkbox input을 숨긴다.
.check-box-hide {
position: absolute;
clip: rect(0 0 0 0);
width: 1px;
height: 1px;
margin: -1px;
overflow: hidden;
}
check-box-hold 클래스에 가상 요소 선택자(::before)로 이미지를 넣는다.
.check-box-hold::before {
content: '';
width: 22px;
height: 22px;
float: left;
margin-right: 8px;
background: url('image/check-box.png') -10px -10px;
}
빈 체크 → 체크 선택 시, 이미지 변경 (이미지 스프라이트기법 사용)
.check-box-hide:checked+.check-box-hold::before {
background: url('image/check-box.png') -52px -10px;
}
2-1. check-box 클릭 시, outline 지정
→ 시각적 효과로 웹 접근성 고려
.check-box-hide:focus+.check-box-hold::before {
outline: 2px solid #000;
outline-offset: 3px;
}
3. html 마크업 구조에서 모달창의 close 버튼은 section의 제일 마지막에 배치
→ 웹 접근성 고려
스크린 리더로 페이지를 읽을 때 내용을 다 읽어주고 닫기 버튼이 나와야.
html 구조상 가장 아래 두는 것이 맞지만, position으로 사용자 눈에는 잘 보이도록 배치한다.
padding
, margin
을 사용할 것p
태그의 높이는 line-height로 주는게 좋다.calc()
함수1. 마크업
1) Heading 태그는 h1부터 순차적으로 사용하자
<h2 class="weniv-logo">
<img src="image/weniv-logo.png" alt="위니브">
</h2>
h1
없이 h2
만 사용해버렸다. 일단 h1을 통해 해당 페이지가 어떤 페이지인지 작성하자.
텍스트를 디자인적으로 감추는 것은 css로 숨김처리하자.
h1 사용 → article 안에 h2 사용
2) weniv 로고
검색 최적화 측면에서는 img alt 속성을 사용하는 것보다 css에서 h2의 배경이미지로 넣어주는게 좋다. (span은 숨김처리)
<h2 class="weniv-logo"><span>위니브</span></h2>
3) input
은 label
과 함께 작성하자
사용자가 어떤 input인지 알 수 있도록 label과 함께 쓰는 것이 좋다.
아래 코드에서 아이디와 비밀번호를 입력받는 부분에 placeholder로 어떤 input인지 힌트를 제공하고 있지만, 스크린리더에 잘 읽힐 것이라는 보장이 없다. 때문에 label을 사용하는 것이 좋다. 디자인적으로는 보이지 않아도 되니 체크박스를 가린 것처럼 동일하게 처리해주자!
<input type="text" name="userID" class="userID" placeholder="아이디">
<input type="password" name="userPW" class="userPW" placeholder="비밀번호">
4) <p class="or">또는</p>
span
으로 하는 것이 좋겠다!
5) 창닫기 버튼
a
태그는 새로운 페이지로 이동할 때 쓰이지만, 여기서 창닫기 버튼은 페이지 이동이 아닌 단순히 모달을 닫기 위한 버튼이기 때문에 버튼 태그를 사용하자!
button 태그의 배경이미지를 "image/close.png"로 설정하고, 어떤 버튼인지 명시하기 위해 span을 통해 "창닫기"를 작성한 후 숨김처리 해주기!
<button type="button" class="close" onclick="modalClose()">
<span>창닫기</span>
</button>
2. CSS
1) 중복되는 속성
중복되는 부분은 .sns-btn::before
를 선택해서 한번에 작성해주자
.sns-btn::before {
content: '';
width: 28px;
height: 28px;
float: left;
position: absolute;
top: 50%;
left: 15px;
margin-top: -14px;
}
.google-login::before {
background: url(image/sns.png) -10px -10px;
}