크로스 브라우징이란?
웹사이트가 다양한 브라우저에서 동일하게 작동하고 일관된 사용자 경험을 제공하도록 호환성을 고려해 만드는 작업이다.
크로스 브라우징의 등장 배경은?
인터넷 익스플로러의 시장 점유율을 높이기 위해 자사 브라우저에만 동작하는 기능을 추가하기 시작
초기의 자바스크립트는 브라우저 생태계를 고려해서 작성된 것이 아니었기 때문에, 브라우저는 자바스크립트의 발전 속도 간의 차이를 따라잡지 못함
=> 크로스 브라우징 이슈 발생 : 브라우저에 따라 웹페이지가 정상적으로 동작하지 않음
=> 이러한 문제를 해결하기 위해 자바스크립트에 폴리필
과 트랜스파일
같은 개념이 등장하기도 함.
폴리필 : 브라우저가 지원하지 않는 코드를 브라우저에서 사용할 수 있도록 변환한 코드 조각이나 플러그인 (ex: core.js, polyfill.io)
트랜스파일 : 최신 버전의 코드를 예전 버전으로 변환하는 과정 (ex: 바벨)
라이브러리에 기대지 않고 크로스 브라우징 이슈를 해결하고, 모든 브라우저에 동일하게 동작하는 표준화된 자바스크립트의 필요성이 제기됨
=> 자바스크립트의 표준화 진행
크로스 브라우징의 중요성
웹사이트의 접근성 향상
사용자 경험 향상
웹 표준 준수를 통해
코드의 재사용성 증가
유지보수 시 발생할 수 있는 문제 최소화
크로스 브라우징 테스트 도구
BrowserStack
클라우드 기반 크로스 브라우저 테스트 플랫폼으로 실제 디바이스 클라우드에 대한 접근 및 종합적인 테스트 도구 제품군을 제공하기에 다양한 환경에서 광범위한 테스트를 수행 가능
Sauce Labs
Selenium을 통합한 실시간 테스팅 및 성능 모니터링을 포함한 종합적인 테스팅 도구를 제공하며 복잡한 테스트 요구사항을 가진 대규모 조직(기업)에 적합
=> 다양한 브라우저와 운영체제 조합에서 실시간으로 웹사이트를 테스트
=> 모바일 기기에서의 테스트를 지원하여, 다양한 화면 크기와 해상도에서의 호환성 문제를 발견하는 데 유용
크로스 브라우징 발생 원인 및 해결 방법
CSS 스타일의 적용 차이로 인한 발생
브라우저마다 동일한 CSS를 다르게 해석(특정 CSS가 지원되지 않는 브라우저가 있을 수도 있음)
=> 브라우저별 기본 스타일링 초기화 필요
reset CSS
브라우저마다 다르게 설정된 요소의 기본 스타일링을 모두 초기화하는 방식
크로스 브라우징을 위해 필요한 속성을 임의로 지정하여 파일로 통합한 것
보편적으로 reset CSS에 사용되는 속성들 :
CSS Tools: Reset CSShttps://meyerweb.com/eric/tools/css/reset/index.htmlnormalize CSS
reset CSS와 방식은 동일하지만, 사용하기 좋은 기본 값들은 초기화하지 않고 유지
CDN 기법을 사용하여
head
영역에link
태그로 삽입할 수 있음부분적으로 개선하는 방식이기 때문에 reset CSS보다 성능 면에서 유리함
보편적으로 사용되는 normalize CSS :
normalize - Libraries - cdnjs - The #1 free and open source CDN built to make life easier for developersNormalize.css as a node packaged module - Simple. Fast. Reliable. Content delivery at its finest. cdnjs is a free and open-source CDN service trusted by over 12.5% of all websites, serving over 200 billion requests each month, powered by Cloudflare. We make it faster and easier to load library files on your websites.https://cdnjs.com/libraries/normalize
자바스크립트의 호환성 문제
특정 기능이나 메서드가 일부 브라우저에서는 작동하지 않을 수 이음 (ex: 구형 브라우저)
=> 조건문을 통해 해당 기능의 존재 여부 체크
HTML 태그의 지원 차이 (ex: 구형 브라우저에서 지원하지 않을 수 있음)
=> HTML의 호환성을 고려한 대체 태그 또는 속성 사용
브라우저마다 폰트와 이미지의 렌더링 차이 (=> 디자인의 일관성 저해)
CSS와 JS의 호환성 문제를 해결하기 위해서는 브라우저별 프리픽스 또는 폴리필을 사용하는 것이 효과적
/* ex: CSS 코드에 브라우저별 프리픽스를 추가 */ .example { -webkit-border-radius: 10px; /* Safari, Chrome */ -moz-border-radius: 10px; /* Firefox */ border-radius: 10px; /* Standard */ }