HTML5에서 도입된 시맨틱(Semantic) 요소는 웹 문서의 구조를 의미 있게 표현해 주는 태그입니다. <nav>, <header>, <article>, <section>, <footer> 등이 대표적이며, 검색 엔진 최적화(SEO)와 접근성 향상에 큰 도움을 줍니다.
하지만 Internet Explorer 8 이하 버전은 이러한 시맨틱 요소를 인식하지 못한다는 문제가 있습니다. 구형 브라우저에서는 알 수 없는 태그로 처리되어 스타일이 깨지거나 레이아웃이 무너질 수 있습니다.
1. CSS로 기본 display 속성 설정하기
구형 브라우저는 시맨틱 요소를 인라인(inline) 요소로 취급하는 경우가 많습니다. 이를 방지하려면 아래와 같이 해당 요소들을 블록(block) 요소로 명시적으로 선언해 주면 됩니다.
article, header, nav, section, footer
{
display:block;
}이 간단한 CSS 규칙만으로도 대부분의 브라우저에서 시맨틱 요소가 정상적인 블록 레벨 요소로 렌더링됩니다.
2. JavaScript로 요소 직접 생성하기
IE8은 문서에 존재하지 않는 HTML5 태그를 인식하지 못하기 때문에, JavaScript로 해당 요소를 미리 생성해 주어야 합니다. document.createElement() 메서드를 활용하면 다음과 같이 처리할 수 있습니다.
<script>
document.createElement('nav'); // nav는 시맨틱 요소입니다.
document.createElement('header'); // header는 시맨틱 요소입니다.
document.createElement('article'); // article은 시맨틱 요소입니다.
</script>이렇게 요소를 한 번이라도 생성하면 IE8도 해당 태그를 정상적인 DOM 요소로 인식하게 되어 CSS 스타일 적용이 가능해집니다.
3. Modernizr 라이브러리 활용하기
위 작업을 일일이 수동으로 하는 것은 번거롭습니다. 이때 Modernizr라는 JavaScript 라이브러리를 사용하면 편리합니다. Modernizr는 브라우저의 HTML5 및 CSS3 기능 지원 여부를 자동으로 감지하고, 지원하지 않는 기능에 대한 폴리필(polyfill) 처리를 도와줍니다.
또한 Modernizr를 사용하면 <html> 태그에 브라우저 기능 정보를 나타내는 클래스가 추가되므로, 지원 여부에 따라 조건부로 CSS를 작성할 수 있습니다. 필요에 따라 특정 기능이 없을 때 기본 스타일을 차단(block)하거나 대체 스타일을 적용하는 것도 가능합니다.
정리
- IE8 이하 버전은
nav,header,article같은 HTML5 시맨틱 요소를 지원하지 않습니다. - CSS에서
display:block;을 선언하여 기본 렌더링 문제를 해결할 수 있습니다. document.createElement()로 요소를 생성하면 구형 IE에서도 태그를 인식합니다.- Modernizr 라이브러리를 활용하면 브라우저 호환성 처리를 더욱 체계적으로 관리할 수 있습니다.
요즘은 IE8 이하의 점유율이 매우 낮아졌지만, 공공기관이나 레거시 시스템 환경에서는 여전히 유용한 지식이니 참고해 두시길 바랍니다.