1. 반응형 웹 디자인 Responsive Web Design
스마트폰이나 태블릿 등 모바일 기기는 화면이 작기 때문에 가독성에 더욱 신경써야 한다. 보통 웹사이트가 축소되어 가로 스크롤 없이 콘텐츠를 볼 수 있으나 글자가 너무 작아지기 때문이다. 데스크탑용, 테블릿용, 모바일용 웹사이트를 별도 구축할 수도 있지만 One Source Multi Use의 관점에서 올바른 해결책은 아니다.
이러한 문제를 해결하는 방법 중의 하나가 반응형 웹디자인(Responsive Web Design)이다. 화면 해상도에 따라 가로폭이나 배치를 변경하여 가독성을 높이는 것이다. 즉, 하나의 웹사이트를 구축하여 다양한 디바이스의 화면 해상도에 최적화된 웹사이트를 제공하는 것이다.

1-1. viewport meta tag
viewport란 웹페이지의 가시영역을 의미한다. viewport는 디바이스에 따라 차이가 있다. 예를 들어 모바일 브라우저는 주화면이 세로 화면이고 윈도우 resize가 불가하며 화면 터치를 사용하는 등 데스크탑 브라우저와 구성이나 형태가 다르다. 또한 모바일의 화면은 데스크탑 화면보다 훨씬 작으므로 데스크탑용 웹페이지를 그대로 모바일에 출력하면 가독성이 현저히 나빠진다. 따라서 viewport를 이용하여 디바이스의 특성과 디바이스의 화면 크기 등을 고려하여 각종 디바이스 사용자에게 최적화된 웹페이지를 제공할 수 있다.
속성 | 설명 | 사용 예 |
width | viewport 너비(px). 기본값 : 980px | width=240 |
width=device-width | ||
height | viewport 높이(px) | height=800 |
height=device-height | ||
initial-scale | viewport 초기 배율 | initial-scale=1.0 |
user-scale | 확대 축소 가능 여부 | user-scale=no |
maximum-scale | viewport 최대 배율 | maximum-scale=2.0 |
minimum-scale | viewport 최소 배율 | minimum-scale=1.0 |
meta tag에서는 px단위를 사용하며 단위 표현은 생략한다. 복수개의 프로퍼티를 사용할 때는 쉼표(,)로 구분한다.
<meta name="viewport" content="width=device-width, initial-scale=1.0">
위 예제는 가장 일반적인 viewport 설정이다. 가로폭을 디바이스의 가로폭에 맞추고 초기 화면 배율을 100%로 설정하는 것을 의미한다.
1-2. @media
반응형 웹디자인에 사용되는 핵심 기술은 @media이다.
@media을 사용하여 미디어 별로 style을 지정하는 것을 Media Query라 한다. 디바이스를 지정하는 것뿐만 아니라 디바이스의 크기나 비율까지 구분할 수 있다.
Media Type | 설명 |
all | 모든 미디어 장치에 사용 (기본값) |
프린터에 사용 | |
screen | PC, 태블릿, 스마트 폰에 사용 |
speech | 스크린리더기가 페이지를 읽는데 사용 |
다음은 Media Query의 문법이다.
@media not|only mediatype and (expressions) {
CSS-Code;
}
Media Query의 표현식에서 사용할 수 있는 프로퍼티.
속성 | 설명 |
width | viewport 너비(px) |
height | viewport 높이(px) |
device-width | 디바이스의 물리적 너비(px) |
device-height | 디바이스의 물리적 높이(px) |
orientation | 디바이스 방향 (가로 방향 : landscape, 세로 방향 : portrait) |
device-aspect-ratio | 디바이스의 물리적 width/height 비율 |
color | 디바이스에서 표현 가능한 최대 색상 비트수 |
monochrome | 흑백 디바이스의 픽셀 당 비트수 |
resolution | 디바이스 해상도 |
일반적으로 반응형 웹 디자인은 viewport 너비(width 프로퍼티)를 기준으로 한다.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@media</title>
<style>
/* 801px ~ */
.practice{color: #000;}
/* ~ 800px */
@media screen and (max-width: 800px){
.practice{color: blue}
}
/* ~ 500px */
@media screen and (max-width: 500px){
.practice{color: red}
}
</style>
</head>
<body>
<div class="practice">
<h1>@media practice</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Rem commodi odio, enim iste sit eaque harum illo minus aliquid expedita
quis blanditiis aut est doloremque. Nam doloremque accusantium minus sed.</p>
</div>
</body>
</html>

2. 반응형 웹 디자인 Responsive Web Design 예제

2-1. html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>오르세미술관</title>
<link rel="stylesheet" href="orsay.css">
</head>
<body>
<div id="rin">
<header>
<h1>Musee d'Orsay</h1>
</header>
<section id="r-container" class="r-clear">
<!-- float을 대비한 clear 클래스-->
<nav class="r-lnb">
<ul>
<li><a href="#">작가의 작품</a></li>
<li><a href="#">작가의 시대</a></li>
<li><a href="#">작가의 일생</a></li>
</ul>
</nav>
<article class="r-content">
<h2>PICTURES</h2>
<p>
<a href="#">피리부는 소년</a><br>
<a href="#">고흐의 방</a><br>
<a href="#">황색 그리스도가 있는 화가의 자화상</a><br>
<a href="#">오페라좌의 관현악단</a><br>
<a href="#">만종</a><br>
<a href="#">제비꽃 장식을 단 베르트모리조</a><br>
<a href="#">피리부는 소년</a><br>
<a href="#">고흐의 방</a><br>
<a href="#">황색 그리스도가 있는 화가의 자화상</a><br>
<a href="#">오페라좌의 관현악단</a><br>
<a href="#">만종</a><br>
<a href="#">제비꽃 장식을 단 베르트모리조</a><br>
</p>
</article>
<aside class="r-aside">
<ul class="ext">
<li>
<h2>Workshop Go</h2>
<a href="#">Life drawing workshop</a>
</li>
<li>
<h2>Summer Exhibition</h2>
<a href="#">Summer Exhibition Online 2010</a>
</li>
<li>
<h2>RA Collection</h2>
<a href="#">RA Collections</a>
</li>
</ul>
</aside>
</section>
<footer>
<p>© 2018 Les Amis du Musee d'Orsay. All rights reserved.</p>
</footer>
</div>
</body>
</html>
2-2. 모바일 사이즈 CSS
모바일 레이아웃은 모두 100%이니 어떤 요소에도 float 또는 position이 없고 width 값을 지정할 필요가 없다.
@charset utf-8;
/* 기본 셋팅 */
h1, h2, ul, li, p, nav, article{margin: 0; padding: 0; box-sizing: border-box;}
li{list-style: none;}
.r-clear:after{content: ""; display: block; clear: both;}
a{text-decoration: none; line-height: 1.5; color: #333;}
/* 모바일 사이즈 디자인 */
body{background: #f1f1f1; font-size: 13px;}
header{background: coral;}
header h1{font-size: 25px; padding: 10px; color: #fff;}
.r-lnb li{margin: 10px; padding: 10px; background: lightgreen;}
.r-content{padding: 20px;}
.r-content h2{font-size: 20px;}
.ext{margin: 10px;padding: 20px;background: lightgreen;}
footer{padding: 10px; background: #aaa;}

2-3. 태블릿 사이즈 CSS
/* 가로 너비 최소 768px ~ 최대 1024px 디자인 */
@media all and (min-width: 768px) and (max-width: 1024px) {
.r-lnb{float: left; width: 25%;}
.r-content{float: left; width: 75%;}
.r-aside{clear: both;}
}

2-4. PC 사이즈 CSS
/* 가로 너비 최소 1025px ~ 디자인 */
@media all and (min-width: 1025px) {
#rin{max-width: 1280px; margin: 0 auto;}
.r-lnb{float: left; width: 20%;}
.r-content{float: left; width: 50%;}
.r-aside{float: right; width: 30%;}
}

2-5. 통합 결과물
(브라우저 사이즈를 줄여가며 확인해 보세요.)
Musee d'Orsay
PICTURES
피리부는 소년
고흐의 방
황색 그리스도가 있는 화가의 자화상
오페라좌의 관현악단
만종
제비꽃 장식을 단 베르트모리조
피리부는 소년
고흐의 방
황색 그리스도가 있는 화가의 자화상
오페라좌의 관현악단
만종
제비꽃 장식을 단 베르트모리조
'CSS' 카테고리의 다른 글
CSS-레이아웃Ⅲ: Flex box Layout (플렉스 박스) (0) | 2020.08.29 |
---|---|
CSS-레이아웃Ⅱ: float + position (0) | 2020.08.27 |
CSS-요소의 위치 정의 : position (0) | 2020.08.26 |
CSS-레이아웃Ⅰ: float (0) | 2020.08.26 |
CSS-요소의 정렬 : float (0) | 2020.08.26 |
댓글