브라우저 환경에서 팝업 창 위치 정확하게 조절하기
date
Aug 30, 2024
slug
centering-popup-windows-accurately
author
status
Public
tags
React
portfolio
summary
브라우저의 단일 또는 듀얼 모니터 환경에서 window.open()을 사용하여 팝업 창을 화면 중앙에 정확하게 위치시키는 방법을 소개합니다.
type
Post
thumbnail
category
💻 Frontend
updatedAt
Jan 4, 2026 06:54 AM
팝업 창은 현재 많이 사용되지 않지만, 특정 상황에서 필요할 때가 있습니다.
window.open() 함수를 이용하면 간단하게 팝업창을 생성할 수 있습니다. 그러나 팝업창을 화면 중앙에 위치시키기 위해서는 위치 계산이 필요합니다. 특히, 듀얼 모니터를 사용하는 경우에는 기존의 계산 방식으로는 팝업 창이 예상치 못한 위치에 나타날 수 있습니다. 이에 따라, 단일 모니터와 듀얼 모니터 환경에서 팝업 창을 적절히 중앙에 배치하는 방법을 다룹니다.1. 기본 형태
기본적인 문법부터 알아봅시다.
var ret = window.open(url, name, specs, replace);
- 반환값 (ret)
- 새로 생성된 창에 대한 참조를 반환합니다. 팝업이 차단되어 창을 열 수 없거나 보안 설정으로 인해 창을 열지 못하면
null을 반환합니다. 이 객체를 통해 새 창을 제어할 수 있습니다 (예:ret.close()로 창 닫기).
- url
- 새 창에 로드할 URL을 지정합니다. URL을 제공하지 않으면
about:blank가 로드됩니다.
- name
- 새 창의 이름이나 타겟을 지정합니다. 이름이 이미 사용 중인 창이 있다면, 그 창에 URL이 로드됩니다.
_blank: 새 창이나 탭에 URL이 로드됩니다 (기본값)._parent: 현재 창의 부모 프레임에 URL이 로드됩니다. 부모 프레임이 없으면_self처럼 작동합니다._self: 현재 창에 URL을 로드합니다._top: 현재 창의 최상위 프레임에 URL이 로드됩니다.- 임의의 이름: 지정된 이름의 새 창이 열리며, 이름이 지정된 창이 이미 있다면 해당 창에 URL이 로드됩니다.
- specs
- 새 창의 모양이나 동작에 대한 세부 사항을 지정하는 선택적 문자열입니다. 다양한 속성을
key=value쌍으로 나열할 수 있으며, 각 속성은 쉼표로 구분됩니다. channelmode=yes|no|1|0: 전체 화면 모드에서 창을 열지 여부를 지정합니다 (IE에서만 작동).fullscreen=yes|no|1|0: 창을 전체 화면으로 열지 여부를 지정합니다 (주로 IE에서만 작동).height=pixels: 창의 높이를 픽셀 단위로 지정합니다.width=pixels: 창의 너비를 픽셀 단위로 지정합니다.left=pixels: 화면 왼쪽에서의 창 위치를 픽셀 단위로 지정합니다.top=pixels: 화면 상단에서의 창 위치를 픽셀 단위로 지정합니다.location=yes|no|1|0: 주소 표시줄을 보여줄지 여부를 지정합니다.menubar=yes|no|1|0: 메뉴바의 표시 여부를 지정합니다.resizable=yes|no|1|0: 창의 크기 조절 가능 여부를 지정합니다.scrollbars=yes|no|1|0: 스크롤바의 표시 여부를 지정합니다.status=yes|no|1|0: 상태바의 표시 여부를 지정합니다.titlebar=yes|no|1|0: 타이틀바의 표시 여부를 지정합니다 (일부 브라우저에서는 무시될 수 있습니다).toolbar=yes|no|1|0: 툴바의 표시 여부를 지정합니다.- replace
- 새 URL이 브라우저 히스토리에서 현재 항목을 대체할지, 아니면 새 항목을 만들지를 지정합니다.
true: 현재 항목을 대체합니다.false: 히스토리에 새 항목을 추가합니다.
2. 단일 모니터
const openGitHubPage = () => { const popupWidth = 1200; const popupHeight = 600; const popupX = Math.round(window.screen.width / 2 - popupWidth / 2); const popupY = Math.round(window.screen.height / 2 - popupHeight / 2); const featureWindow = "width=" + popupWidth + ", height=" + popupHeight + ", left=" + popupX + ", top=" + popupY; return window.open("https://github.com/alpaka206", "_blank", featureWindow); };
단일 모니터 환경에서는
window.screen.width와 window.screen.height를 이용하여 간단하게 팝업 창을 화면의 중앙에 위치시킬 수 있습니다.2. 듀얼 모니터
초기에는 단일 모니터 환경과 유사하게 듀얼 모니터의 중앙에 팝업창을 위치시키려 했습니다. 그러나 다양한 모니터 배치(옆으로, 위아래로, 대각선, 또는 2개 이상)로 인해 기존의 중앙 위치 계산 방법으로는 팝업창이 적절한 위치에 나타나지 않는 문제가 발생합니다.




이러한 문제를 해결하기 위해, 팝업창을 모니터의 물리적 중앙보다는 사용자가 현재 작업 중인 브라우저 창의 중앙에 위치시키는 방법이 더 효과적이라고 판단했습니다.
const openGitHubPage = () => { const popupWidth = 1200; const popupHeight = 600; const popupX = Math.round( window.screenX + window.outerWidth / 2 - popupWidth / 2 ); const popupY = Math.round( window.screenY + window.outerHeight / 2 - popupHeight / 2 ); const featureWindow = "width=" + popupWidth + ", height=" + popupHeight + ", left=" + popupX + ", top=" + popupY; return window.open("https://github.com/alpaka206", "_blank", featureWindow); };
이 접근 방식은 사용자가 팝업창을 더 직관적으로 인지하고 빠르게 접근할 수 있도록 합니다. 이렇게 변경하면 듀얼 모니터 환경에서도 팝업창이 기대하는 위치에 정확하게 나타나며 사용자 경험을 개선할 수 있습니다.
결론
기존에는
window.screen.width를 사용해 모든 환경에서 팝업창을 화면 중앙에 위치시켰습니다. 하지만 저는 단일 모니터든 듀얼 모니터든 관계없이 사용자가 현재 사용 중인 브라우저 창 중앙에 팝업창을 위치시키는 방법이 더욱 안전하고 사용자 친화적이라고 생각합니다.