Responsive Web 반응형 웹
반응형 웹 개요
- 출처 : https://ko.wikipedia.org/wiki/%EB%B0%98%EC%9D%91%ED%98%95%EC%9B%B9%EB%94%94%EC%9E%90%EC%9D%B8
- 출처 : https://www.samsungsds.com/global/ko/support/insights/Responsive_web_1.html
-
출처 : https://www.samsungsds.com/global/ko/support/insights/Responsive-Web-2.html
- 하나의 웹사이트에서 PC, 스마트폰, 태블릿 PC 등 접속하는 디스플레이의 종류에 따라 화면의 크기가 자동으로 변하도록 만든 웹페이지 접근 기법
- 웹사이트를 PC용과 모바일용으로 각각 별개로 제작하지 않고, 하나의 공용 웹사이트를 만들어 다양한 디바이스에 대응
- PC용 URL과 모바일용 URL이 동일하기 때문에 검색 포털 등 광고를 통한 사용자 접속을 효율적으로 관리
- 웹 페이지 내용을 수정할 경우, 하나의 페이지만 수정하면 PC와 모바일 등 다양한 디바이스에서 동일하게 반영
- 반응형 웹의 핵심 기술은 가변 그리드(fluid grid), 유연한 이미지(flexible images), 미디어 쿼리(media query)
- 반대말은 디바이스별로 별도의 웹사이트를 제작하는 적응형 웹(adaptive web)이다.
예시 사이트
- http://mediaqueri.es (모음)
- http://rwdb.kr/(모음)
- http://mediaqueri.es/san/
- https://www.squarespace.com
- http://foodsense.is
- http://colly.com
참고사이트
- w3schools : https://www.w3schools.com/css/css_rwd_intro.asp
- google 반응형 웹 디자인 기본사항 : https://developers.google.com/web/fundamentals/design-and-ux/responsive?hl=ko - 링크 복구 예정
반응형 웹의 형태
- 반응형 웹 템플릿 : https://www.w3schools.com/css/css_rwd_templates.asp
반응형 웹 디자인 패턴
- 출처: https://developers.google.com/web/fundamentals/design-and-ux/responsive/patterns?hl=ko
- 유동형(Mostly Fluid) : 각각의 화면해상도에 맞는 레이아웃 형태를 계획하여 그 모양에 맞추어 나가는방식
- 열 끌어놓기(Column Drop)
- 레이아웃 시프터(Layout shifter)
- flexbox : https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox
- 미세 조정(Tiny tweaks)
- 오프 캔버스(Off canvas)
Meta Viewport
- 출처: https://www.w3schools.com/css/css_rwd_viewport.asp
뷰포트란?
- 뷰포트는 웹 페이지에서 사용자가 볼 수 있는 영역이다.
- 뷰포트는 장치마다 다르며 보통 컴퓨터 화면보다 모바일에서 더 작다.
- 태블릿이나 스마트폰이 있기 이전, 웹 페이지는 컴퓨터 화면 전용으로 디자인 되었고 고정 된 디자인과 고정된 크기를 갖는 것이 일반적이었다.
- 이런 환경에서 태블릿이나 스마트폰을 사용할경우 고정 크기 웹 페이지가 너무 커서 뷰포트에 맞지 않았다.
- 뷰포트가 없던 환경에서 브라우저를 단지 사이즈를 줄여서 디바이스 화면 크기에 맞추는 것은 효과적이지 못하였다. (글씨크기가 너무 작아 읽지 못하거나 링크를 클릭하지 못하는등)
뷰포트 주의사항
- 뷰포트에 맞도록 콘텐츠 크기 조정 : 사용자는 데스크톱과 모바일장치 모두에서 웹사이트를 세로로 스크롤하지만 가로로는 스크롤하지 않는다.
- 따라서 사용자가 전체 웹 페이지를 보기위해 가로로 스크롤해야 하거나 축소, 확대 해야 한다면 사용자 경험(UX)이 저하된다.
- 큰 고정 너비 요소를 사용하지 않는다
- 이미지가 뷰포트보다 넓은 너비로 표시되면 뷰포트가 수평으로 스크롤 될 수 있다.
- 콘텐츠를 뷰포트의 너비에 맞도록 조정해야한다.
- 콘텐츠가 잘 렌더링 되도록 특정 뷰포트 너비에 의존하지 않는다
- CSS 픽셀의 화면 크기와 너비는 장치마다 크게 다르므로 콘텐츠가 잘 렌더링 되기 위해 특정 뷰포트 너비에 의존하면 안된다.
- CSS 미디어 쿼리를 사용하여 작은 화면과 큰화면에 다른 스타일을 적용 한다.
- 페이지 요소에 대하여 큰 절대 CSS 너비를 설정하면 더 작은 뷰포트에서 요소가 너무 크게 적용된다.
- 따라서 절대 너비 보다는 100%와 같은 상대적 너비를 사용하는것이 좋다.
- 절대위치 값이 큰 경우는 뷰포트가 작은 장치에서 뷰포트 외부로 벗어날 수 있다.
문법 및 속성값
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
- meta tag에 Viewport에 대한 별 내용이 없으면 기본적으로 웹 페이지는 980px을 기준으로 렌더링 한다.
- 하지만 글자의 가독성이 떨어지므로 장비별로 가독성이 가장 좋은 device-width를 Viewport에 세팅할 수 있는 옵션이 존재한다.
- 위의 옵션 정의 후, 장비별 device-width로 페이지가 렌더링 된다.
속성값
- user-scaleable=no : 유저가 핀치 투 줌으로 스케일링을 할 수 있는지의 여부
- width : viewport의 가로 크기를 조정한다. 일반적인 숫자값이 들어갈 수도 있고, device-width와 같은 특정한 값을 사용할 수도 있다. device-width는 100% 스케일에서 CSS 픽셀들로 계산된 화면의 폭을 의미한다.
- height : viewport의 세로 크기를 조정한다.
- initial-scale : 페이지가 처음 로딩될 때 줌 레벨을 조정한다. 값이 1일때는 CSS 픽셀과 기기 종속적인 픽셀 간의 1:1 관계를 형성한다.
- minimum-scale : viewport의 최소 배율값, 기본값은 0.25이다.
- maximum-scale : viewport의 최대 배율값, 기본값은 1.6이다.
- user-scalable : 사용자의 확대/축소 기능을 설정, 기본값은 yes이다.
받아올 수 있는 값
- device-width : 기기의 가로 넓이 픽셀 값 (웹페이지의 가로(width) 값은 기기가 사용하는 가로 넓이 값(device-width) 만큼 적용하여 사용하라는 의미)
- device-height : 기기의 세로 높이 픽셀 값
주의사항
- contents보다 작은 viewport width/height를 설정하면 무시된다.
- viewport에서 initial-scale을 설정하지 않고 width/height를 설정하면 전체화면이 표시된다.
- viewport에서 initial-scale도 width/height도 설정하지 않으면 width=980px/height=1091px이 된다.
-
표시영역과 contents의 크기가 일치하지 않을때 initial-scale를 설정하면, 의도하지 않은 layout이 발생한다.
- 참고 : https://jongmin92.github.io/2017/02/09/HTML/viewport/
Grid View : 12단 그리드 방식
- 출처 : https://www.w3schools.com/css/css_rwd_grid.asp ``` .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} [class*=”col-“] { float: left; padding: 15px; border: 1px solid red; }
- [class^=”status-“] — starts with “status-“
- [class*=” status-“] — contains the substring “status-“
- class^ : 해당이름으로 시작하는 클래스명
- class* : 해당이름이 들어가 있는 클래스명
.clearfix::after { content: “”; clear: both; display: table; }
# CSS3, Media Query
* 하나의 웹페이지에 CSS를 분기하여 각각 다른 스타일을 갖도록 하는것
* 참고 : https://www.w3.org/TR/mediaqueries-4/
## 기기별 사이즈 내역
* 모바일 320px ~ 767px
* 타블렛 768px ~ 1023px or 1199px
* PC 1200px 이상 or 1024px 이상
* http://styleguide.co.kr/index.php : 디자인 스타일 가이드
## 지원 브라우저
* 지원 브라우저 확인 : https://caniuse.com/?search=%40media
* ie9+,chrome21+,firefox3.5+,safari4.0+,opera9+
## 사용방법
#### 내부
@media (max-width:700px){ .container{ margin:0px; } }
### 외부
## 미디어쿼리 문법
* 미디어쿼리는 대소문자를 구분하지 않음
@media [미디어쿼리지원여부] [대상미디어] [논리적연산] (조건문 Media Features) {실행문 CSS구문} @media [not,only] [all,print,screen,speech] [and,or] (width,height,aspect-ratio,orientation,color) {css}
* ```@media only all and (min-width: 800px) { … }```
* @media : 미디어 쿼리가 시작됨 (선언)
* only : 미디어 쿼리를 지원하는 웹 브라우저만 이 구문을 해석하라는 명령. 기본값이 only 이므로 생략 가능. 이 자리에 not 을 사용할 수도 있다.
* all : 미디어 쿼리를 해석해야 할 대상 미디어. all(모든장치), print(인쇄장치), screen(스크린장치), speech(화면 낭독기) 가 현재 적용 가능. 생략 가능
* 추가로 aural, braille(점자), embossed, handheld(휴대용), projection, tty, tv. 등이 있으나 기기의 모호함이나 퇴화 등으로 점차 사용되지 않을전망
* and : 논리적 연산. and 연산은 앞과 뒤의 조건을 모두 만족해야 한다는 의미. or 연산은 앞뒤 조건 중 하나의 조건만 만족해도 된다는 의미.
* (min-width: 800px) : 조건문. 최소 크기 800 픽셀부터 (즉, 800픽셀 이상 부터) 조건이 참(true) 이 된다.
* { … } : 실행문. 조건문이 참이면 실행문 부분이 실행된다. 실행문 내부는 CSS의 일반적인 작성 방법과 같다.
* 참고: https://www.w3schools.com/css/css3_mediaqueries_ex.asp
### 미디어쿼리 주의사항
* #link 태그에 미디어 쿼리를 설정할 수 있으나 성능면에서 권장하진 않는다.
* ```<link rel=”stylesheet” media=”all and (조건A)” href=”A.css”>```
* ```<link rel=”stylesheet” media=”all and (조건B)” href=”B.css”>```
* 미디어 쿼리를 지원하지 않는 구형 모바일 브라우저를 위해 "모바일 퍼스트" 전략을 사용하는 것을 고려해 볼 수 있다.
* 구형 IE 브라우저(6~8)를 사용자를 위한 처리
* https://github.com/scottjehl/Respond 를 다운로드한 후 경로를 수정하여 아래와 같이 설정한다.
*또는 아래와 같이 CDN 방식으로…
* 이 respond.js 는 로컬 웹브라우저에서는 동작하지 않음
### CSS2에서 CSS3로의 변화 Point
* 가장 큰 변화는 selector의 변화
* div[id^="bar"]처럼 id가 bar로 시작하는 div 엘리먼트 또는,
* div[id$="end"]처럼 id가 end로 끝나는 div 엘리먼트를 찾을 수 있는 selector 가능
* 백그라운드 이미지 여러 개 사용 가능
* 박스 모델 적용
* 미디어 쿼리 적용
* 이 외에도 많은 사람들이 “모던 브라우저의 시작은 CSS3”라고 할 정도로 다양한 변화들이 있었습니다.
### 미디어 쿼리 예제
```html
<!DOCTYPE html>
<html>
<head>
<title>media query</title>
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<style>
/*
모바일 320px ~ 767px
타블렛 768px ~ 1023px or 1199px
PC 1200px 이상 or 1024px 이상
*/
body{background-color: green;}
@media screen and (max-width: 1920px) {
body{background-color: blue;}
}
@media screen and (max-width: 1023px){
body{background-color: red;}
}
@media screen and (max-width: 767px){
body{background-color: yellow;}
}
</style>
</head>
<body>
</body>
</html>
- 참고 : http://www.nextree.co.kr/p8622/
/* 스마트폰 가로+세로 */
@media only screen and (min-device-width : 320px) and (max-device-width : 480px){
}
/* 스마트폰 가로 */
@media only screen and (min-width : 321px) {
}
/* 스마트폰 세로 */
@media only screen and (max-width : 320px) {
}
/* iPhone4와 같은 높은 크기 세로 */
@media
only screen and (-webkit-min-device-pixel-ratio : 1.5),
only screen and (min-device-pixel-ratio : 1.5) {
}
/* iPhone4와 같은 높은 해상도 가로 */
@media only screen and (min-width : 640px) {
}
/* iPad 가로+세로 */
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) {
}
/* iPad 가로 */
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) {
}
/* iPad 세로 */
@media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) {
}
/* 데스크탑 브라우저 가로 */
@media only screen and (min-width : 1224px) {
}
/* 큰 모니터 */
@media only screen and (min-width : 1824px) {
}
Image
- 참고 : https://www.w3schools.com/css/css_rwd_images.asp
/* For width smaller than 400px: */
body {
background-image: url('img_smallflower.jpg');
}
/* For width 400px and larger: */
@media only screen and (min-width: 400px) {
body {
background-image: url('img_flowers.jpg');
}
}
반응형웹 프레임워크
- Bootstrap : https://getbootstrap.com/
- Foundation : https://foundation.zurb.com/
- Bulma : https://bulma.io/
- UI Kit : https://getuikit.com/
- Semantic UI : https://semantic-ui.com/
부트스트랩 (boot strap)
-
출처 : https://masterdomon.tistory.com/121
- 반응형, 모바일, HTML, CSS, Javascript 프레임워크
- 공식 웹사이트 http://getbootstrap.com
-
한글 웹사이트 http://bootstrapk.com
- 트위터에서 제작하고 공개. 특정 서비스의 랜딩 페이지(landing page), 또는 컨텐츠 분량이 적은 웹사이트 제작에 많이 사용됨.
-
사용법에 익숙해지면 굉장히 빠른 속도로 웹 사이트를 제작할 수 있음. 웹 사이트 전체를 만들 수 있는 프레임워크이다 보니 부트스트랩 기반으로 하나의 웹 사이트 전체가 만들어져 무료로 공개 또는 판매되는 템플릿도 상당히 많이 존재함 (예: http://startbootstrap.com )
-
2017년 11월 현재 버전 4가 정식 런칭 “한번도 안써본 퍼블리셔는 있을 수 있어도 한번만 써본 퍼블리셔는 없다”
- 부트스트랩 테마 https://themes.getbootstrap.com/
부트스트랩으로 제작된 웹사이트
- https://expo.getbootstrap.com/
- https://overv.io
- http://www.vogue.com
- http://indicius.com
- 부트스트랩으로 만든 관리자 프레임웍 https://adminlte.io
반응형 웹 레이아웃 예제
- 참고사이트 : * http://www.nextree.co.kr/p8622/
- 구조 예시 스크린샷 포함된 PTT : https://www.slideshare.net/theresaneil/mobile-design-strategic-solutions/55-Responsive_Design_Layout_Patterns_Mostly
저장된 자료
- http://www.onethelab.com/sample_html/responsive_web_sample.html