반응형 웹 제작 방식에 대한 이해

반응형 웹이란?

반응형 웹이란 환경(해상도)에 반응하여 그에 맞는 최적화된 화면을 보여주게 되는것을 말한다.

반응형 웹이라는게 생소해보일 수는 있으나 기술적으로는 오래전부터 시도되어왔던 기술이다.
레이아웃을 %단위나 em단위로 하거나, 스크립트를 사용해서 사이즈 체크해서 대응해서 제작이 되기도 했다.
다만 다양한 디바이스에 다양한 해상도까지 나오는 현실에서 미디어쿼리를 이용하면 좀 더 정확한 제어가 가능하기 때문이다.
외국에서는 좀 더 활발한 논의가 이루어져 있고 제작 방법론 또한 다양하게 다루고 있다.
대표적으로 국외 사이트는 보스턴 글로브이고, 국내 사이트로는 다음사전이 대표적인 반응형 웹사이트이다.

[보스턴 글로브]

[다음 사전]

프로젝트를 시작하기 전

현실적인 문제점에 대한 분석 및 논의

  • 과연 내부역량으로 진행이 가능한것인가에 대한 논의
  • 각 파트별 모바일에 대한 지식은 수행되고 있는가?
  • 반응형 웹이 생산성이 있는가?
  • 클라이언트(업체)에 어떤 이익이 있는가?
  • 고객(사용자)입장에서는 어떤 이점이 있는가?
  • 유지보수 측면에서의 장/단점
  • 데스크탑이 먼저인가? 모바일이 먼저인가?
  • 모든 브라우저에 대응해야하는가?(IE8이하 버전)
    • 유동적인 레이아웃을 위해 스크립트를 사용해야하나?(성능이슈)
    • 동일한 디자인을 표현해야 하다보니 태그의 중첩을 피할 수 없게되서 용량이 늘어나게 된다.(용량문제)
  • 접근방식에 대한 제안

    멀티 스크린을 위한 제작 방식 제안
    클라이언트에 요청이나 제안을 하기 위한 요청시 여러가지 안을 제시하기 전에 몇가지 유념해두어야할 사항이 있다.
    첫번째는 경험이 축적된 숙력된 인력, 숙력된 인력이 없다면 TFT를 구성해서 실험용 사이트를 구축한뒤 시작을 해본다.
    두번째는, 프로젝트 구축비용 대비 얼마나 효과적이고 이익이 날것인가?
    멀티 스크린(PC, Mobile(Smart Pad, Smart Phone)을 대응해서 구축하고자 할때 역량에 따른 3가지 제작방식을 제안한다.
    가장 접근하기 쉬운 방식으로 순서

    공통 사항

    ie8이하 버전에서는 media qurie가 지원하지 않기 때문에 Conditional Comments를 활용하거나, mediaqueries.js를 이용

    <!--[if lt IE 9]><link rel="stylesheet" href="desktop.css" type="text/css" media="screen, print"><![endif]-->
    

    1. PC Web, Mobile Web

    무작정 반응형 웹을 따라하기보다는 모바일 웹에 대한 제작 경험을 쌓는것이 중요
    모바일 사이트는 따로 제작
    반응형웹을 구현하기전에 필수 코스

    • HTML5, CSS3

    2. PC Web/Smart Pad, Smart Phone

    User-Agent나 스크린 해상도를 체크하여 pc.css와 mobile.css를 불러오게 된다.
    구조는 동일하되 pc.css와 mobile.css는 분리(콘텐츠 특성에 따라 분기처리도 필요)
    반응형이 아닌 레이아웃으로 너비가 고정된 경우 smart pad와 같은 경우 viewport를 사용했을 경우 너비가 smart pad보다 클 경우 스크롤이 생기기 때문에 분기처리하여 viewport를 사용하지 않는다.
    테스크탑에서 모바일 환경으로 전환되었을때의 UI기획 또한 선행되어야한다.

    완전분리
    • 장점 : 범위 구별이 명확
    • 단점 : CSS3를 지원하는 브라우저들을 최대한 활용하지 못함
    • desktop.css
    • mobile.css
    부분분리(CSS3 구현가능한 브라우저)

    CSS3를 지원하는 브라우저를 적극 활용

    • 장점 : 스마트패드에서도 최적화한다는 측면과 완전분리보다는 운영시 용이하다.
    • 단점 : CSS3 따로 분리해야하기 때문에 구현하는 작업측면에서는 설계가 잘 되어 있어야 하고, 유지운영시에 약간에 번거로움이 있다.
    • common.css
    • ie8이하.css(Conditional comments)
    • css3.css
      • desktop.css / mobile.css
    // CSS3를 지원하지 않는 IE를 위해 Conditional comments를 사용하여 span태그를 position:absolute로 각 모서리에 위치시킨다.
    .roundtype01	{border-radius: 5px; position: relative;}
    .roundtype01 .tl, .roundtype01 .tr, .roundtype01 .bl, .roundtype01 .br	{background: url('../../images/common/bg_roundtype_01.gif') no-repeat 0 0; width: 5px; height: 5px; overflow: hidden; font-size: 0; position: absolute;}
    .roundtype01 .tl {background-position: 0 0; top: 0; left: 0;}
    .roundtype01 .tr {background-position: 100% 0; top: 0; right: 0; }
    .roundtype01 .bl {background-position: 0 100%;  left: 0; bottom: 0;}
    .roundtype01 .br {background-position: 100% 100%; right: 0; bottom: 0; }
    
    <div class="roundtype01">
      contents area
      &lt;!--[if lt IE 9]>&lt;span class="tl">&lt;/span>&lt;span class="tr">&lt;/span>&lt;span class="bl">&lt;/span>&lt;span class="br">&lt;/span>&lt;![endif]-->
    </div>
    

    3. PC Web, Smart Pad, Smart Phone(Smart TV)

    반응형 웹, 각기 다른 해상도에 대응
    아직은 3스크린에 대응하지만 내년이후에는 활발해질 Smart TV 시장 역시 주목해야할 것이다.
    • ie8이하.css – 해상도에 대응하지 않음(Conditional comments)
      • ie8이하에도 지원해야하는 요구사항이 있을 경우 respond.js 와 같은 스크립트 라이브러리를 이용
    • presentation.css – 공통영역
    • layout.css – 해상도 기준 선정에 의한 분리

    반응형 웹 프로세스

    RWD 프로젝트에 핵심은 Mobile First
    1. 콘텐츠 프로토타입
    2. 화면설계서 템플릿(사이트을 분석 패턴화)
    3. UI Design Pattern(유형은 최소한으로 유지, 초기 작업부터 UI Design작업이 선행되어야함)
    4. 퍼블리싱 가이드
      • 현황판
      • HTML 가이드

    파트별 유의사항 체크

    템플릿의 경우 될 수 있으면 개인판단에 따른 구조화를 해쳐서는 안될것이다.

    공통

    • 웹폰트 사용유무
    • 홈아이콘(터치 아이콘) – 앱아이콘과 중복되지 않도록 주의
    • 인쇄(웹폰트를 사용시 인쇄환경에서는 웹폰트를 사용하지 않고 기본체나 내장되어 있는 폰트체를 사용한다.)

    기획

    • 콘텐츠 구조 선형화
    • 화면설계서에서 제목 영역의 확실한 구분

    디자인

    퍼블리싱

    • 인코딩/캐릭터셋
    • HTML5
    • 콘텐츠에 대한 분리는 개발팀과 협의하여 HTML에서는 CSS로 숨김처리하고 개발팀에서는 분기처리한다.
    • CSS파일에 들어가는 배경이미지에 주소가 개발작업시 주소가 수시로 바뀔 경우 CSS에 들어가는 배경 이미지 폴더만 CSS파일과 같은 경로에 위치시킨다.
    • 분기방식
      • User-Agent
        • 장점 : 정확하게 요구하는 타겟 디바이스에 요구사항을 맞출 수 있다.
        • 단점 : User-Agent값이 정확하지 않으면 오히려 엉뚱한 콘텐츠를 노출 시킬 수 있다. 새로운 기기나 OS가 나올때마다 대응해야한다.
      • DDR
        • mobile ok에서 제공하는 단말정보저장소(DDR)를 이용
      • Media-Queries
        • 화면 해상도 체크하는 방법은 해상도만 체크하기 때문에 가장 간단한(?) 방법이긴 하나 가로, 세로 전환에 따라 보여주고 싶은 모바일용 레이아웃이 아닐 수 있다.
      • Mobile OS
        • OS만 체크할 경우 아이폰이나 아이패드같이 폰과 패드가 구분되는 경우와 안드로이드와 같이 폰과 패드(탭)가 구분이 안되는 경우가 있기 때문에 이를 구분할 방법이 있어야 할것이다.
      • 스크립트를 이용하여 해상도 체크
        • 스크린 해상도를 체크해야할 경우 스크린 사이즈를 구하는것은 다음과 같다.
        • 모바일에서 innerWidth, client.width, screen.width 중에 client.width의 값을 구해야한다. 이 이유에 대해서는 뷰포트에 설명을 참고한다.

    개발

    작업환경 구축

    1. 무선환경 구축(WiFi)
    2. HTML 가이드
      • 현황판(모바일 화면 체크)
      • 기획이나 디자인파트에서 작업된 화면을 모바일에서 직접 주소를 입력해서 들어가는것은 어렵기 때문에 스마트폰에 설치할 수 있는 QR Code 리더기를 설치하여 QR Code 인식시킨다.
      • 패턴 가이드(개발 가이드)
    3. 브라우저 세팅
      • 사파리(환경설정-고급-메뉴 막대에서 개발자용 메뉴 보기(체크)) – 개발자용 메뉴 생성
      • 크롬(goo.gl URL Shortener(+QR Code, Site to Phone)

    모바일(스마트폰) 화면에서의 구현 이슈사항

    해상도나 기술적인 문제에 있어서 적지않은 이슈들을 만나게 되는데 이에 대한 해결책을 제시하고자 한다.

    Image

    이미지의 퀄리티를 어디까지 유지할것이냐는 품질을 우선인가 페이지 로딩속도가 우선인가에 대한 선행 결정이 되어야 할것이다.

    이미지 또한 데이터 용량과 관계있기 때문에 테이터 무제한 요금제를 사용하지 않는 고객을 위해서는 페이지 로딩속도를 우선시해야할 필요가 있다.

    이미지 분기(Desktop용/Mobile용)
    퍼블리싱 작업시에는 스크립트로 처리하고 개발작업시에는 서버단에서 처리한다.

    <img src="hdpi_bzbcap05number.gif" alt="이미지" /><!-- desktop/pad 용 -->
    <img src="mdpi_bzbcap05number.gif" alt="이미지" /><!-- mobile 용 -->
    

    Popup

    • 새창(모바일기기에서의 새창개수의 제한)
    • 레이어팝업

    Font

    웹폰트

    현재 웹폰트로 상업적인 사용이 가능한것은 나눔고딕이며 가장 널리 사용되는것은 NHN에서 배포한 나눔고딕체이다.
    주의사항 : 한글폰트는 파일 용량이 큰 단점이 있고, 또 하나는 웹폰트를 사용할때 라이센스를 꼭 확인해야한다.
    종류
    • 나눔고딕
    • 다음체
    포맷
    IE Firefox Safari Chrome Opera
    eot 4 No No No No
    woff No 3.5 3.1 2.1 10
    ttf No 3.5 3.1 2.1 No
    svg No No 3.1 0.3 9.0
    기타
    • 글꼴설정
    @font-face {
        font-family: 'NanumGothicWeb';
        src: url('NanumGothicWeb.eot');
        src: local('NanumGothic'), 
             local('NanumGothic'), 
             url('NanumGothic.ttf') format('truetype'),
             url('NanumGothic.svg#font') format('svg'); 
    }
    body {
        font-family: 'Comfortaa Regular', 'NanumGothic', '맑은 고딕';
    }
    

    설치폰트

    웹폰트의 파일용량때문에 문제라면 차선책으로 나눔고딕을 자동설치하거나, Windows Vista나 Office 2007이상 사용자에게 자동설치되는 맑은 고딕 설치 사용자를 위해서 다음과 같이 설정할 수 있다.
    body {
        font-family: 'NanumGothic', '맑은 고딕';
    }
    

    이미지폰트

    이미지폰트는 모바일기기에서는 여러가지 이슈로 인해 제공하지 않는것이 원칙이나 디자인상의 이슈로 해야한다면 서버단에서 alt속성값을 가져와서 이미지를 대체하여 화면에 보여주는 방식이 될것이다.
    alt값을 가져오는 방식은 개발팀과 협의후 진행
    <img src="/images/title/h1.gif" alt="U+ 0505" class="jq_alttext_replace" />
    

    Menu

    데스크탑에서 사용하던 메뉴구현 방식은 좁은 해상도에 스마트폰에서는 사용하기 어렵기 때문에 다양한 대안에 방식이 구현되고 있다. 이에 다양한 패턴을 소개하고 구축중에 있는 사이트에 적합한 방식을 채택하길 바란다. 반응형 네비게이션 패턴 참고

    기본형

    • 가장 간단한 구현방식이다. 메뉴의 개수가 4~5개 이하의 소규모 사이트에 해당된다.

    셀렉트형

    토글형

    • 포털사이트와 같이 메뉴가 많을 경우 사용
    • 예제 사이트 : 스타벅스

    페이스북형

    • 앱형태에서 많이 볼 수 있는 방식이다.
    • 좀 더 복잡한 형태의 메뉴도 가능
    • 상단영역의 불필요한 공간을 차지하지 않는다.
    • 예제 사이트 : 버락오바마

    Media

    코덱종류

    • Audio
      • mp3
        • IE9
        • Safari
      • ogg
        • Firefox
        • Chrome
    • Video
      • mp4
        • IE9
        • Safari
      • ogg
        • Firefox
        • Chrome
      • webm
        • Chrome

    문제점

    • 다양한 코덱지원
    • 스트리밍(W3C에서도 논의되는 사항)
    • DRM

    해결방안

    • 코덱을 직접변환
      • 동영상을 일일이 변환해야하는 번거로움이 있다.
    • 동영상 변환 솔루션
      • 사이트 주요 컨텐츠가 동영상이라면 자동으로 변환하는 솔루션을 도입하는것을 검토해보아야 할것이다.
    • 유투브를 활용
      • 비용면이나 효율적인 면에서 가장 간단한 방법이다.

    File

    모바일의 경우 기기의 특성상 저장소가 없는 경우가 있기 때문에 다운로드나 업로드를 구현하지 않는다.
    다만 PDF의 경우 대부분의 기기가 뷰어를 제공하기 때문에 제공 가능여부를 판단해야한다.(다운로드에 개념은 아니다.)
    • 다운로드/업로드
    • 파일종류 – PDF

    안드로이드는 pdf viewer 가 갤럭시 나 국내 제조사는 기본내장하나 htc, 모토롤라 등에서는 제외 되는 경우가 있으므로 다운로드 후 viewer 로 보는것 자체는 다운받은 사람이 알아서 처리해야 한다.

    iphone mime type application/pdf
    android mime type application/download
    

    뷰어링크가 필요한 경우 아래와 같이 처리가능하다.
    PDF Viewer가 없는 경우

    <a href="market://search?q=pdf+viewer">Market</a>
    

    에서 PDF Viewer를 다운 받은 후 설치하세요

    Data Table

    3단이상 복잡해지는 표의 경우 작은 스크린에서 보여주기 위해서는 어렵기 때문에 여러가지 안을 찾고자 한다.
    스마트폰에서는 보통 줌을 조절하지 못하게 하는 제작하기 때문에 단순하게 재가공한다.
    외국에서는 테이블에 대한 많은 시도가 이루어지고 있다 이에 대한 다양한 예제를 접해보도록 하겠다.

    예제

    1. 필요한 셀만 노출 : 작은 해상도에서는 꼭 보여주어야하는 데이터셀만 노출시키고, 상단에 드롭다운메뉴에서 선택에 따라 숨김처리된 셀들을 보여지게 할 수 있다.
    2. 캔버스로 변환 : 간단히 수치를 비교하는 테이터라면 캔버스 기반에 그래픽으로 표현하는것도 가능하다.
    3. 썸네일 링크 : 작은 해상도에서는 썸네일처리가 되고, 썸네일부분을 클릭했을 경우 해당 테이블만 있는 페이지로 이동해서 확대줌이 가능하도록 한다.
    4. 스크롤 영역(웹킷용 브라우저에만 해당)

    멀티미디어

    html5에서는 별도에 코덱을 설치할 필요없이 브라우저에 지원만으로도 재생이 가능하다.
    다만 별도의 코덱에 대한 표준이 없기 때문에 현재 비디오의 경우 지원되는 포맷으로 mp4, ogg, webm가 있다.

    비디오

    오디오

    문제점

    • 다양한 코덱
    • 스트리밍
    • DRM

    대안

    • 코덱을 직접 변환
    • 동영상 변환 솔루션
      • 사이트 주요 컨텐츠가 동영상이라면 자동으로 변환하는 솔루션을 도입하는것을 검토해보아야 할것이다.
    • 유투브를 활용
      • 비용면이나 효율적인 면에서 가장 간단한 방법이다.
      • 다양한 포맷을 지원

    콘텐츠

    html작업시에는 css만으로 코드 분기작업하게 되면 좀 더 유용하다고 보기 때문에 이런 방식을 추천한다.
    <!-- 웹 및 패드용 -->
    <div class="desktop_area_box">
    
    </div>
    <!-- //웹 및 패드용 -->
    <!-- 스마트폰용 -->
    <div class="mobile_area_box">
    
    </div>
    <!-- //스마트폰용 -->
    

    Etc

    특수문자

    • ㈜와 같은 한글형식의 특수문자는 한글을 지원하지 않는 OS에서는 표현이 되지 않기 때문에 HTML Entity를 이용한다.
      • iOS(5.0) – 버전확인 필요
      • Android() – 버전확인 필요

    인코딩/캐릭터셋

    • UTF-8권장

    프레임셋/아이프레임

    • 프레임셋은 비권장
    • 아이프레임
      • 모바일에서는 아이프레임 사이즈 지정에 상관없이 풀사이즈로 늘어나게 된다.(불러오는 페이지에도 뷰포트가 적용되거나 %기반에 레이아웃이여야 한다.)

    문단

    • 단락에 개행을 하게되면 화면해상도에 따라서 불필요하게 여백이 생기게 된다.
    • 안드로이드 기반의 사용자의 경우 사용자 선호도에 따라 폰트 변경이 가능하기 때문이다.
    • 폰트 특성에 따라 letter-spacing이 달라진다.

    업무협의

    분기 대상 선정

    분기할 규칙을 정의

    해상도 기준 선정

    • 600px 이하
    • 1024px 이하
    • 1025px 이상

    브라우저 지원

    • IE8이하, IE9이상
    • Chrome
    • Safari
    • Firefox
    • Opera

    테스트 기기 선정

    • 선정 기준 1
      • 가장 많이 판매된 기기
      • 전체 트래픽 점유율
      • 자사 사이트에 많이 접속하는것을 분석툴을 활용하여 통계치를 분석.
    • 선정 기준 2
      • OS(iOS, Android OS, WindowPhone)
      • OS Version
        • iOS(3.2, 4.0, 5.0)
        • Android OS(2.2, 2.3, 4.0)
      • 해상도/화면크기

    스크립트

    해상도/화면크기
    • 퍼블리싱용
    • 개발용

    Tip

    모바일OS별 버그 리포트

    iOS

    • 준비중

    Android

    2.2버전이하에서의 png24 뭉게짐 현상
    • 테스트기기 : Vega X(2.2)
    • 투명 PNG를 사용할 경우 위 버전의 경우 Maximum 해상도 합이 523920(width x height) 보다 클 경우 이미지 뭉개침 현상이 생기 때문에 최소한에 이미지 사이즈로 잘라야한다.
    레이어팝업
    • 테스트기기
      • 넥서스원(2.3)
      • 베가X(2.2)
    • 레이어 밑에 폼요소가 클릭되는 문제
      • select(×)
      • input(×)
      • input[radio] (○)
      • input[checkbox] (○)
    • 해결방법
      • 기본 선택효과를 비활성화 (-webkit-tap-highlight-color: rgba(0,0,0,0);)
      • custom으로 active효과를 준다.
      • form 비활성화
      • 영역전체를 숨긴다.
      • UI 화면구성을 되도록 피한다.

    실전예제

    실전예제는 두가지 방안에 대한 예제화면을 다루게된다.

    PC Web/Smart Pad, Smart Phone

    퍼블리싱 가이드

    <html>
    <head>
      <title>회사명 - 페이지명</title>
      <script type="text/javascript">
      // 접속 스마트폰 정보
      var userAgent = navigator.userAgent.toLowerCase();
      // 모바일 홈페이지 바로가기 링크 생성
      if(userAgent.match('iphone')) {
        document.write('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />')
      } else if(userAgent.match('ipod')) {
        document.write('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />')
      } else if(userAgent.match('android')) {
        document.write('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />')
      }
      </script>
      <meta name="format-detection" content="telephone=no">
      <link rel="shortcut icon" href="/images/common/icon/favicon.ico" type="image/x-icon">
      <link rel="apple-touch-icon" href="/images/common/icon/touch_icon.png" />
      <link rel="stylesheet" href="/css/desktop.css" type="text/css" media="only screen and (min-width: 601px), print">
      <link rel="stylesheet" href="/css/desktop/메뉴별.css" type="text/css" media="only screen and (min-width: 601px), print">
      <link rel="stylesheet" href="/css/mobile.css" type="text/css" media="only screen and (max-width: 600px)">
      <link rel="stylesheet" href="/css/mobile/메뉴별.css" type="text/css" media="only screen and (max-width: 600px)">
      <script type="text/javascript" src="/js/jquery.min.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui_메뉴별.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui_mobile.js" charset="euc-kr"></script>
      <!--[if lt IE 9]>
      <link rel="stylesheet" href="/css/desktop.css" type="text/css" media="screen, print">
      <link rel="stylesheet" href="/css/desktop/메뉴별.css" type="text/css" media="screen, print">
      <![endif]-->
    </head>
    <body>
    </body>
    </html>
    

    개발 가이드

    <html>
    <head>
      <title>회사명 - 페이지명</title>
      <meta name="format-detection" content="telephone=no">
      <link rel="shortcut icon" href="/images/common/icon/favicon.ico" type="image/x-icon">
      <link rel="apple-touch-icon" href="/images/common/icon/touch_icon.png" />
      <link rel="stylesheet" href="/css/desktop.css" type="text/css" media="screen , print">
      <link rel="stylesheet" href="/css/desktop/메뉴별.css" type="text/css" media="screen , print">
      <script type="text/javascript" src="/js/jquery.min.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui_메뉴별.js" charset="euc-kr"></script>
    </head>
    <body>
    </body>
    </html>
    
    <html>
    <head>
      <title>회사명 - 페이지명</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
      <meta name="format-detection" content="telephone=no">
      <link rel="apple-touch-icon" href="/images/common/icon/touch_icon.png" />
      <link rel="stylesheet" href="/css/mobile.css" type="text/css" media="screen">
      <link rel="stylesheet" href="/css/mobile/메뉴별.css" type="text/css" media="screen">
      <script type="text/javascript" src="/js/jquery.min.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui_mobile.js" charset="euc-kr"></script>
    </head>
    <body>
    </body>
    </html>
    

    PC Web, Smart Pad, Smart Phone

    <html>
    <head>
      <title>회사명 - 페이지명</title>
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
      <meta name="format-detection" content="telephone=no">
      <link rel="shortcut icon" href="/images/common/icon/favicon.ico" type="image/x-icon">
      <link rel="apple-touch-icon" href="/images/common/icon/touch_icon.png" />
      <link rel="stylesheet" href="/css/narrow.css" type="text/css" media="only screen and (max-width: 480px), print">
      <link rel="stylesheet" href="/css/normal.css" type="text/css" media="only screen and (min-width: 481px) and (max-width: 1200px), print">
      <link rel="stylesheet" href="/css/wide.css" type="text/css" media="only screen and (min-width:1201px), print">
      <script type="text/javascript" src="/js/jquery.min.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui.js" charset="euc-kr"></script>
      <script type="text/javascript" src="/js/ui_메뉴별.js" charset="euc-kr"></script>
      <!--[if lt IE 9]>
      <link rel="stylesheet" href="/css/desktop.css" type="text/css" media="screen, print">
      <link rel="stylesheet" href="/css/desktop/메뉴별.css" type="text/css" media="screen, print">
      <![endif]-->
    </head>
    <body>
    </body>
    </html>
    

    반응형 웹 관련 용어 정의

    기본 개념

    반응형 웹 디자인

    최초로 반응형 웹 디자인(responsive web design)을 사용한 사람은, A List Apart에 Responsive Web Design을 기고한 Ethan Marcotte로 알려져 있습니다.
    1) 반응형 웹 디자인을 짧게 정의하면, 하나의 코드로 모든 기기에서 적절하게 보여주는 것 입니다.
    보다 긴 정의는, CSS3의 media-query, 유동형 그리드 (fluid grids), 반응형 또는 유연한 이미지 (responsive or flexible images), 반응형 레이아웃 등의 기술을 이용하여, 사용자가 여러 종류의 기기와 브라우져를 사용하여 접근하여도, 최소한의 크기조정/회전/스크롤을 통해서 쉽게 콘텐츠를 접근할 수 있도록 제공하는 것을 뜻합니다.

    1) 모바일 퍼스트

    웹 디자인을 할때, 모바일을 먼저 생각해서 디자인을 한다는 개념으로, Luke Wroblewski에 의해서 주장되었습니다.
    대표적으로 media query를 사용할때, media query가 적용되지 않는 경우를 모바일 브라우져로 가정하는 것이 해당됩니다. 2)
    가끔 점진적 향상 (progressive enhancement) 접근 방법과 같이 사용되기도 합니다.
    Graceful degradation

    우아한 퇴보?의 다른 용어는, 결함없는 작동 (fault-tolerance)이며, 웹 디자인에서는, 최신 기술/표준을 따르지 못하는 브라우져에서도 크게 문제없이 처리되는 것을 뜻합니다.
    유동형 그리드

    E.Marcotte에 의해서 최초로 제안된 유동형 그리드 (fluid grids)는, px 대신 em 또는 %를 사용하여, 스크린 크기에 상관없이 원래 의도한 형태의 그리드를 유지하는 것입니다.
    반응형 또는 유동형 이미지

    유동형 이미지 (fluid images)는 E.Marcotte가 A List Apart와 그의 블로그에서 제안한 (max-)width=100% 사용과, 이를 처리하지 못하는 IE7- 를 위한 javascript 코드로 지칭합니다.
    반응형 (responsive) 또는 적응형 (adaptive) 이미지는, 스크린 크기나 기기 종류에 따라서 이미지의 크기 (width 와 실제 화일 크기)를 선택적으로 적용하여, (특히 모바일에서) 적절한 이미지 다운로딩과 표현을 하도록 유도하는 기술입니다.
    특히 서버쪽에서 처리하는 기법이 같이 사용되어, 흔히 RESS (Responsive Web + Server Side Components) 접근 방법이 적용됩니다.
    반응형 또는 가변형 레이아웃

    반응형 레이아웃 이라는 단어는 실제로는 통용되지 않지만, 다른 반응형 * 용어들과 같은 맥락에서 보자면, 여러 스크린 크기/기기 들에 반응하는 레이아웃을 지칭합니다.
    Luke Wroblewski가 제안한 다중기기 레이아웃 패턴글에서 보여준, 기기별로 변화하는 레이아웃을 일컫기도 합니다.
    반응형 메뉴 또는 네비게이션

    반응형 레이아웃과 더불어, 데스트탑 메뉴/네비게이션을 모바일에서 어떻게 표현할지 접근하는 기법입니다.
    Brad Frost의 반응형 네비 패턴 참조
    관련 기술

    CSS3 media-query

    CSS3에서 도입된 @media를 이용하여, 보여지는 스크린 (해상도)의 최소/최대 크기등의 조건별로, 원하는 스타일을 적용할 수 있습니다.
    RESS

    Responsive Web + Server-Side Components의 줄임말로, (media-query와 javascript을 이용한 클라이언트 만에서의) 반응형 웹 디자인의 한계와 불편함을 극복하기 위하여, 서버쪽에서도 (user-agent 정보를 이용하여) 적절하게 처리된 내용을 제공하는 기법입니다. LukeW
    특히 반응형 이미지 등 모바일 환경에서 통신횟수/양을 최소화하기 위한 선별적 이미지 화일 제공 기법이 이에 속합니다.
    user-agent 문자열

    브라우져 등의 통신 소프트웨어가 서버에 넘겨주는 일종의 인식코드로, 특정 브라우져별로 정해진 user-agent 문자열이 정해져 있습니다.
    하지만, 해당 문자열은 전적으로 보내는 쪽에서 결정하므로, 그 정확도나 신빙성이 떨어지는 것으로 알려져 있습니다.
    그럼에도 불구하고, 서버쪽에서 기기/브라우져 를 판단할 수 있는 유일한 근거이기에, http://detector.dmolsen.com/, http://wurfl.sourceforge.net/ 등 여러 유/무료 디비/api 등이 존재합니다.

    참고문헌

    사이트

    도서

    원래는 이 자료를 준비하면서 좀 더 다양한 예제와 함께 준비하려고 했기 때문에 분량이 이보다는 더 많으나 언제 완성될지도 몰라서 미완성이지만 차후에 완성이 된다면 블로그보다는 PDF책자 형태로 배포가 되지 않을까 하는 생각이다.

    Posted in: 웹 표준Tagged: ,

    CSS를 이용한 도형 만들기(1탄-삼각형)

    2 Comments

    ## CSS border의 기본 사용 방법
    CSS속성을 이용해서 다양한 도형을 만들어 보도록 하겠습니다.
    여러분이 아셔야하는 것은 border, border-radius, :before, :after 이렇게 딱 4가지입니다.
    _border, border-radius, :before, :after_를 이용해서 만들수 있는 예제들입니다.
    어떻게 감이 오시나요?

    그럼 여러분이 생각하시는 border는 어떤것일까요?
    바로 아래의 이미지와 같을거라고 생각하고 있습니다. 맞나요?

    border 이미지 일반적인 사용 예제

    .border	{
    	width: 300px;
    	height: 100px;
    	border: 10px solid green;
    	margin: 10px;
    }
    .border-radius	{
    	width: 300px;
    	height: 100px;
    	border: 10px solid green;
    	-moz-border-radius: 15px;
    	-webkit-border-radius: 15px;
    	border-radius: 15px;
    	margin: 10px;
    }

    border속성을 정확히 알고 있다면 쉽게 풀 수 있는 문제입니다.
    border는 다 알고 계시겠지만 한번 더 알아보는 시간을 가져야지 앞으로 진행이 좀더 원활하지 않을까 싶네요~
    border를 이용하려면 어떤것이 필요할까요..?
    border속성을 줄 대상체와 width와 height가 있어야할것이라고 당연히 생각할것입니다.

    content+padding+border+margin

    border를 이용하기 위해서는 최소한 content 또는 width와 height가 있어야 할것입니다
    그러나 우리들이 지금해야할 목적은 오직 삼각형의 도형을 만들기 위한 시간입니다.
    그러니 content 또는 width와 height는 다 필요없습니다.
    즉 content도 없어야하고, width와 height도 없어야 합니다.
    content는 대상체에 content가 없으면 될일이고 width와 height는? width=0; height=0; 쉽죠?
    content도 없고 width=0; height=0;인 상태에서 한번 border를 넣어보도록 하겠습니다. 단 각변에 컬러값은 다르게 넣어야 합니다. 왜냐구요?
    아래 이미지를 보시면 쉽게 이해가 가실것입니다.

    무릅을 탁 치시는분이 계시군요? ^^;
    그렇습니다. 각변에 영역을 알아보기 쉽게함으로써 대각선형태로 나누어진다는것을 보여드리기 위한 것입니다.. 그럼 여기서 필요없는 부분은 하나 하나씩 버리면 됩니다.
    버리는 방법은 간단합니다 0과 transparent를 이용하는것입니다.

    ## CSS border를 이용한 삼각형 만들기
    아래 순서대로 한번 제작을 해보겠습니다.

    1. **width=0; height=0;**을 주었더니 피라미드를 위에서 바라본것처럼 4개의 삼각형이 생겼습니다. 우리가 필요한 부분은 4개의 삼각형중에 아래의 녹색의 삼각형이므로 하나하나씩 제거해보겠습니다.

    2. **border-top-width: 0;** 우리에게 필요없던 윗부분을 없앴습니다. 그럼 좌우 파란색영역과 노란색영역만 없어지면 되겠군요.
    3. 2번에서 한것처럼 border-right-width: 0;을 주면 어떻게 될까요?

    이런 삼각형에 반쪽까지 사라져버렸습니다. 직각삼각형이 되버렸습니다. 우리들은 이런걸 원했던것이 아닙니다.
    그럼 노랑색부분만 뺄 방법은 없을까요?
    **border-right-color: transparent;** 이것이 해답입니다. border-right 영역은 살리고 대신 투명처리함으로써 우리가 원했떤 삼각형 형태를 살리고 있습니다. border-left 역시 같은 방법을 사용하면 됩니다.

    4. 완성된 삼각형 형태입니다.
    밑변과 높이는 예제 이미지에서 보시는것처럼 각 변에 border-width를 이용하시면 됩니다.

    5. border-left-width: 0; 3번에서 우리는 실수로 border-right-width: 0; 넣어봤더니 삼각형에 반쪽이 없어진것을 보았습니다. 실수였지만 우리는 직각삼각형도 만들 수 있다는 사실을 알게 되었습니다. 한마디로 “소 뒤 걸음치다가 쥐 잡은겪이네요”.

    ## CSS Code

    .border	{
    	width: 0; 
    	height: 0; 
    	border: 100px solid #00cc33;
    	border-top-width: 0;
    	border-right-color: transparent;
    	border-left-color: transparent;
    	margin: 10px;
    }
    

    ## 다음 시간을 기약하며
    누구나 알 수 있고 만들 수 있지만 속성에 대해서 이해하고 아이디어를 가지고 있다면 이보다 더 좋은 아이디어가 나올 것이라고 보고 있습니다.
    다음 시간에는 지금 시간에 배운 삼각형을 이용해서 CSS3 Speech Bubbles을 만들어 보겠습니다.

    Posted in: 웹 표준Tagged: ,

    웹 퍼블리셔가 가져야할 마음가짐

    6 Comments

    보통 블로그에 웹 퍼블리셔가 가져야할 기술적인면에 대한 포스팅이 많기에 따로 기술적인 부분에 대해서는 다루지 않고 주로 업무에 있어서 가져야할 마음가짐에 대해서 포스팅을 해보았습니다.

    ### 기본기 ###
    웹에서의 직군중 아무래도 웹 퍼블리셔쪽이 문턱이 낮은 편입니다. 처음에 아무래도 배우기 쉬운 장점이 있지만, 하면 할수록 어렵고 해야할 공부들이 많기도 합니다.
    대학으로 비유하자면 입학하긴 쉽지만 졸업하기는 어려운 경우입니다. 수학을 공부할때 공식위주로 공부를 하게되면 언젠가는 본인의 한계점이 부딪히게 됩니다. 웹 표준/웹 접근성 역시 기본기를 확실하게 해두어야지 실무에서의 다양한 사례나 난관에서의 어려움을 해결해 나갈 수 있으리라 생각합니다.
    그러나 기본기를 밑바탕으로 다양한 부분에 대해서 관심을 가지고 지속시켜 나가야 할것입니다.

    ### 커뮤니케이션 ###
    웹 사이트 제작시에 기획 다음으로 가장 많은 파트와의 커뮤니케이션이 필요한 파트입니다.
    의사전달을 함에 있어서 확실한 의사표현을 할 필요가 있습니다. 기술적으로 안되는것에 대해서는 그냥 안된다는 식의 표현을 개인감정으로 표출한다거나 한다면 웹표준에 대한 안좋은 기억만이 남아 있을것입니다. 이론적인 설명과 밝은 얼굴로 대한다면 상대방도 기술적인면에서 납득을 할것이고 다른 대안에 대해 의견을 나눌 수 있을것입니다.

    ### 융통성 ###
    보통 프로젝트에 참여하다보면 조금은 손해도 볼것이고, 다른 파트와의 소통 역시 잘 안될때가 많을 것입니다.
    원리원칙만 고집할것이 아니라, 그 상황에 따라서 대처해야할 것이고, 그렇다고 옳다고 생각한다면 끝까지 밀어부칠 있는 확고한 소신도 가지고 있어야 할것입니다.

    ### 적극성 ###
    A라는 팀원과 B라는 팀원이 있다고 가정합니다. A라는 팀원은 성격도 활달하고 본인이 배운 지식을 빨리 흡수하는 편입니다. B라는 팀원은 소극적이고 새로운 시도를 하는 편입니다.
    A라는 팀원은 그만큼 더 빨리 배우는 편이지만, 빨리 배우다보면 기본기를 놓침으로써 코드에 대한 깊이가 낮아질 경우가 있습니다. 이런점을 간과하지 않는다면 그 분야에서 인정받는 한 사람이 될것입니다.
    B라는 팀원은 배움에 속도는 느릴 수 있지만, 새로운 시도를 한다는것은 더 깊이있는 시도를 함으로써 코드에 품질을 차후에 높힐 수 있습니다. 다만 현업무에서 그럴 경우 작업 속도에 영향을 미칠 수 있으니 이러한 점에서 조절을 해야할 것입니다.

    ### 마치며 ###
    종종 프로젝트를 하다보면 기획, 디자인, 개발 파트에 대한 불평에 소리를 많이 듣곤 합니다.
    “기획이 뭐냐”, “디자인 나도 하겠다.”, “개발 copy&past하면 되지 않느냐” 등 웹 퍼블리셔를 하는 사람치고 이런 말을 안들어본 사람은 없을 것입니다.
    그러나 유독 심한 사람도 있습니다. 불평에 소리를 하기전에 그 사람들이 웹표준을 잘 알고 본인에 소스를 보고 비평을 하게 된다면 어떨까요?
    > 벼는 익을수록 고개를 숙인다.

    라고 하지 않나요.^^ 많이 알면 알수록 자기 자신을 돌아보는 계기가 되어서 겸손해졌으면 하는 바람입니다.

    2000년도부터 테이블 코딩을 하다가 2005년도에 웹표준/웹접근성을 접하며 느끼지만,
    개인으로 사회적으로 봉사를 따로 할 수는 없었으나 웹 접근성 작업을 함으로써 미약하게나마 사회적인 약자분들에게 도움을 드릴 수 있었지 않았나 싶습니다.

    Posted in: 웹 표준Tagged:

    처음처럼

    Leave a Comment

    태어나서 처음으로 블로그를 설치하고 글을 올려본다.
    어떤 공간이 될지에 대해서는 아직 고민중이나 직업상 웹표준과 관련된 컨텐츠들이 올라오지 않을까 싶다.

    기존에 올라와 있던 내용들은 탈피하고 싶다. 관련된 내용들은 어차피 전문적인 식견을 가지고 있는 분들이 많기때문에 다른 방향에서 접근할 수 있도록 노력을 해서 가치있는 정보를 만들어 나가야지 싶다.

    끝으로 화이팅~^^;

    Posted in: 일상Tagged: ,