Responsive Web

Responsive Web & Media Query

HTML5의 “미디어 쿼리”를 이용하여 하나의 소스로 제작된 컨텐츠가 데스크탑에만 국한되지 않고 타블렛 PC, 모바일 폰 등 다양한 크기의 디바이스 환경에 맞추어 해상도나 화면이 동적으로 변환되는 기법을 말한다.
모바일 웹을 별도로 제작할 필요 없이 하나의 반응형 웹사이트로 사이즈에 맞춰 이미지나, 폰트, 사이즈 및 UI가 자동으로 변환되어 모든 디바이스에서 사이트를 이용할 수 있는 것이다. 반응형 웹의 주요 컨셉은 다음과 같다.
  1. A flexible, grid-based layout : 그리드를 상대적(% 단위 등)으로 지정하여 브라우저 크기에 따라 유동적으로 변환
  2. Flexible width media: images, video : 너비가 변경되어도 웹페이지 안의 미디어가 넘치지 않게 하는 기법
  3. Media queries : 다양한 브라우저에서 표현양식을 제어할 수 있게 고안된 기능

즉, 반응형 웹은 “유동형 그리드, 가변폭 이미지, 미디어쿼리 개념”을 하나로 묶고 체계화 시킨 용어이다.
그러나 반응형 웹에도 아직 극복해야 할 단점들이 있다.
가장 큰 문제는 IE8 이하에서는 사용이 불가능하다는 점이다.
  1. 실제 사용되는 이미지보다 더 큰 이미지를 사용할 수 있다.
  2. 이미지 리사이징은 단말기의 CPU를 보다 더 많이 사용한다.
  3. 실제로 사용하지 않은 자원(이미지, CSS)을 전송 받을 수 있다.
  4. 미디어 쿼리를 지원하지 않는 브라우저의 사용자가 많다 : CSS3의 속성으로 IE8 이하의 버전에서는 사용이 불가능

ie8 이하 버전에 대한 대응
<!–[if lt IE 9] <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script> ![endif]–>
css Reset ( 새로 추가된 요소들이 inline 요소인지, block 요소인지 판단하기 위해 사용.)
header, footer, section, article, aside, nav, hgroup, details, menu, figure, figcaption { display: block; }

Viewport

		<head>
		  
		</head>
		
속성 내용 단위 기본값 허용범위 특이사항
width viewport의 넓이 px 980px 200 ~ 10,000 device-width로 지정가능
height viewport의 높이 px 가로화면비율에서 계산된 값 200 ~ 10,000 device-height로 지정가능
initial-scale 초기 배율값 승수지정 120% = 1.2 viewport에서 계산된 값 0 ~ 10  
minimum-scale 승수 지정 승수 .25 0 ~ 10  
maximum-scale 승수 지정 승수 1.6 0 ~ 10  
user-scalable 확대,축소 지원여부 yes, no yes    

