본문 바로가기
프로그래머로의 여정

position: absolute;가 꼭 필요한 이유

by nunaaa 2025. 8. 29.

코드에서 position: absolute;를 사용하는 주된 이유는 요소를 완전히 숨기면서도 레이아웃에 영향을 주지 않도록 하기 위함입니다. 여러 가지 숨기는 방법 중에서도 특히 스크린 리더(화면 낭독 프로그램)에서는 내용을 읽을 수 있도록 보장하는 방식입니다.

🔍 position: absolute;의 역할

  1. 레이아웃에서 완전히 제거: position: absolute;는 요소를 일반 문서 흐름(normal flow)에서 제거합니다. 따라서 이 요소는 다른 요소의 위치나 크기에 전혀 영향을 미치지 않습니다. display: none;이나 visibility: hidden;도 비슷한 효과를 내지만, 스크린 리더 접근성 측면에서 차이가 있습니다.
  2. width: 0; height: 0;과의 시너지: 절대 위치(Absolute Positioning)와 크기를 0으로 설정하는 것을 조합하면, 요소는 차지하는 공간이 완전히 사라지지만 DOM에는 존재하는 상태가 됩니다. 이는 접근성에 매우 중요합니다.

📌 다른 속성들과의 협력 (은닉 메커니즘)

이 코드는 여러 속성을 조합하여 "시각적으로는 보이지 않지만, 보조 기기에서는 접근 가능"한 상태를 만듭니다. 각 속성의 역할은 다음과 같습니다.

  • width: 0; height: 0;: 요소의 실제 차지 영역을 없앱니다.
  • overflow: hidden;: 만약 내용이 있다면, 보이지 않도록 합니다.
  • line-height: 0;: 내부 텍스트의 줄 간격을 제거합니다.
  • text-indent: -9999px;: (가장 중요한 속성) 텍스트를 화면 밖으로 밀어내어 시각적으로는 보이지 않게 만듭니다. 하지만 스크린 리더는 이 텍스트를 인식하고 읽어줍니다.
  • position: absolute;: 이 모든 작업의 기초가 되어 요소가 문서 흐름을 벗어나게 함으로써, 다른 요소의 레이아웃을 방해하지 않도록 합니다.

🤔 왜 display: none;이나 visibility: hidden;을 쓰지 않나요?

이것이 가장 중요한 차이점입니다.

방법 시각적 표현 스크린 리더 접근성 레이아웃 영향
display: none; 숨김 읽지 않음 (접근성 불량) 영향을 주지 않음
visibility: hidden; 숨김 읽지 않음 (접근성 불량) 공간은 차지함
이 코드 조합 숨김 읽음 (접근성 양호) 영향을 주지 않음

✅ 결론: position: absolute;가 꼭 필요한 이유

이 특정 코드 조합의 목적이 "접근성을 보존하면서 시각적으로만 요소를 숨기는 것" 이기 때문입니다.

  1. 접근성 보장: display: none;이나 visibility: hidden;을 사용하면 스크린 리더가 내용을 읽지 못합니다. 하지만 이 방법은 텍스트를 화면에서만 밀어내므로 스크린 리더가 내용을 인식합니다.
  2. 레이아웃 무간섭: position: absolute;는 요소를 문서 흐름에서 제거하여 레이아웃에 영향을 주지 않는 display: none;의 장점은 유지합니다.
  3. 완전한 은닉: width: 0, height: 0 등 다른 속성들과 결합되어 시각적으로는 완전히 보이지 않게 만듭니다.

따라서, 스크린 리더 사용자에게는 내용을 제공해야 하지만 (예: "메뉴", "검색", "주요 콘텐츠로 건너뛰기" 링크), 시각적인 디자인에서는 보이지 않아야 할 때 이 방법을 주로 사용합니다. 이는 웹 접근성(Web Accessibility)을 준수하는 중요한 기법입니다.