Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 CSS가 어려운 이유 — 프로젝트 중심 실전 CSS 강의 소개 2023-04-13
📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

레이어 팝업 박스를 화면 정 가운데 위치시키기

너비와 높이가 고정돼 있는 박스에 해당하는 방법이다. CSS를 이용해서 정 가운데로 위치시킨 뒤, js로 화면에 표시한다.

아래처럼 레이어 팝업을 화면의 정 가운데 위치시키는 게 필요한 경우가 있다.

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을 사용하므로 구형 브라우저에서 돌아가지 않는다.

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

댓글 (4개)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다