아래처럼 레이어 팝업을 화면의 정 가운데 위치시키는 게 필요한 경우가 있다.
HTML
우선 이런 식으로 레이어를 준비한다. 보통은 body
를 닫기 직전에 둔다.
<div class="js-layer layer hidden">
<!-- 내용은 알아서 -->
</div>
js-layer
클래스는 js 제어를 위한 클래스고, hidden
클래스는 감춰 두기 위한 것이다. js에서 레이어를 보이게 할 때 이 hidden
클래스를 제거해서 보이게 한다.
다음은 레이어를 열게 할 버튼용 html 태그다. 역시 js-open
은 js 제어를 위한 클래스고, open-button
클래스는 스타일링을 위한 클래스다.
<button type="button" class="js-open open-button">Open Layer</button>
CSS
CSS가 핵심이다. 설명은 아래에 있다.
/* basic */
.layer {
position: fixed;
width: 40%;
left: 50%;
margin-left: -20%; /* half of width */
height: 300px;
top: 50%;
margin-top: -150px; /* half of height */
overflow: auto;
/* decoration */
border: 1px solid #000;
background-color: #eee;
padding: 1em;
box-sizing: border-box;
}
- 우선 포지션은
fixed
로 한다. 그러면 화면을 스크롤 해도 레이어는 계속 화면 한 가운데 있게 된다. width
,left
,margin-left
를 이용해서 좌측 위치를 가운데로 맞추는 기법이다.left: 50%
를 주면 화면 좌측의 50% 위치에서 레이어가 시작된다. 이 때 음수 마진을 레이어 너비의 절반 만큼 주면 레이어 너비의 절반 만큼 레이어가 왼쪽으로 이동하면서 가운데 오게 되는 것이다.height
,top
,margin-top
을 이용해서 상단 위치를 가운데로 맞추는 기법이다.top: 50%
를 주면 화면 상단의 50% 위치에서 레이어가 시작된다. 이 때 음수 마진을 레이어 높이의 절반 만큼 주면 레이어 높이의 절반 만큼 레이어가 위로 이동하면서 가운데 오게 되는 것이다.- 레이어의 내용이 넘치면 스크롤이 생기도록
overflow: auto
를 준다.
아래 코드는 화면이 좁을 때 레이어 너비를 좀더 넓히는 CSS 코드다.
@media (max-width: 600px) {
.layer {
width: 80%;
margin-left: -40%;
}
}
아래 코드는 처음에 레이어를 감춰 두기 위한 코드다.
.hidden {
display: none;
}
자바스크립트
.js-open
버튼을 클릭하면 레이어에서 hidden
클래스를 뗀다.
$('.js-open').click(function () {
var $layer = $('.js-layer');
$layer.removeClass('hidden');
});
이게 전부다.
접근성
스크린 리더 등 보조 기기 사용자들을 위해 팝업으로 초점을 옮겨 줘야 한다. 여기서 다룰 주제는 아니니 넘어간다. 해당 내용은 Using ARIA role=dialog to implement a modal dialog box 등을 참고하라.
데모
데모는 jQuery 3을 사용하므로 구형 브라우저에서 돌아가지 않는다.
[…] 콘텐트를 불러 와서 화면 한 가운데 박는 코드도 내가 예전에 만들어 둔 코드를 […]
[…] […]
필자님의 강좌를 잘 따라서 레이어팝업을 만들었는데 정중앙으로 띄우는게 잘 이해가 안가네요
저같은 경우에는 스위치케이스문으로 이미지 다때려박고 클릭했을때 마스크띄우고 이미지띄우게했는데
흠 어떻게 해야될까요?
질문이 이해가 안 됩니다.