CSS로 오버레이(Overlay) 효과를 구현하는 방법을 소개합니다. 오버레이는 화면 전체를 어둡게 덮는 반투명 레이어로, 검색창·모달 창·이미지 라이트박스 등 다양한 UI에서 널리 활용되는 패턴입니다.
핵심 원리
오버레이 효과의 핵심은 다음 세 가지 CSS 속성입니다.
position: fixed;— 스크롤 위치와 관계없이 화면 전체에 고정z-index: 1;— 기존 콘텐츠보다 위쪽 레이어에 배치display: none / block;— JavaScript로 오버레이를 열고 닫는 전환 제어
전체 예제 코드
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/fontawesome.min.css">
<style>
body {
font-family: Arial;
}
* {
box-sizing: border-box;
}
.showBtn {
background: #008b0c;
border: none;
color:white;
padding: 10px 15px;
font-size: 20px;
cursor: pointer;
opacity: 0.8;
}
.showBtn:hover {
opacity: 1;
}
.overlay {
height: 100%;
width: 100%;
display: none;
position: fixed;
z-index: 1;
top: 0;
left: 0;
background-color: rgba(0, 0, 0, 0.747);
}
.overlay .hideBtn {
position: absolute;
top: 20px;
right: 45px;
font-size: 60px;
cursor: pointer;
color: rgb(255, 0, 0);
opacity: 0.8;
}
.overlay .hideBtn:hover {
opacity: 1;
}
.overlay input[type=text] {
padding: 15px;
font-size: 17px;
border: none;
float: left;
width: 80%;
background: white;
}
.overlay input[type=text]:hover {
background: #f1f1f1;
}
.overlay button {
float: left;
width: 20%;
padding: 15px;
background: rgb(54, 21, 241);
font-size: 17px;
border: none;
color:white;
cursor: pointer;
opacity: 0.8;
}
.overlay button:hover {
opacity: 1;
}
</style>
</head>
<body>
<div class="overlay" >
<span class="hideBtn">×</span>
<div class="searchBar">
<form >
<button type="submit">Close Overlay</button>
</form>
</div>
</div>
<h1>Overlay Effect Example</h1>
<button class="showBtn">Turn Overlay On</button>
<h2>Click on the above button to try overlay effect</h2>
<script>
document.querySelector('.hideBtn').addEventListener('click',hideSearch);
document.querySelector('.showBtn').addEventListener('click',showSearch);
function showSearch() {
document.querySelector('.overlay').style.display = "block";
}
function hideSearch() {
document.querySelector('.overlay').style.display = "none";
}
</script>
</body>
</html>코드 설명
- .overlay — width와 height를 100%로 지정하고
rgba()로 반투명한 검정 배경을 적용해 화면 전체를 덮습니다. - .hideBtn — 오버레이 우측 상단에 배치된 닫기(X) 버튼으로, 클릭 시
display가none으로 바뀌며 오버레이가 사라집니다. - .showBtn — 본문의 초록색 버튼으로, 클릭 시
display가block으로 바뀌며 오버레이가 나타납니다. - :hover 효과 — 마우스를 올리면
opacity가 0.8에서 1로 변해 자연스러운 인터랙션을 제공합니다.
실행 결과
위 코드를 실행하면 다음과 같은 초기 화면이 출력됩니다.

"Turn Overlay On"(오버레이 켜기) 버튼을 클릭하면 화면 전체에 어두운 오버레이가 펼쳐지며, 우측 상단의 X 버튼을 눌러 닫을 수 있습니다.