미디어 쿼리 구문 형식

		/* 
		 * 미디어쿼리 구문 형식
		 * 아래 세줄은 동일한 조건 
		 */
		@media only all and (조건문){실행문}
		@media all and (조건문){실행문}
		@media (조건문){실행문}
		
		/*
		 * width / height 
		 * 뷰포트의 너비와 높이. 뷰포트의 크기는 HTML body 콘텐츠를 표시하는 영역으로 실제 스크린의 크기와는 다르다.
		 * 반응형 웹 구현시 가장 일반적으로 사용하는 조건.
		 * 1. 뷰포트 너비가 768px 이상 '그리고' 1024px 이하이면 실행
		 * 2. 뷰포트 너비가 768px 이거나 '또는' 1024px 이면 실행
		 * 3. 뷰포트 너비가 768px 이상 '그리고' 1024px 이하가 '아니면' 실행
		 */
		@media all and (min-width:768px) and (max-width:1024px){ … } 
		@media all and (width:768px), (width:1024px){ … }
		@media not all and (min-width:768px) and (max-width:1024px){ … } 
		
		/*
		 * device-width / device-height 
		 * 스크린의 너비와 높이.
		 * 스크린은 출력 장치가 픽셀을 표시할 수 있는 모든 영역으로 일반적으로 HTML body 콘텐츠를 표시하는 뷰포트 보다 크다.
		 * 1. 스크린 너비가 320px '그리고' 높이가 480px 이면 실행
		 * 2. 스크린 너비가 최소 320px 이상 '그리고' 높이가 최소 480px 이상이면 실행
		 */
		@media all and (device-width:320px) and (device-height:480px){ … } 
		@media all and (min-device-width:320px) and (min-device-height:480px){ … }
		
		/* 
		 * orientation 
		 * 뷰포트의 너비와 높이 비율을 이용하여 세로 모드인지 가로 모드인지를 판단한다.
		 * 1. portrait : 세로 모드. 뷰포트의 높이가 너비에 비해 상대적으로 크면 실행
		 * 2. landscape : 가로 모드. 뷰포트의 너비가 높이에 비해 상대적으로 크면 실행
		 */
		@media all and (orientation:portrait){ … }
		@media all and (orientation:landscape){ … } 
		
		/* 
		 * 모바일용 CSS 코드를 먼저 작성하고 미디어쿼리로 감싸지 않는다 
		 */
		@media all and (min-width:768px){
		  /* 테블릿 해상도 이상의 CSS 코드만 미디어 쿼리 구문 안쪽에 작성한다 */
		}
		/* 이것이 바로 모바일 퍼스트. 모바일 코드를 미디어쿼리 구문 바깥쪽에 작성하는 것이 핵심. */
		
		

미디어 쿼리 템플릿

		/* 공통, 모바일, 테블릿&데스크톱, 테블릿, 데스크톱 순으로 코드를 분리해서 작성. */
		
		@charset "utf-8";
		/* All Device */
		모든 해상도를 위한 공통 코드를 작성한다. 모든 해상도에서 이 코드가 실행됨.
		
		/* Mobile Device */
		768px 미만 해상도의 모바일 기기를 위한 코드를 작성한다. 모든 해상도에서 이 코드가 실행됨. 
		미디어 쿼리를 지원하지 않는 모바일 기기를 위해 미디어 쿼리 구문을 사용하지 않는다.
		
		/* Tablet & Desktop Device */
		@media all and (min-width:768px){
		  사용자 해상도가 768px 이상일 때 이 코드가 실행됨. 테블릿과 데스크톱의 공통 코드를 작성한다.
		}
		
		/* Tablet Device */
		@media all and (min-width:768px) and (max-width:1024px){
		  사용자 해상도가 768px 이상이고 1024px 이하일 때 이 코드가 실행됨.
		  아이패드 또는 비교적 작은 해상도의 랩탑이나 데스크톱에 대응하는 코드를 작성한다.
		}
		
		/* Desktop Device */
		@media all and (min-width:1025px){
		  사용자 해상도가 1025px 이상일 때 이 코드가 실행됨. 
		  1025px 이상의 랩탑 또는 데스크톱에 대응하는 코드를 작성한다.
		} 
		

반응형으로 리펙토링 하는 경우 데스크톱 CSS 코드를 그대로 재사용할 수 있다.
1024px 이상 해상도 조건의 미디어쿼리 안쪽으로 모든 코드를 옮기고, 모바일과 테블릿 코드를 작성한 다음,
다시 데스크톱 코드를 디버깅 하면 된다.



반응형 웹 잘 정리된 사이트 : https://mediaqueri.es/
국내 반응형 웹 디자인 사이트
현대 자동차 그룹 : https://pr.hyundai.com 신현석 블로그 : https://hyeonseok.com 다음 사전 : https://dic.daum.net/
국외 반응형 웹 디자인 사이트
boston blobe : https://www.bostonglobe.com/ deren : https://www.deren.me/ dconstruct : https://2011.dconstruct.org/ heathlife : https://heathlife.co.uk/
History