반응형

안녕하세요, 맑은커뮤니케이션의 퍼블리셔 윤상원입니다.

오늘은 IE10 이상을 지원하는 페이지 작업을 할 때 유용하게 쓰이는 Swiper에 대해 정리해보았습니다.

 

 

 

사용 방법

 

1단계: 연결(두 가지 방법)

 

 

1. 파일을 다운로드하지 않고 html에서 CDN 연결

<link rel="stylesheet" href="https://unpkg.com/swiper/css/swiper.min.css">

 

 

2. 파일을 다운로드해서 html 연결

https://github.com/nolimits4web/swiper/archive/v5.3.0.zip

 

 

예시)

<!DOCTYPE html>
<html lang="ko">
<head>
    ...
    <link rel="stylesheet" href="path/to/swiper.min.css">
</head>
<body>
    ...
    <script src="path/to/swiper.min.js"></script>
</body>
</html>

CSS, JS 파일은 package 폴더 안에서 찾아볼 수 있습니다.

 

 

2단계: 기본 레이아웃 추가

<div class="swiper-container">
    <div class="swiper-wrapper">
        <div class="swiper-slide">Slide 1</div>
        <div class="swiper-slide">Slide 2</div>
        <div class="swiper-slide">Slide 3</div>
        ...
    </div>
</div>

swiper-container > swiper-wrapper > swiper-slide 순으로 감싸져있어야 하고,

swiper-slide가 슬라이드의 내용이 됩니다.

 

 

 

3단계: 자바스크립트에서 Swiper 초기화

new Swiper('.swiper-container');

swiper-container라는 클래스 이름은 변경하지 않아야 합니다.

 

 

예제

See the Pen 간단한 스와이퍼 예제 by 윤 시대 (@yoonsangwon) on CodePen.

 

 

다른 옵션을 넣지 않고 1번부터 3번까지의 내용을 적용한 예제입니다.

 

 

 

 

슬라이드 옵션

 

Swiper에는 다양한 옵션들이 있습니다.

옵션을 사용하면 마우스로만 움직이는 슬라이드를 버튼 클릭으로 움직이게 하거나,

아무런 동작을 하지 않아도 자동으로 슬라이드가 넘어가게 하는 등 사용자가 더 편리하게 이용할 수 있습니다.

 

 

슬라이드 옵션 예제

See the Pen 슬라이드 옵션 by 윤 시대 (@yoonsangwon) on CodePen.

 

 

예제처럼 필요한 옵션과 값을 적어주면 적용할 수 있습니다.

동작이 아닌 버튼이나 스크롤 바가 생기는 등의 옵션은 해당 html 코드도 같이 넣어주어야 합니다.

 

 

옵션 적용하는 방법

사용방법 3번이 Swiper를 초기화하는 방법(한 줄)이었다면 옵션을 추가할 때는 코드의 모양이 바뀌어야 합니다.(여러 줄)

 

옵션이 필요없을 때

new Swiper('.swiper-container');

 

옵션을 적용해야 할 때

var mySwiper = new Swiper('.swiper-container', {

   // 여기에 옵션을 넣어야 합니다.

});

 

 

자주 사용하는 옵션 목록 ('더보기'를 클릭하면 옵션을 볼 수 있습니다)

 

Navigation(페이지를 넘기는 버튼)

더보기

[HTML]

<div class="swiper-button-prev"></div> // 이전 페이지
<div class="swiper-button-next"></div> // 다음 페이지

[Javascript]

var mySwiper = new Swiper('.swiper-container', {
  navigation: {
    prevEl: '.swiper-button-prev',
    nextEl: '.swiper-button-next',
  },
});

See the Pen rNVevqd by 윤 시대 (@yoonsangwon) on CodePen.

 

 

Pagination(페이지의 순서를 나타내는 불릿)

더보기

[HTML]

<div class="swiper-pagination"></div>

[Javascript]

var mySwiper = new Swiper('.swiper-container', {
  pagination: {
    el: '.swiper-pagination',
    type: 'bullets',
  },
});

See the Pen WNvwJLp by 윤 시대 (@yoonsangwon) on CodePen.

 

 

자동 재생(1000 = 1초)

더보기

[Javascript]

var mySwiper = new Swiper('.swiper-container', {
  autoplay: {
    delay: 2000,
  },
});

See the Pen ExjKLGe by 윤 시대 (@yoonsangwon) on CodePen.

 

 

한 번에 여러 장의 슬라이드를 표현하는 방법 + 슬라이드 무한 반복

더보기

[Javascript]

var swiper = new Swiper('.swiper-container', {
    slidesPerView: 3, // 보여지는 슬라이드 수
    spaceBetween: 30, // 슬라이드 간의 거리(px 단위)
    loop: true, // 슬라이드 무한 반복
    centeredSlides: true, // 다음 슬라이드의 모습이 50%만 보입니다.(중앙)
});

See the Pen xxGVJZO by 윤 시대 (@yoonsangwon) on CodePen.

 

 

스와이퍼 홈페이지에서 더 많은 옵션과 예제를 확인할 수 있습니다.

옵션:  https://swiperjs.com/api/

예제:  https://swiperjs.com/demos/

 

 

 

홈페이지에는 나오지 않는 방법들

한 페이지에서 스와이퍼를 여러 번 사용해야 할 때 선언하는 방법

더보기

스와이퍼를 한 페이지에서 여러 번 사용할 때가 있습니다.

그럴 때는 swiper-container 클래스마다 추가로 클래스를 넣고, 각자의 클래스를 스크립트에 선언해주면 됩니다.

 

[HTML]

// 첫번째 슬라이드입니다.
<div class="swiper-container swiper1">
    <div class="swiper-wrapper">
        <div class="swiper-slide">Slide 1</div>
        <div class="swiper-slide">Slide 2</div>
        <div class="swiper-slide">Slide 3</div>
    </div>
</div>

// 두번째 슬라이드입니다.
<div class="swiper-container swiper2">
    <div class="swiper-wrapper">
        <div class="swiper-slide">Slide 1</div>
        <div class="swiper-slide">Slide 2</div>
        <div class="swiper-slide">Slide 3</div>
    </div>
</div>

 

[Javascript]

// 첫번째 슬라이드에 추가한 클래스를 선언해주세요.
var swiper1 = new Swiper('.swiper1', {

	// 옵션을 넣어주세요.
});

// 두번째 슬라이드에 추가한 클래스를 선언해주세요.
var swiper2 = new Swiper('.swiper2', {

	// 옵션을 넣어주세요.
});

 

 

 

슬라이드 버튼을 swiper-container 밖으로 이동시키는 방법

더보기

작업을 하다보면 슬라이드의 버튼을 컨테이너 밖으로 이동시키고 싶은데 화면에서 사라질 때가 있습니다.

그 이유는 .swiper-container 안에 들어간 overflow:hidden 속성 때문인데요,

슬라이드를 사용하기 위해선 overflow 속성을 끌 수 없으니 이 방법을 사용하면 해결할 수 있습니다.

 

[HTML] - 기존

<div class="swiper-container">
    <div class="swiper-wrapper">
        <div class="swiper-slide">슬라이드 1</div>
        <div class="swiper-slide">슬라이드 2</div>
        <div class="swiper-slide">슬라이드 3</div>
    </div>
        
    <div class="swiper-button-prev"></div> <!-- 이전 페이지 -->
    <div class="swiper-button-next"></div> <!-- 다음 페이지 -->
</div>

 [HTML] - 수정 후

<div> // 임의의 DIV
    <div class="swiper-container">
        <div class="swiper-wrapper">
            <div class="swiper-slide">슬라이드 1</div>
            <div class="swiper-slide">슬라이드 2</div>
            <div class="swiper-slide">슬라이드 3</div>
        </div>
    </div>
    
    <div class="swiper-button-prev"></div> <!-- 이전 페이지 -->
    <div class="swiper-button-next"></div> <!-- 다음 페이지 -->
</div>

기존에 .swiper-container 안에 있던 버튼 두 가지를 밖으로 빼내고 전체를 임의의 div를 새로 감싼 모습입니다.

그리고 이제 새로 감싼 div에 position:relative를 추가하고,

.swiper-container에 있던 position:relative를 position:static 으로 변경해주시면 됩니다.

 

[결과 화면]

 

 

감사합니다.

반응형
반응형

안녕하세요

(주)맑은커뮤니케이션에 근무하는 유아영입니다.

오늘은 placeholder에 대해 알아보려고 하는데요,

HTML5의 placeholder 속성은 input 요소와 textarea 요소에 알맞은 힌트를 제공하는 목적으로 사용됩니다.

이러한 힌트는 사용자가 입력상자에 데이터를 입력하는데 도움을 줍니다.

사용 방법은 <input type="text" placeholder="내용을 입력하세요."> 이렇게 써줄 수가 있는데요.


 IE

chrome 

Firefox

safari

 10+ -ms

47+

4+ -moz-, 51+ 


9+



하지만, IE 6~9 사이의 브라우저는 HTML5의 placeholder 속성을 지원하지 않습니다.


해결 방법을 알아볼까요?


1. https://github.com/mathiasbynens/jquery-placeholder

위의 url에서 스크립트를 다운받는다.

placeholder.js 를 사용하면 IE9 이하는 .placeholder 이라는 클래스가 자동으로 생성된다.

2. <script type="text/javascript" src="js/jquery.placeholder.js"></script>

코드를 추가한다.

3. js파일에 $('input, textarea').placeholder();

코드를 추가한다.

4. css.파일에 .placeholder 클래스를 이용해 속성을 주면 끝납니다.

위의 내용을 예제를 통해 한 번 살펴볼까요?



See the Pen dwBoOj by ahyoung (@ahyoung) on CodePen.






::placeholder 선택자로 선택하여 스타일을 줄 수 있습니다.

input::placeholder : Chrome, Firefox, Opera, Safari 최신 버전에서는 적용이 잘 됩니다.

하지만 Chrome, Firefox, Opera, Safari의 구버전과 IE에서는 적용되지 않습니다.


그 해결 방법은 아래와 같습니다.

input::-webkit-input-placeholder : Chrome

input:-ms-input-placeholder : IE

input:-mos-input-placeholder : Firefox


텍스트로만 보면 이해가 안 될 수 있는데요

예제를 통해 같이 한 번 알아볼까요?




See the Pen gZJYGb by ahyoung (@ahyoung) on CodePen.



Tip) 다 적용해도 파이어폭스에서 이상하게 뿌옇게 보이는 현상을 보실 수가 있는데요, 

그럴 때는 input::placeholder { opacity: 1 } 을 넣어주면 해결이 됩니다.




placeholder를 사용하다 보면 줄바꿈을 하고싶어질 때가 있을텐데요 

그 방법에 대해 알아볼까요?


See the Pen maZbdQ by ahyoung (@ahyoung) on CodePen.


설명


&#10; : 줄바꿈을 하고 싶은 곳에 해당 코드를 추가해줍니다.




오늘은 placeholder에 대해 알아보았는데요

부족한 점이나 잘못된 점이 있으면 댓글 부탁드립니다!

감사합니다.



반응형
반응형


안녕하세요!

맑은커뮤니케이션 웹퍼블리싱팀 정혜인 입니다.

이 게시글에서는 협업의 필수! 코드관리 시스템 Git의 기초에대해 열심히 설명해보려합니다!


INDEX

- git이란?

- 분산 버전 관리 시스템

- 저장소 (Repository)

- 브랜치 (Branch)

- 기초 git 명령어 (add / commit / push / pull)




Git

프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템(Distributed 

Version Control System; DVCS)


프로젝트를 진행하다 보면 어떤게 최신 소스인지 작업자들이 어떤부분을 어떻게 수정하였는지 이력관리가 필요합니다.

이러한 소스 코드 관리를 위해 개발자들은 버전 관리 시스템을 개발하였고 

git, svn 등 과 같은 소프트웨어들이 등장하였습니다.

버전 관리는 로컬 버전 관리 시스템 / 중앙 집중식 버전 관리 시스템 / 분산 버전 관리 시스템이 있으며 

git은 분산 버전 관리 시스템을 사용하고 있습니다.





분산 버전 관리 시스템



분산 버전 관리 시스템은 로컬 버전 관리, 중앙 집중식 버전 관리의 단점을 보완한 시스템입니

이 시스템의 포인트는 아래와 같습니다.


1. 원격서버에 버전관리 시스템의 저장소(repository)를 둔다.

2. 작업자(client)들은 자신의 로컬에 원격서버 저장소(repository)를 통째로 복사해온다.

3. 원격서버에 문제가 있어도 작업자(client)들의 로컬 저장소는 영향을 받지 않는다.

4. 원격서버에 문제가 생길시 작업자(client)의 로컬 저장소를 사용하여 원격 서버를 복구할 수 있다.





저장소 (Repository)


Git은 원격 저장소(Remote Repository)와 로컬 저장소(Local Repository)를 갖고있습니다.


 원격 저장소(Remote Repository)

 로컬 저장소(Local Repository)

 

인터넷(네트워크)을 이용하여

다수의 작업자(Client)들이 접근할 수 있는 저장소

소스를 올리거나(push) 내려받을(pull) 수 있음


 작업자(Client)가 원격 저장소를 내려받은 장소

(개인용 PC,노트북 같은)



Git 저장소를 만드는 방법

1. 진행중인 프로젝트 Git 저장소로 만들기

- 프로젝트 디렉토리로 이동해서  $git init  명령어를 실행합니다.

- git init은 .git 이라는 하위 디렉토리를 만들며 이 디렉토리는 저장소에 필요한 파일들이 들어있습니다.

- git이 파일을 관리하게 하려면 작업파일들을  $git add .  명령어를 사용하여 추가한 후  $git commit -m "{커밋 메시지}" 

명령어를 사용하여 커밋합니다.

이 후에 이 디렉토리에서 작업되는 파일들은 git을 통해 이력관리가 시작됩니다.


2. 다른 서버에 있는 저장소 복제하기(clone)

이미 진행중인 프로젝트에 참여하거나 다른 Git 저장소를 복사하고 싶을 때 $git clone {URL} 명령어를 사용하여

내 로컬 저장소에 복제할 수 있습니다.


GitHub 저장소 URL 복제 예시

1) git 주소 복사


2) 작업을 원하는 폴더에 명령프롬프트를 열어 $git clone {URL} 명령어 작성


저장소 복제 끝~~~!!!





브랜치 (Branch)


Branch : 1. 나뭇가지   2. 지사, 분점   3. (큰 조직의) 분과

중심,기준이 되는 지점에서 같이 나와 다른 뱡향으로 뻗어나가는 가지들처럼

동일한 소스를 기반으로 서로 다른 작업을 수행하기 위한 독립적인 작업공간의 개념이라고 할 수 있습니다.


1. BASE 소스코드는 작업을 진행할 기반이 되는 소스입니다. (master) 

ㄴBASE소스가 master브랜치일 필요는 없습니다.

2. 기반이 되는 소스(master)에서 종상이 작업/아영이 작업/혜인이 작업 이라는 폴더의 작업영역을 생성합니다.(브랜치 3개 생성) 

ㄴ브랜치 생성시 BASE 소스코드가 그대로 복제되어 옵니다.

3. 각자의 작업영역에서 주어진 작업을 완료하면 하나의 소스로 취합을 하게됩니다. (merge)


브랜치는 주로 위 설명처럼 사용하게 되며 다수의 작업자들과 함께 작업하는 프로젝트에서 소스 관리를 하기에 

굉장히 효율적이고 편리합니다.


브랜치 생성

 $git branch {브랜치명

{브랜치명}의 브랜치를 생성합니다.

 $git branch 

브랜치명을 제외하고 명령어를 치면 생성된 브랜치 전체목록을 볼 수 있으며

현재 브랜치의 위치도 알 수 있습니다.(현재 브랜치명 앞에 * 가 붙음)


브랜치 전환

$ git checkout {브랜치명

{브랜치명}의 브랜치로 이동할 수 있습니다.

 $git checkout -b {브랜치명

{브랜치명}의 브랜치를 생성하고 동시에 생성한 브랜치로 이동시켜줍니다.


브랜치 삭제

 $git branch -d {브랜치명

{브랜치명}의 브랜치를 삭제합니다.


( 브랜치 병합 명령어인 merge와  rebase 관련 내용은 기초에서 다루지 않겠습니다ㅎㅎ;; 패쓰패쓰!!(쓩) =3 =3 )





add / commit / push / pull


git의 가장 기본적인 명령어는 add / commit / push / pull 입니다.

작업을 하며 가장 많이 사용하게 될 명령어이기도 합니다. ㅎㅎ


1. add

작업을 진행하면 변경 이력들이 working directory라는 가상공간에 기록이 됩니다.

commit하기위해서는 staging area에 변경 이력들이 보내져야 하는데요!

이 때 add를 사용하면 변경 이력들이 staging area에 올라가게 됩니다.


 $git add {파일명} 

{파일명}의 작업파일을 staging area에 올립니다.

 $git add . 

모든 변경이력들이 staging area에 올라갑니다.


2. commit

staging area에 올라온 변경 이력들을 원격저장소에 올리기 전에

간단하게 작업 내용을 기록하며 묶어(?)두어야 하는데 이 작업을 commit 이라고 합니다.

 $git commit -m "{커밋메시지}"  명령어를 사용하여 commit 하고 메시지를 기록할 수 있습니다.


소스트리로 commit 메시지 확인하기

1) 명령 프롬프트에서 git commit -m "{커밋메시지}" 입력


2) 입력된 commit 메시지로 commit이 된 것을 확인할 수 있습니다.  


3. push

commit까지 완료된 변경 이력들을 원격 저장소에 올리는 명령어입니다.

 $git push {원격저장소명} {브랜치명}  명령어를 입력하면 원격저장소에 해당 브랜치에서

작업한 이력들이 올라가게 됩니다.


push가 되지 않을 때 --force

 $git push origin master  명령어를 사용하여 원격저장소(origin)에 master 브랜치를 올렸는데

작업이 수행되지 않고 오류를 뱉어낼 때가 있습니다.

원격 저장소의 master브랜치와 로컬 저장소의 master브랜치가 충돌이 나기 때문인데요

이때는  $git push origin master --force  명령어를 사용하면 로컬 저장소 기준의 브랜치가

원격 저장소에 강제로 올라가게 됩니다.


--force 옵션을 막 사용하게 되면 함께 일하는 작업자들의 소스와 충돌이 나거나 꼬일 경우가 많으니

사용할 때는 작업자들과 커뮤니케이션이 꼭 필요합니다!


4. pull

git push로 내가 원격 저장소에 올린 이력들이 있다면 같은 저장소를 사용하고 있는 작업자들은

원격 저장소에 올라온 변경 이력들을 내려받을 수 있습니다.

원격 저장소의 변경 이력들과 로컬 저장소의 변경이력이 겹치지 않는다면 충돌이 나지 않고

문제 없이 pull이 완료됩니다.




마치며 ...

이 글로 git의 모든 것을 알 수는 없지만 대략 이러이런 것이라는 걸 알아두시고 공부하면 좋을 것 같습니다!

다음 git글에서는 좀 더 심화된 내용으로 찾아오겠습니다. 부족한 내용, 잘못된 내용 피드백 주시면 감사하겠습니다 : )


반응형
반응형

 

안녕하세요.

(주)맑은커뮤니케이션의 여전히 나이막내(?) 스물다섯스물하나입니다.

2019년이 되었는데요.

2018년에는 다들 어떠셨나요.?

잘 되신 분들은 앞으로도 잘 되시기를 바라고

잘 안되었던 분들은 앞으로 하는 일 모두 잘 되시기를 바랍니다.

 

 

 

 

웹퍼블리싱 작업을 하다보면 아무래도 매번 쓰던속성만 쓰게되어

가까운 길을 냅두고 먼길을 돌아가는 상황을

셀프(?)로 만들때가 종종 있더라구요.

 

 

 

 

뿌엥...

 

 

그래서 셀프뺑뺑이(?)를 방지하기 위해

CSS탐방을 떠나보기로 했습니다.

 

 

 

세상은 넓고 CSS는 무궁무진하게 많다!

(※ 세상은 넓지만 CSS는 무궁무진하게까지 많지는 않습니다)

 

 

 

원래는 CSS4가 어디까지 작업이 되고 있나 한번 구경을 가볼까 하였는데요.

아직도 안되는 것들이 많아서... 패쑤!

 

 

그럼 본격적으로 같이 한번 떠나보겠습니다!

(제 기준에서 작성된 내용입니다 ㅠㅜ

어떤분들은 자주 사용하는 속성일수도 있어요.)

 

 

 

 

 

 

오늘의 첫번재 주인공은 바로

 

 

 

 

 

 

 

 

border(보더) 입니다.

 

 

◎ border

◎ border-bottom

◎ border-bottom-color

◎ border-bottom-style

◎ border-bottom-width

◎ border-color

◎ border-left

◎ border-left-color

◎ border-left-style

◎ border-left-width

◎ border-radius

◎ border-right

◎ border-right-color

◎ border-right-style

◎ border-right-width

◎ border-style

· · ·

 

보더에는 다양한 속성들이 있는데요.

저는 주로

1px solid #컬러컬러 형식을

99%정도로 대단히 많이 사용하는 것 같습니다

라인은 자고로 쏠리드(?)가 제맛이죠

 

 



보더스타일은 솔리드 밖에 모르는 바보였는데

최근에 어마어마한 속성이 존재하다는 것을 알게 되었습니다.

바로  border-image입니다.

 

 

 

이름만 봐도 딱 느낌이 오시죠?

같이한번 알아보도록 하겠습니다.

 

 

 

1.border-image

 

See the Pen Untitled by Jong Sang Park (@JongS) on CodePen.

 

설명

보더를 이미지로 지정

(기본적으로 border 스타일을 선언해 주어야 함)

 

 

 

속성
 
border-image : [ source slice width outset repeat ] | initial | inherit

 

border-image-source : 보더로 사용될 이미지 경로 (url형식으로 시작)

 

 

border-image-slice : 브라우저에게 테두리 조각을 만들기 위해 이미지를 슬라이스할 위치를 알려준다. 

이미지는 4개 모서리, 4개 측면, 중앙의 9개 섹션으로 나뉜다.

 

 

border-image-width : 보더 이미지의 넓이를 제어

 

 

border-image-outset : 보더 이미지가 컨텐츠 영역 확장 거리를 제어

 

 

border-image-repeat : 보더영역을 채우기 위한 반복형태를 제어

 

 
 
 IE chrome  Firefox safari
 11+ 4+ -webkit, 16+ 3.5+ -moz-, 15+  3.1+ -webkit-, 6+

 

 
 
 
저는 이 속성을 한번도 사용해본적이 없는데요.
용어의 설명도 생소하여 생각보다 어려운 부분이 있었지만
이번에 여러분께 소개드리기 위해 학습을 해 보며 느낀점은
[최신브라우저만 맞춘다면 유용하게 쓰일것 같다] 였습니다.
 
저한테는 생소한 속성들이어서
조금 이해 안되는 부분만 짚어보도록 하겠습니다.
 
 
 
 

border-image-slice

 

브라우저에게 테두리 조각을 만들기 위해 이미지를 슬라이스할 위치를 알려준다. 

 

 

border-image-slice: [ number | percentage ] | fill | initial | inherit
 
 

See the Pen Untitled by Jong Sang Park (@JongS) on CodePen.

 
slice 속성은 padding , margin과 마찬가지로 4방향을 설정할수 있고, 위아래 및 좌우 까지
설정법은 똑같습니다.
 
 
 
 

border-image-outset

 

보더 이미지가 컨텐츠 영역 확장 거리를 제어

 
 

See the Pen Untitled by Jong Sang Park (@JongS) on CodePen.

 

 

border-image-repeat

 

보더영역을 채우기 위한 반복형태를 제어

 
 
 

See the Pen Untitled by Jong Sang Park (@JongS) on CodePen.

 

 

 

reapeat 와 outset은 예제만 보더라도 바로 이해하실수 있을것 같아

별도의 설명은 생략하겠습니다.

 

 

border-image 속성을 이용하면 보더에 그라디언트를 넣을수 있습니다.

 

 

See the Pen Untitled by Jong Sang Park (@JongS) on CodePen.

 

 

이런식으로 말이죠!

이 글을 적으면서 여러 사이트들을 훓어보던 중

 

 

 

보더와 그라디언트를 활용한 사이트 몇개가 눈에 띄었습니다.

허나 아직은 다들 많이 안쓰시는것 같아요(저 포함).

하지만 잘 활용만 한다면 멋진 사이트를 만들수 있을것 같습니다.

 

 

 

오늘은 보더에 대해서 탐방을 해 보았는데요. 

다음번에는 더 재밌는 주제로 찾아오도록 할게요.

부족한부분, 잘못된 부분, 질문이 있으시다면 댓글 부탁드리겠습니다.

그럼 안녕~

 

 

 

 

 

반응형
반응형

jQuery 메서드

jQuery 메서드를 이전 1편에 이어 정리하고자 합니다.
사용 용도에 따라 분류하였습니다.
맑은커뮤니케이션 웹퍼블리셔 및 웹퍼블리싱 업무중 스크립트를 작성하다 갑자기 메서드가 기억나지 않는 분들에 참고가 되었으면 합니다.

스타일 메서드

분류 핵심 내용 핵심 프로퍼티 및 메서드
스타일
다루기
스타일 값 구하기 $대상.css("스타일 속성 이름")
$대상.css(["스타일 속성 이름", ...])
스타일 값 설정하기 $대상.css("스타일 속성 이름",값)
$대상.css({스타일 속성 이름:값, ...})
클래스 추가 $대상.addClass("클래스 이름")
클래스 삭제 $대상.removeClass("클래스 이름")

속성 메서드

분류 핵심 내용 핵심 프로퍼티 및 메서드
속성
다루기
속성값 구하기 $대상.attr("속성이름")
$대상.data("data-속성이름")
속성값 설정하기 $대상.attr("속성이름","값")
$대상.data("data-속성이름","값")

이벤트 메서드

분류 핵심 내용 핵심 프로퍼티 및 메서드
이벤트
다루기
일반 이벤트 등록 $대상.on("이벤트 이름", 이벤트리스너)
단축 이벤트 등록 $대상.단축 이벤트(이벤트리스너)
등록한 이벤트 제거 $대상.off("click", 삭제하고 싶은 이벤트 리스너 명)
$대상.off("click")
$대상.off()
이벤트 한 번만 실행 $대상.one("이벤트 이름", 이벤트리스너)
기본 행동 취소 이벤트 객체.preventDefault()
버블링 멈추기 이벤트 객체.stopPropagation()
버블링 활용:하나의 이벤트 $대상.on("이벤트 이름", "선택자", 이벤트 리스너)

위치 및 크기 메서드

분류 핵심 내용 핵심 프로퍼티 및 메서드
요소의 위치 및
크기 관련 기능
부모 좌표 노드 구하기 $대상.offsetParent()
지역 좌표 위치 다루기 지역 좌표 위치 구하기
$대상.position().left
$대상.position().top

지역 좌표 위치 설정하기
$대상.css("left",위치값)
$대상.css("top",위치값)
또는
$대상.css({left:위치값,top:위치값})
전역 좌표 위치 다루기 전역 좌표 위치 구하기
$대상.offset().left
$대상.offset().top

전역 표표위치 설정하기
$대상.offset({left:위치값,top:위치값})
요소 크기 다루기 기본 크기 구하기
$대상.width()
$대상.height()

기본 크기+padding 크기 구하기
$대상.innerWidth()
$대상.innerHeight()

기본 크기+padding+border 크기 구하기
$대상.outerWidth()
$대상.outerHeight()

기본 크기+padding+border+margin 크기 구하기
$대상.outerWidth(true)
$대상.outerHeight(true)

기본 크기 설정하기
$대상.width(크기값)
$대상.height(크기값)

기본 크기+padding 크기 설정하기
$대상.innerWidth(크기값)
$대상.innerHeight(크기값)
요소의 위치 및
크기 관련 기능
요소의 스크롤 위치 다루기 스크롤 위치 구하기
$대상.scrollLeft()
$대상.scrollTop()

스크롤 위치 설정하기
$대상.scrollLeft(위치값)
$대상.scrollTop(위치값)
문서의 위치 및
크기 관련 기능
문서 크기 구하기 $(document).width()
$(document).height()
화면의 위치 및
크기 관련 기능
윈도우의 위치
및 크기 관련
기능
전체 화면 크기 구하기 screen.width
screen.height
유효한 전체 화면 크기 구하기 screen.availWidth
screnn.availHeight
윈도우 크기 구하기 기본 크기 구하기
window.innerWidth
window.innerHeight

기본 크기+메뉴바+툴바 영역이 포함된 크기 구하기
$(window).width()
$(window).height()

기본 크기+메뉴바+툴바+스크롤바 영역이 포함된 크기 구하기
window.outerWidth
window.outerHeight
윈도우 크기 설정하기 window.resizeTo(width,height)
윈도우 변경 이벤트 처리 $(window).on("resize", function(){})
윈도우 위치 다루기 위치 값 구하기
window.screenLeft
window.screenTop

위치 값 설정하기
window.moveTo(dx,dy)
window.moveBy(dx,dy)
윈도우 스크롤 다루기 스크롤 위치 값 구하기
window.pageXOffset
window.pageYOffset

스크롤 위치 설정하기
window.scrollTo(x,y)
window.scrollBy(x,y)

스크롤 이벤트 처리하기
$(window).on("scroll",function(){})
마우스의
위치 및 크기
관련 기능
클릭한 전역 위치 윈도우 영역을 기준으로 하는 전역 위치
mouseEvent.clientX
mouseEvent.clientY

문서 영역을 기준으로 하는 전역 위치
mouseEvent.pageX
mouseEvent.pageX
클릭한 지역 위치 var offsetX = mouseEvent.pageX - $(타깃).offset().left
var offsetY = mouseEvent.pageY - $(타깃).offset().top

애니메이션 효과 메서드

분류 핵심 내용 핵심 프로퍼티 및 메서드
일반
효과
다루기
나타나고 사라지는 효과 나타나기
$대상.show()

사라지기
$대상.hide()
페이드 인/아웃 효과 페이드 인
$대상.fadeIn()

페이드 아웃
$대상.fadeOut()
슬라이드 업/다운 효과 슬라이드 업
$대상.slideUp()

슬라이드 다운
$대상.slideDown()
사용자
정의
효과
다루기
사용자 정의 애니메이션 효과 만들기 $대상.animate({스타일 속성 이름:속성값, ...},애니메이션 시간)
애니메이션 효과 멈추기 $대상.stop()

참조 - (메소드 정리표)

자바스크립트 + jQuery 완전정복 스터디(김춘경 지음)

반응형
반응형

jQuery 쓰는것이 좋은 것인가?

요즈음 웹퍼블리싱을 배우는 학생들의 이야기드를 들어보면, jQuery를 안쓰게 좋을것 같다고 또는 안쓰게 될 것 같다고 이야기 합니다.
그럼 Why? 라는 질문을 하면, 이유를 대답하지 못합니다.
개념조차 이해하지 못하고, 어디서 들은것 같다고만 이야기 하기 때문입니다.
물론 모든 학생이 모두 그렇게 이야기 하는것은 아닙니다.
그럼 저는 왜 jQuery를 써야 하는지 설명해 줍니다.

jQuery 사용하는 첫번째 이유

jQuery는 자바스크립트 DOM을 좀더 쉽게 작업하기 위한 라이브러리 입니다.
결론부터 말하자면 jQuery의 정체는 자바스크립트 문법 중 프로토타입 방식으로 만들어진 클래스입니다.
쉽게 이야기해 jQuery 메서드는 자바스크립트 DOM으로 이루어져 있습니다.
그렇기에 jQuery를 배운다는것은 메서드를 배우는 것이며, 이를 통해 자바스크립트로 코딩하면 10줄, jQuery로 코딩하면 2-3줄로 처리 할수 있을 만큼 효율적인
코드작업을 할 수 있습니다.
그렇다고 jQuery로 모든것을 다 할 수 있는것도 아니며 무조건 좋다는 말은 아닙니다.
제일 좋은 방법은 jQuery와 자바스크립트를 같이 사용하여 최적화 하는방법이 좋다고 말씀드리고 싶습니다.
jQuery는 쉬운데 자바스크립트는 어렵다고 하는 분들은 자바스크립트도 충실히 공부하셔야 합니다.

jQuery 사용하는 두번째 이유

jQuery는 DOM 제어보다 크로스 브라우징 처리가 편리합니다.
IE7은 비표준 브라우저이기 때문에 이벤트 등록시 자바스크립트로 처리할 경우 attachEvent(), addEventListener()를 사용하여 코드를 작성하여야,
IE7과 기타 브라우저의 크로스브라우징을 정상적으로 처리해야 합니다.
이와달리 jQuery 내부에는 이런 번거로운 작업들을 대신 처리해주기 때문에 이벤트를 아주 쉽게 처리할 수 있습니다.

jQuery 학습 방법 및 결론

자바스크립트의 경우 기본 문법을 모를 경우 공부하기가 힘듭니다.
그러나 jQuery의 경우 수많은 메서드로 구성되어 있기에 순서없이 메서드를 하나씩 학습하시면 됩니다.
굳이 공부하는 순서를 따져야 한다면, jQuery는 css와 연관성이 많기에 css를 기본적으로 이해하셔야 하며, 노드를 찾아가는 방법(체인기능) 메서드부터 진행하면 될 것 같습니다.
이것은 웹퍼블리싱을 전문적으로 하는 (주)맑은커뮤니케이션에서 진행하는 신입 퍼블리셔 교육방법 입니다.
아래는 jQuery 메서드 정리입니다. 메서드 정리는 사용 용도에 따라 1, 2부로 나누어 올릴 것 입다다

노드 메서드

노드를 선택하거나, 찾아가는 방법(체인기능)의 메서드 입니다.

분류 핵심 내용 핵심 프로퍼티 및 메서드
일반 노드
찾기
아이디 이름으로 노드 찾기 $("아이디 이름")
태그 이름으로 노드 찾기 $("태그 이름")
클래스 이름으로 노드 찾기 $("클래스 이름")
속성으로 노드 찾기 $("[속성이름=값]")
찾은 노드
다루기
찾은 개수 구하기 $대상.length
n번째 노드 접근하기 $대상.eq(index)
자바스크립트 DOM 객체 접근하기 $대상.get(index)
$대상[index]
순차적으로 노드 접근하기 $대상.each(function(index){ $(this) 또는 $대상.eq(index); });
찾은 노드 중에서 특정 노드만 찾기 $대상.filter("선택자")
찾은 노드의 자손 노드 중 특정 노드만 찾기 $대상.find("선택자")

인덱스 값 구하기

$대상.index()
$목록.index($대상)
$목록.index(대상 DOM 객체)
자식 노드
찾기
모든 자식 노드 찾기 $대상.children()
특정 자식 노드만 찾기 $대상.children("선택자")
첫 번째 자식 노드 찾기 $대상.children().first()
$대상.children(":first")
$대상.children().eq(0)
$대상.children("eq(0)")
마지막 번째 자식 노드 찾기 $대상.children().last()
$대상.children(":last")
$대상.children().eq($대상.children().length-1)
$대상.children(":eq("+($대상.children().length-1)+")")
n번째 자식 노드 찾기 $대상.children().eq(index)
$대상.children(":eq("+index+")")
부모 노드
찾기
부모 노드 찾기 $대상.parent()
조상 노드 찾기 $대상.parents(["선택자"])
형제 노드
찾기
이전 형제 노드 찾기 $대상.prev()
$대상.prevAll(["선택자"])
다음 형제 노드 찾기 $대상.next()
$대상.nextAll(["선택자"])
노드 생성/
추가
노드 생성 $("추가노드 DOM 문자열")
첫 번째 자식 노드로 추가 $부모노드.prepend($추가노드)
$추가노드.prependTo($부모노드)
마지막 번째 자식 노드로 추가 $부모노드.append($추가노드)
$추가노드.appendTo($부모노드)
특정 노드의 이전 위치에 추가 $기준노드.before($추가노드)
$추가노드.insertBefore($기준노드)
특정 노드의 다음 위치에 추가 $기준노드.after($추가노드)
$추가노드.insertAfter($기준노드)
노드제거 특정 노드 제거 $대상.remove()
모든 자식 노드 제거 $대상.children().remove()
노드 내용
읽기 및 변경
노드 내용을 문자열로 읽기 $대상.html() //태그 내용 포함
$대상.text() //태그 내용 제외
노드 내용 수정하기 $대상.html("수정할 태그 문자열")
$대상.text("수정할 텍스")
노드 내용을 이용해 여러 개의 자식 노드 추가하 $대상.html("추가할 태그 문자열")
노드 내용을 이용해 모든 자식 노드 제거하기 $대상.html("")

참조 - (메소드 정리표)

자바스크립트 + jQuery 완전정복 스터디(김춘경 지음)

반응형
반응형

WAI-ARIA

W3C에 의해 제정된 RIA(Rich Internet Applications)의 웹 접근성에 대한 표준 기술 규격을 의미함.


RIA(Rich Internet Applications)란?
정적인 HTMl과 단순한 자바스크립트 환경의 웹이 아닌 동적인 자바스크립트와 Ajax와 같은 기술을 사용한 환경에서 수준 높은 UX(User eXperience)를 제공하는 웹 애플리케이션

RIA(Rich Internet Applications)는 화려하고 편리한 웹 애플리케이션이지만 스크린리더와 같은 보조기술을 사용하는 장애인들이 접근하기에 취약하다.

  • 자바스크립트, AJAX등을 활용하여 의미를 가지지 않는 요소(<div>,<span>)로 특정 컴포넌트를 구현할 때 스크린리더 등 보조기기에서 해당 컴포넌트의 기능을 명확하게 파학하기 어려움.
  • 주식 시세나 RSS Feed 등 시간에 따라 정보가 자동으로 업데이트 되는 경우 스크린리더 등 보조기기에서 업데이트 된 정보를 파악하기 어려움

때문에 WAI-ARIA는 RIA에서 스크린리더 및 보조기기 등에서 접근성 및 상호 운용성을 향상시키기 위한 목적으로 탄생 했으며 웹 애플리케이션에 역할(Role), 속성(Property), 상태(State) 정보를 추가하여 이를 개선 할 수 있도록 제공하고 있다.

Role (역할)

유저 인터페이스(User Interface, 이하 UI)에 포함된 특정 컴포넌트의 역할을 정의
Abstract Roles / Widget Roles / Document Structure Roles / Landmark Roles로 분류됨

  1. Abstract RolesRoles의 분류체계를 만들고 역활들을 정의하기 위한 Roles
    WAI-ARIA를 구축하는 기반
    Abstract Roles 종류
    Abstract Roles command / composite / input / landmark / range / roletype / section / sectionhead / select / structure / widget / window
  2. Widget Roles독립형 사용자 인터페이스를 동작시키기 위한 목적의 Roles,
    더 큰 Roles에 포함되거나 복합 위젯의 일부로 사용되기도 한다.
    Widget Roles 종류
    독립형 Widget Roles button / checkbox / gridcell / link / menuitem / menuitemcheckbox / menuitemradio / option / progressbar / radio / scrollbar / searchbox / separator / slider / spinbutton / switch / tab / tabpanel / textbox / treeitem
    복합형 Widget Roles
    (단독으로 쓰이지 않음)
    combobox / grid / listbox / menu / menubar / radiogroup / tablist / tree / treegrid
    "tablist"를 사용한 탭메뉴 예시

    탭목록(tablist)과 본문(tabpanel)이 따로 나뉘어져 있는 마크업구조는 스크린리더 등 보조기기를 사용하는 사용자에게는 정보 접근이 어려울 수 있다. 이 때 Tab 관련 Widget Role을 사용하면 보조기기를 사용하는 사용자에게 보다 정확한 정보를 제공할 수 있다.

    ㄴ [이미지설명] 탭메뉴 UI구조 (Role속성 위치)
    • 탭메뉴1
    • 탭메뉴2
    탭메뉴1의 본문
    탭메뉴2의 본문
    탭메뉴3의 본문
    사용된 WAI-ARIA
    • role="tablist" : role="tab"과 함께 사용되는 복합형 Role속성이며 요소에 탭목록 역할을 부여한다.
    • role="tab" : role="tablist"의 자식속성으로 사용되며 탭 역할을 부여한다.
    • role="tabpanel" : 탭의 본문 역할을 부여한다.
    • aria-controls="" : 현재 요소가 제어하는 대상을 명시하는 속성으로 탭메뉴와 본문을 연결시켜준다. 상태 값은 tabpanel의 id명 입력
    • aria-selected="" : 탭메뉴 선택 유무를 알려준다. 상태 값은 선택되었을 때 true / 선택되지 않았을 때 false 입력
    • tabindex="" : 키보드로 포커스를 받을 수 없는 요소일 때 포커스를 받을 수 있게 해준다. 상태 값은 포커스를 받지 않을 때 -1 / 포커스 받을 때 0 / 우선으로 포커스 받을 때 1
    • aria-labelledby="" : 레이블 제공을 위한 aria-속성. 상태 값은 연결시킬 레이블 id를 입력한다.
  3. Document Structure Roles문서구조를 설명하는 목적의 Roles
    Document Structure Roles 종류
    Document Structure Roles application / article / cell / columnheader / definition / directory / document / feed / figure / group / heading / img / list / listitem / math / none / note / presentation / row / rowgroup / rowheader / separator / table / term / toolbar / tooltip
    "tooltip"을 사용한 툴팁 예시
    
    
    
    
    
    사용된 WAI-ARIA
    • role="tooltip" : 초점을 받으면 노출되는 컨텐츠 혹은 참고용 컨텐츠의 역할을 부여한다.
    • aria-describedby="" : 현재 요소에 설명을 제공하는 속성. 속성 값은 참조(연결)시킬 요소의 ID값을 작성
  4. Landmark Roles웹 페이지의 각 영역을 명확하게 구분하는 목적의 Roles.
    영역 역할을 지정할 수 있는 8개의 속성이 있다.
    Landmark Roles 종류
    Landmark Role HTML5 섹션 관련 요소
    role="application" 동일한 역할의 요소 없음.
    주로 <div> 요소와 같이 그룹 역할을 하는 요소로 대체할 수 있다.
    role="banner" 동일한 역할의 요소 없음.
    비슷한 의미로 <header> 요소를 사용할 수 있으나 <header role="banner">로 사용하였다 면 한 페이지에서 한 개의 <header> 요소만 사용하길 권장한다.
    role="navigation" <nav> 요소.
    다른 페이지 또는 페이지 내 특정 영역으로 이동하는 링크 콘텐츠 영역으로 주로 메인 메 뉴 및 서브 메뉴 등에 사용할 수 있다
    role="main" <main> 요소.
    본문의 주요 콘텐츠 영역으로 한 페이지 내에 1개만 사용이 가능하며, <article>, <aside>, <footer> 요소의 하위 요소로 사용할 수 없다
    role="complementary" <aside> 요소.
    주요 콘텐츠와 연관이 적은 의미있는 콘텐츠 영역으로 종종 사이드바로 표현할 수 있다. <aside> 영역에는 현재 날씨, 관련된 기사 또는 주식 정보등의 부가 콘텐츠를 포함 할 수 있다.
    role="form" <form> 요소.
    폼과 관련된 요소의 모임을 표현하는 영역으로 서버에 전송될 수 있는 콘텐츠를 포함 할 수 있다.
    role="search" 동일한 역할의 요소 없음.
    검색의 역할을 담당하는 서식 영역임을 의미하며 <div> 또는 <form> 요소를 사용하는 것을 권장한다
    role="contentinfo" 동일한 역할의 요소 없음.
    비슷한 의미로 <footer> 요소를 사용할 수 있으나 <footer role="contentinfo">로 사용하였다면 한 페이지에서 한 개의 <footer> 요소만 사용하길 권장한다.
    "banner"를 사용한 예시

    콘텐츠를 포함하고 있는 컨테이너인 HTML 요소에 role 속성을 사용하여 콘텐츠의 역할을 지정

    
    

    로고

    • 메뉴1
    • 메뉴2
    • 메뉴3
    • 메뉴4
    • 메뉴5

    h1 요소의 의미를 role속성을 사용하여 다른 의미로 변경하면 안된다

  5. ㄴ [이미지설명] Landmark Role 속성 관련 영역

Property (속성) & State (상태)

Property (속성) : 해당 컴포넌트의 특징이나 상황을 정의하며 속성명으로 "aria-*"라는 접두사를 사용

State (상태) :해당 컴포넌트의 상태 정보를 정의

Property (속성) & State (상태)는 Widget states / Live Regions / Drag and Drop / Relationships 로 분류됨

  1. Widget states and properties사용자가 데이터를 입력하여 송/수신하는 환경(자동완성, 체크여부 등)에서 사용하며 widget roles과 함께 사용된다.
    Widget states and properties 종류
    Widget states and properties autocomplete / checked / datatype / disabled / expanded / haspopup / invalid / level / multiline / multiselectable / pressed / readonly / required / secret / selected / valuemax / valuemin / valuenow
    "combobox"를 사용한 자동완성 폼 예시
      사용된 WAI-ARIA
      • role="combobox" : 아래에 매뉴가 펼쳐지는 UI의 역할을 부여한다.
      • aria-expanded="" : 펼쳐지거나 닫힐 수 있는 컨텐츠의 상태를 표시하는 aria-속성. 상태 값은 펼침 true / 닫힘 false
      • aria-labelledby="" : 레이블 제공을 위한 aria-속성. 상태 값은 연결시킬 레이블 id를 입력한다.
      • aria-autocomplete="" : 사용자 입력에 대한 자동완성 지원 여부를 설정하는 aria-속성. 상태 값은 inline / list / both / none(default)
      • aria-owns="" : 부모/자식 관계 형성하는 aria-속성. 상태 값은 자식으로 설정할 요소의 id값 (aria-controls와 관련)
      • aria-haspopup="" : 팝업요소가 하위에 존재하고 있다는걸 인식 시켜주는 aria-속성. 상태 값은 false(default) / true / menu / listbox / tree / gird / dialog
    • Live Regions 새로고침하지 않고도 컨텐츠 정보가 업데이트되는 환경에서 사용된다.
      Live Regions 종류
      Live Regions aria-live / aria-relevant / aria-atomic / and aria-busy
      "aria-live"를 사용한 알럿창 예시

      접속 할 수 없습니다!

      사용된 WAI-ARIA
      • role="alert" : 경고,알림 등의 컨텐츠 역할 부여
      • aria-live : 페이지의 어떤 위치에 있든 업데이트된 정보를 사용자에게 알려주는 aria-속성. 상태 값은 assertive / off(default) / polite
    • Drag and Drop드래그 앤 드롭 기능 환경에서 사용된다. ex) 트렐로 카드 옮기는 액션
      Drag and Drop 종류
      Drag and Drop aria-dropeffect / aria-grabbed
      "aria-dropeffect"를 사용한 Sorting List 예시
      1. 아이스크림
      2. 파이
      3. 케이크
      4. 컵케이크
      사용된 WAI-ARIA
      • role="listbox" :role="option"과 함께쓰이는 복합형 Role 속성이며 선택가능한 옵션이 존재하는 리스트 역할을 부여한다.
      • role="option" : role="listbox"와 함께 쓰이며 부모인 리스트의 옵션이라는 역할을 부여한다.
      • aria-dropeffect="" : 요소가 드롭되었을 때 사용자에게 알려준다. 상태값은 true / false
      • tabindex="" : 키보드로 포커스를 받을 수 없는 요소일 때 포커스를 받을 수 있게 해준다. 상태 값은 포커스를 받지 않을 때 -1 / 포커스 받을 때 0 / 우선으로 포커스 받을 때 1
    • Relationship요소 간의 관계 또는 연결을 나타내는 속성
      Relationship 종류
      Relationship aria-activedescendant / aria-colcount / aria-colindex / aria-colspan / aria-controls / aria-describedby / aria-details / aria-errormessage / aria-flowto / aria-labelledby / aria-owns / aria-posinset / aria-rowcount / aria-rowindex / aria-rowspan / aria-setsize
      "aria-aria-controls", "aria-labelledby" 을 사용한 탭메뉴 예시
      • 탭메뉴1
      • 탭메뉴2
      탭메뉴1의 본문
      탭메뉴2의 본문
      탭메뉴3의 본문
      사용된 WAI-ARIA
      • aria-labelledby="" : 레이블 제공을 위한 aria-속성. 상태 값은 연결시킬 레이블 id를 입력한다.
      • aria-controls="" : 현재 요소가 제어하는 대상을 명시하는 속성으로 탭메뉴와 본문을 연결시켜준다. 상태 값은 tabpanel의 id명 입력
      • aria-selected="" : 탭메뉴 선택 유무를 알려준다. 상태 값은 선택되었을 때 true / 선택되지 않았을 때 false 입력
      • tabindex="" : 키보드로 포커스를 받을 수 없는 요소일 때 포커스를 받을 수 있게 해준다. 상태 값은 포커스를 받지 않을 때 -1 / 포커스 받을 때 0 / 우선으로 포커스 받을 때 1

    유의사항

    • W3C에서는 HTML5 섹션 관련 요소와 WAI-ARIA 규칙을 함께 사용할 경우 해당 기능이 무효화 되거나 충돌이 발생할 수 있으므로 중복해서 사용하지 않도록 주의를 당부하고 있다.
      ex) <header role="banner"></header></span></li>(X)
    • 원래의 HTML 요소의 의미를 변경하면 안된다.
      ex) <h1 role="button"></h1>(X)
    • 모든 RIA 컨텐츠는 키보드를 사용하여 접근할 수 있어야 한다.
    • 모든 브라우저와 보조기기가 WAI-ARIA를 지원하지 않기 때문에 지원하는 브라우저와 기기 정보를 확인하고 적용해야한다.

    참고사이트


    잘못된 정보가 있으면 알려주세여ㅎ.ㅎ
    - 맑은커뮤니케이션 마크업 개발팀 -

    반응형
    반응형

    안녕하세요.! 글 작성하다가 방금 꿀밤을 한대 맞은(힁 ㅠㅠ....)

    맑은 커뮤니케이션의 나이 막내(?) 스물다섯스물하나입니다.! 

     

    오늘 다룰 주제

    사이트에서 많이 사용되는 형태인

     

     

     

    동일한 넓이와 간격을 가지고 있는 컨텐츠 (정확한 명칭을 몰라서 ㅎㅎ....)

    에 대해 알아보도록 하겠습니다.

     

    (글이 지루하신 분은 Ctrl + F 를 눌러 '결론' 을 검색해 주시지 마세요. 읽고서 댓글로 짱똘 던져주세요 +_+ ㅎㅎㅎ;;;)

     

     

    아마 위의 사진과 비슷한 형태를 작업해 보신 분들이 많을거라고 생각되는데요.

     

    제가 웹퍼블리싱을 배울때

    float으로 컨텐츠를 띄워 붙이고(왼쪽이나 오른쪽!) 

    width값을 100%/ n(갯수) 만큼 주면

    동일한 간격으로 정렬이 된다고 배웠습니다!

     

     

    4개 정렬 = 25%

    5개 정렬 = 20%

    6개 정렬 = 16.66%

    · · ·

     

    이런식으로 말이죠.

    많이들 알고 있는 공식(?) 이시잖아요~

     

     

     

     

    저 또한 저 방법을 이용하여 작업을 했었습니다!(과거형!)

     

     

     

    작업자님~~~

    디자인 파일 메일로 보내드렸어요~!!

    확인 부탁드려요!

     

     

     

     

    네~~~

    (딸깍딸깍)

     

     

     

     

     

     

     

    별거 없군! 금방 끝내주겠어!!

    (다다다다다다다다다다다다다다다닥다다닥)

     

     

     

    .boxwrap {
    	overflow: hidden;	
    }
    
    .boxwrap .box {
    	float:left;
    	width:25%;
    }
    

     

     

     

    짜잔~~! 다했따아~~

    집에 가야지

     

     

    개발자님~

    작업물 푸시 했어요!

    확인 부탁드려용~

     

     

     

     

     

     

     

    이봐 스물쿤!! 갯수가 3개일때 이상하게 나오는데..?

    확인좀 오네가이!

     

     

     

     

     

     

     

     

     

     

     

    우씨... 알았어요..!

     

     

     

     

     

     

    .boxwrap .box.length3 {
        width:33.33%;
    }
    

     

     

    3개 일때는 length3 클래스 추가해주세요!

     

     

    됐죠??

    그럼 전 20,000....

     

     

    어이어이~ 

    2개일때는!!!? 5개일때는!!?? 6개 일때는..!!?




     

     

    (저 개ㅈ....ㅏ......ㅅ...)

     

     

     

     

     

    훗..  금방 해드리죠!!

     

    .boxwrap .box.length2 {
    	width:50%;
    }
    
    .boxwrap .box.length5 {
    	width:20%;
    }
    
    .boxwrap .box.length6 {
    	width:16.66%;
    }
    

     

    자요!! 됐죠!!?

     

     

    전 진짜 20,000~~ 수고하세용~~

     

     

     

     

    · · · ·

    저 개ㅅ.....

     

     

     

    사진=영화 '어벤져스: 인피니티 워 닉퓨리역의 사무엘 잭슨 '

    어머니....

     

     

    ----------------------------------------------------------------------------------------------------------------------------

     

     

     

    자... 지금까지 스물쿤의 작업을 보셨습니다.

     

    개발독은 스물쿤의 소스가 무척이나 별로라고 생각 할겁니다.

     

     

    (끄덕끄덕)

     

     

    프로젝트 마다 다르겠지만 

     

    컨텐츠의 갯수가 고정적으로 정해져 있을수도,

    유동적으로 변할수도 있습니다!.

     

    과거의 퍼린이 였던 스물쿤은 이런점을 생각하지 못했었습니다.

     

     

     

     

    스물쿤의 소스를 한번 최종적으로 볼까요??

     

    .boxwrap {
    	overflow: hidden;	
    }
    
    .boxwrap .box {
    	float:left;
    	width:25%;
    }
    
    .boxwrap .box.length2 {
    	width:50%;
    }
    
    .boxwrap .box.length3 {
    	width:33.33%;
    }
    
    .boxwrap .box.length5 {
    	width:20%;
    }
    
    .boxwrap .box.length6 {
    	width:16.66%;
    }
    

     

    이 소스가 결코 잘못되었다 고! 말할수는 없습니다.

    이것도 방법이라면 방법이니까요.

    하지만 좋은 방법은 아니죠.

     

     

    갯수 제어 때문에 넓이를 조절하는 css가 4개나 더 늘었어요!!

     

    만약 한줄에 7개, 8개 9개 10개 등등등... 갯수가 더 추가된다면

    더 많아지겠죠!?!?!?

     

     

    이쯤 되면 결코 좋은 소스라고 할수 없습니다.

     

    이러한 넓이를 제어하는 CSS를 

     

    싹!! 없애버릴수 있는 방법이 있습니다.

     

    그거슨 바로!!

     

    table  table-cell 입니다~!

    (이말 하나 하려고 참 오래도 걸린다 임마!!)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    부모태그에 display : table을 선언해 주고!

     

    자식태그에 display : table-cell을 선언해주면

     

    갯수가 몇개가 되든 동일한 간격으로 영역 가지게 됩니다

    (100개,200개가 되면 찌부가 될수 있겠죠...? 그렇게 가지는 않을테고..)

     

     

     

    ----------------------------------------------------------------------------------------------------------------------------

     

     

    (다다다다다다닥)

     

    .boxwrap {
    	display:table;
    	width: 100%;	
    }
    
    .boxwrap .box {
    	display:table-cell;
    	vertical-align: middle;
    }
    

     

     

    ???: 에이 안되는구만

     

     

     

     

     

    ???: 동일하긴 뭐가 동일합니까!! 

    길쭉해 지는구만.....

     

    (에잇... 괜히 읽었어!!)

     

     

    하하하.... 

    제가 실수로 빼먹은게 있네요...

     

     

     

    .boxwrap {
    	display:table;
    	width:100%;
    	table-layout: fixed;
    }
    
    .boxwrap .box {
    	display:table-cell;
    	vertical-align: middle;
    }
    

     

     

    부모태그에 table-layout: fixed를 선언해 주시면!

     

     

     

    짜잔~~~!

     

    동일한 넓이를 가지게 됩니다~!!

     

     

     

    신기하죠~~~~~~!!!?!?!?!?!?

    ㅅ....시....신...기....

    하...ㅅ...ㅣ..죠...?;;

     

    ----------------------------------------------------------------------------------------------------------------------------

     

    (야.. 왜 갑자기 말돌려...)

    넵.! 저는 오늘 여러분에게 

    CSS 속성인

     

    - display: table- display: table-cell- table-layout: fixed

    존재 에 대해 말씀 드리고 싶었습니다!

     

     

     

     

    이 속성이 '어떻게' 쓰이고 '무엇무엇' 이다~

    라는 부가적인 설명은 안하고자 합니다.

     

    왜냐하면 스물쿤도 퍼린이 시절..

    새로운것 ,신기한 것을 발견하면

     

    그 속성에 대해 열심히 찾아보았거든요 ㅎㅎ...

    그러면서 재미도 느끼고 뭔가, 내가 발전해 간다는게 느껴져서 뿌듯했었죠.

    저 보다도 먼저 이러한 속성을 잘~ 정리해 주신 분들이 많답니다 ㅎㅎ

     

     

    ??? : 괜히 모르ㄴ...

     

    (쌰랍)

     

    ----------------------------------------------------------------------------------------------------------------------------

     

     

    아무튼... 끝으로!!

    처음에는 flex라는 속성으로 작업을 했었는데

    이게 익스에 하위버전에서는 안되어 어쩔줄 몰라 하고 있었는데

    그때 알게된 방법이 바로 display table 속성 이었죠!

    (플롯밖에 몰랐던 나란 퍼린이...)

     

    부족하고 노잼인 제 글을 읽어 주신분들께는 1감사 1따봉을 드리며

    짧게 요약을 하고 저는 이만 물러 가겠습니다~!

     

    (사장님 저 퇴근.....)

     

    결론

    1. display: table , table-cell 쓰세요.

    2. table-layout : fixed도 쓰세용

    3. 아래 링크에서 해보세영!

     http://jsfiddle.net/209p16n5/21/

     

     

     

    여러분 안녕~~

     

     

     

     

    ----------------------------------------------------------------------------------------------------------------------------

     
     
     

     

    ???: 그러니까 결론은 css table 쓰라는거 아냐

     

     

     

    ??? : 하.......

     

     

     

     

     

     

     

     

     

    반응형
    반응형
    최근 웹퍼블리싱을 하다보면 브라우저 크로스브라우징을 IE10이상 하게 되는 경우가 많다보니,
    Jquery animation 보다는 CSS animate를 사용하게 되는 경우가 많아졌다.
    그리고 특히 CSS animate를 하다보면 transform 속성을 많이 사용하게 될 것이다.
    이유는 transform속성은 웹요소의 위치를 이동시키거나 크기 조절 및 회전시킬 수 있는 강력한 기능을 가지고 있기 때문이다.
    그렇다면, transform 속성에 대해 자세히 알아보고, 실무에서 만들었던 파일을 같이 공유하여 이해를 돕도록 하겠다.

    transform 속성

    scale(), rotate(), translate(), skew()

    브라우저 ie IE chrome 크롬 firefox 파이어 폭스 safari 사파리 opera 오페라
    지원현황 IE10 36.0 16.0 9.0 23.0

    transform:scale() - X 또는 Y축으로 확대/ 축소

    scale은 해당 요소를 지정한 크기만큼 확대 또는 축소 시킬 수 있습니다.
    사용방법은 아래와 같습니다.

    transform:scaleX(x축 비율);          // x축으로 확대, 축소
    transform:scaleY(y축 비율);          // y축으로 확대, 축소
    transform:scale(x축 비율, y축 비율);  // x축, y축으로 확대, 축소
    

    transform:rotate() - 지정 요소 회전

    rotate는 요소를 지정한 각도만큼 회전시킵니다.
    회전 각도가 플러스 값일 경우 시계 방향, 마이너스 값일 경우 반시계 방향으로 회전합니다.
    사용방법은 아래와 같습니다.

    transform:rotateX(Ndeg);  // x축 기준으로 N도 만큼 회전
    transform:rotateY(Ndeg);  // y축 기준으로 N도 만큼 회전
    transform:rotate(Ndeg);   // N도 만큼 회전
    

    transform:translate() - 지정 요소 X 또는 Y축으로 이동

    translate는 요소를 지정한 위치로 X 또는 Y축만큼 이동 시킵니다.
    사용방법은 아래와 같습니다.

    transform:translateX(10px);        // X축으로 10px 이동
    transform:translateY(10px);        // Y축으로 10px 이동
    transform:translate(-10px, -10px); // X축으로 -10px, Y축으로 -10px 이동
    

    transform:skew() - 지정 요소 X 또는 Y축으로 기울이기

    skew는 요소를 지정한 만큼 X 또는 Y축으로 기울입니다.
    사용방법은 아래와 같습니다.

    transform:skewX(Ndeg);             // x축으로 N도 만큼 기울이기
    transform:skewY(Ndeg);             // y축으로 N도 만큼 기울이기
    transform:skew(x축 Ndeg, y축 Ndeg); // x축, y축으로 N도 만큼 기울이기
    

    transform-origin 속성

    위의 transform 속성인 scale(), rotate(), translate(), skew()들을 한번씩 연습해 보았다면, 지정 요소의 중심을 기준으로 동작한다는 것을 알 수 있을 것 입니다.
    하지만 transform-origin 을 사용하면 지정 요소의 기준점을 변경할 수 있습니다.
    사용방법은 아래와 같습니다

    transform-origin:x축 y축;  // px, 백분율(%), left, center, right 중에서 사용할 수 있습니다.
    

    transform을 이용한 애니메이션 실무 예제 다운로드(꽃입 떨어지는 효과)

    (주)맑은 커뮤니케이션에서 실무로 만든 예제이며, transform 애니메이션을 공부하는 분들에게 도움이 되었으면 합니다.

    transform.zip
    다운로드

    반응형
    반응형
    최근 웹퍼블리싱을 하다보면 고객사의 요청에 의해 마이크로소프트(MS) 엣지(Edge) 브라우저를 크로스브라우징하여 마크업 진행하는 경우가 종종 있다.
    크롬 또는 익스플로러 브라우저와 같이 크로스브라우징을 하면서 아직은 크게 어려움은 없었으나, 최근 엣지(Edge) 브라우저 크로스브라우징을 하다 페이지 전부 CSS가 깨져버린 상황을 겪었다.
    그동안 엣지(Edge) 브라우저 크로스브라우징을 하면서 그런일은 없었기에 적지 않게 놀랐다.
    작업했던 마크업 파일은 기존 우리 회사(맑은커뮤니케이션)에서 마크업하던 작업물이 아닌, 타 업체로 부터 인계를 받아 유지/보수 진행하던 마크업이라 더 난감한 상황이였다.
    하지만, 구글링을 해봐도 css들이 왜 적용안되는지 알 길이 없었다.
    혹시나 하여 css 처리방식이 @import 방식으로 처리되어 있어, link 방식으로 변경하였더니 멀정하게 반영되는 것이다.
    문제의 답은 간단했다. 엣지(Edge) 브라우저는 @import 방식을 처리하지 못했던 것이다. 헉....
    우리 회사(맑은커뮤니케이션)에서는 css 처리방식을 @import 방식을 쓰지 않고 link 방식만을 쓰기 때문에 그동안 문제를 발견하지 못했던 것이다.
    하지만 많은 회사들이 @import방식을 아직도 많이 사용하기에 공유하고자 글을 작성한다.

    Link 방식 vs @import 방식

    결과적으로 보면 같아 보일 수 있겠지만, 사실은 Link 방식을 사용하는 것이 @import 방식을 사용하는 것보다 페이지의 로딩 속도 측면에서 뛰어나다.

    @import 방식의 장, 단점

    CSS파일 내에 @import를 이용하여 CSS를 연결하는 방식이다.
    하나의 CSS파일에 여러개의 페이지 CSS를 로드시켜 편리하다고 생각하면, 편리하다고도 할 수 있다.
    그러나 성능을 생각한다면 그리 좋은 방법은 아니다. @import를 많이 사용한다면, 익스플로러에서는 다운로드 순서가 다르게 작동하여 문제가 발생할 수 있으며, 병렬방식이 아닌 직렬방식으로 다운로드 하기때문에 전체 로딩시간이 길어지는 문제점이 있기에, 추천하는 방법은 아니다.
    그리고 이 글의 주제처럼 엣지(Edge) 브라우저에서 @import 방식을 사용할 경우 @import된 CSS파일을 적용하지 못한다.

    사용방법은 아래와 같습니다.

    @import url("reset.css");
    @import url("content.css");
    

    Link 방식의 장, 단점

    HTML의 Link태그를 사용하는 CSS연결 방식이다.
    필자가 사용하는 CSS연결 방식으로 하나의 파일에 여러 페이지의 스타일을 일괄 수정 및 추가 등 유지/보수에 용이하며, 직렬방식이 아닌 병렬방식으로 다운로드 하기에 로딩속도가 빠르고, CSS파일 여러개를 Link 방식으로 다운로드 하더라도 익스플로러에서 순서가 동일하게 작동한다.
    그리고 이 글의 주제처럼 엣지(Edge) 브라우저에서 CSS파일을 다운로드 하지 않는 일이 발생하지 않는다.

    사용방법은 아래와 같습니다.

    
    
    

    마치며...

    처음 이 글을 작성하고자 한 이유는 엣지(Edge) 브라우저가 @import 방식을 처리 안된다는 것을 공유하고자 작성하였으나, @import방식과 Link방식의 차이점을 설명하여 엣지(Edge) 브라우저의 버그문제도 있지만 Link 방식을 사용하는 것이 더 이롭다는것을 알려드리고 싶었습니다.
    아직도 많은 회사들이 @import 방식을 많이 사용하는데, 이럴경우 접속자가 많은 사이트의 경우 로딩속도가 현저하게 늦어지며, 엣지(Edge) 브라우저에서 CSS가 적용안된 사이트를 보게 될 수 있기에 이 글을 작성하게 되었습니다.

    반응형
    반응형
    '맑은커뮤니케이션 마크업' 개발팀에서는 iOS 10의 첫 번째 베타 버전이 출시되었을 때 일부 웹 퍼블리셔들은 viewport 메타태그의 user-scalable=no 가 사이트에서 작동 않는다는 사실을 발견하기까지는 오래 걸리지 않았습니다.
    곧 Stack Overflow에서 이슈화 되기 시작했고, 이미 일부 퍼블리셔들은 JS 플러그인을 사용하여 이 문제를 해결하였습니다.
    그러나 iOS 10의 첫 번째 베타 릴리스 노트에서 알 수 있듯이 버그가 아니며, Apple은 실제로 user-scalable=no 를 의도적으로 사용 중지했습니다.
    user-scalable=no의 기능을 중지한 이유는 휴대 전화의 가장 분명하고 유용한 제스처 중 하나 인 핀치 투 줌(pinch-to-zoom)을 자유롭게 사용할 수 있게 함으로서
    시각 장애가 있는 사용자에게 웹의 접근성을 확보 할 수 있는 희망적인 이유이기 때문이다.

    iOS 10 릴리즈 노트

    Safari의 웹 사이트에 대한 접근성을 향상시키기 위해 웹 사이트에서 뷰어에 user-scalable=no 를 설정 한 경우에도 사용자가 손가락으로 확대/축소 할 수 있습니다.

    iOS 10 릴리즈 노트 Apple의 올바른 생각

    user-scalable=no은 다양한 호환성과 UX 문제가 많이 있습니다.
    iOS 10 릴리즈 노트의 변화는 사용자가 페이지와 크기를 제어 할 수 있기 때문에 Apple 좋은 움직임이라고 생각합니다.
    "사용자 컨트롤 제공"은 항상 모든 UX 사용자를 위한 최상위의 조건이라고 생각합니다.
    예를 들어, 눈이 너무 나쁘거나 시각장애인 의 경우 텍스트를 읽을 수 없는 경우 확대/축소를 할 수 있어야 합니다.
    다양한 사용자에 대해 고려를 해야 하며, 우리는 개인적인 관점을 생각하지 말아야 합니다.

    그래도 user-scalable=no 사용해야 한다면?

    고객사를 설득하여 사용을 자제하도록 해야 하지만, 현실적으로 설득이 힘들다고 한다면 아래와 같이 사용하시면 됩니다.

    document.documentElement.addEventListener('touchstart', function (event) { 
    	if (event.touches.length > 1) { 
    		event.preventDefault(); 
    	}
    }, false);
    
    반응형
    반응형

    css3 - calc()

    반응형이나 모바일 코딩을 하다 보면 %로 값을 주기가 애매한 것들이 있습니다.
    이러한 것들을 float이나 position absolute 또는 fixed를 사용하거나 정확한 px 값을 지정하여 미디어 쿼리를 사용하여 해상도별로 나누어 해결하곤 하는데, calc() 함수를 사용하여 값을 쉽게 지정해 줄 수 있습니다.



    calc()함수 사용

    검사버튼 삭제버튼 calc() 함수는 width, height, margin, padding 값을 사칙연산자를 이용하여 표현할 수 있습니다.
    각각 사용방법을 알아보겠습니다.

    ※ width

    float값으로 width값의 %를 나누기 애매할 경우에 사용하기에 유용합니다.

    Markup
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    위와 같이 lst_width class로 쌓여있는 li태그들을 7등분 하기 위해 calc()함수를 이용하여 간단하게 처리 할 수 있습니다.

    css
    .lst_width>li{
    	float:left;width:calc(100% / 7);
    	height:50px;
    	color:#fff;
    	text-align:center;
    }
    .lst_width>li:nth-child(odd){
    	background:#333;
    }
    .lst_width>li:nth-child(even){
    	background:#999;
    }
    
    width값 예시 보기

    ※ height

    반응형이나 모바일에서 높이 값을 쉽게 잡을 수 있습니다.
    위에서 언급했지만 position absolute 또는 fixed를 사용하거나 정확한 px 값을 지정하지 않아도 처리가 가능합니다.

    height-calc.zip
    다운로드

    위 첨부파일은 모바일 햄버거 메뉴로 예제를 만들어 봤습니다.



    후기

    반응형 웹과 모바일 코딩을 하면서 width와 height의 값을 %로 사용하면서 길이가 깔끔하게 떨어지지 않을 때에 소수점으로 li:first-child{width:33.34%} li{width:33.33%} 이런 식으로 써줘도 상관없지만 calc() 함수를 이용하여 코딩을 한다면 한층 더 간결하고 깔끔한 코드가 되겠네요.

    반응형
    반응형

    -->

    JW Player란?

    동영상을 보기 위해 플레이어들이 많이 있다. 네이버 플레이어, 다음플레이어, 유투브...둥등 JW Player도 동영상을 재생하기 위한 플레이어 종류중 하나이다. JW Player는 플래시 기반의 플레이어로써 FLV, H.264, MP4, MP3, AAC, JPG, PNG, GIF 포맷들이 플레이가 가능하다. 네이버, 다음 등 포털사이트의 플레이어 영상은 자체 인코딩 과정을 거치기 때문에 화질열화의 단점을 갖고 있다. 하지만 JW Player는 원본 그대로 재생해주기 때문에 저장 공간만 있다면 아무런 제약없이 고화질의 영상도 재생시켜준다.

    JW Player 사용법

    JW Player로 동영상을 재생하기 위해서는 jwplayer.js와 player.swf 그리고 동영상 파일이 있어야한다.

    • jwplayer.js
      - JW Embedder 방식으로 JW Player를 실행시킬 때 필요. JW Embedder 방식을 사용하지 않을 경우에는 없어도 상관이 없다.
    • player.swf
      - JW Player의 기본 실행파일. 여타의 비디오 및 오디오 자료를 플레이 시킬 때 사용한다.

    jwplayer.js와 player.swf 는 http://www.longtailvideo.com/jw-player 홈페이지에서 받을 수 있다.

    • ※ 기본 구조

      <head>
      		
      </head>
      <body>	
      
      동영상이 재생되는 부분
      </body>
    • ※ 사용 예

      플레이어 불러오는 중...
    • ※ 참고사항

      간혹 JW Player가 특정 브라우저에서 재생이 안될때가 있는데 Adobe Flash player를 설치하면 모든 브라우저에서 동영상 재생이 가능하다.
      http://get.adobe.com/kr/flashplayer

      • 후기

        JW Player는 현재 6버전까지 나와있는 상태이다. JW Player 6버전에서 구현되지 않고 있는 기능들...JW Player 6자체 문제라기 보다는 HTML 5 의 기능적 한계때문에 구현이 어려운 부분들이 많다.

        JW Player 5버전에서 6버전으로 업그레이드 되면서 가능 크게 바뀐건 flash 기반의 플레이어를 추구하다가 6버전에서는 기본 모드가 HTML 5로 바뀐다. 아울러서 기존에 지원하던 <embed> 방식과 SWFObject 방식의 플레이는 더 이상 지원 안한다. 이제는 Embedder 방식만을 지원. HTML5와 Flash 기반의 두 가지 방식을 여전히 지원을 하지만 자바 스크립트를 사용을 하는 Embedder 방식으로만 플레이 할 수 있다. 예를 들어 자바 스크립트를 지원하는 티스토리에는 JW Player 6을 가능하지만, 네이버와 같이 자바 스크립트를 지원하지 않는 사이트에서는 JW Player 6을 사용 할 수 없다.

        전제척으로 봤을 때 JW Player 6버전은 기본적 플레이가 되는데 편의성 부분에서는 아직은 이런 저런 기능들이 부족한 것이 많아 보인다. 플래시 기반의 JW Player 5버전에서의 편의성을 따라가지 못하는 것 같다.

        맑은커뮤니케이션에서 웹퍼블리싱 업무시 JW Player를 사용해본 결과 현재 나와있는 6버전보다는 그 아래 버전인 5.2버전, 5.9버전이 크로스 브라우징을 하기엔 더 용이하다.

        ※ 참고사항

        유투브 영상을 플레이 할 때는 스킨을 쓰면 플레이가 안 된다. 스킨을 제거해야 플레이가 정상적으로 이루어 진다.

        유튜브 플러그인은 아직은 플래시 기반이다.. 이것은 JW Player 6의 문제가 아니라. 유튜브 자체의 문제. 유튜브에서 다른 프로그램이 유튜브 영상을 플레이 하도록 도와주는 API를 제공을 하고, JW Player와 같은 플레이어들은 유튜브에서 제공하는 API를 통해서만 유튜브의 영상을 플레이 할 수 있도록 되어 있다. 아마도 유튜브의 영상을 통해서 제공하는 광고 때문에 그런 것 같다. 다른 플레이어를 통해서 유튜브 영상을 시청 하도라더 정상적으로 광고가 나가도록 하기 위해서. 그런데 유튜브에서 자체적으로 제공하는 API가 현재는 플래시 기반으로 되어 있어서 유튜브 영상을 플레이 할 때는 아직은 플래시 기반을 벗어날 수 없다. 당연히 안드로이드나 iPad같은 기기에서는 문제가 생긴다.. 이 문제는 유튜브에서 iFrame 기반의 API를 시험적으로 내놓고 있기 때문에 이 iFrame 기반의 API가 안정되면 해결 될 것으로 기대 한다.

      반응형
      반응형
      @font-face는 css3라고 알고 있지만, 사실 이전부터(css2) 있던 규칙이다.
      다만 Embedded Open Type(EOT)포맷 라이센스로 인해 Microsoft의 웹 브라우저인 인터넷 익스플로어에서만 사용되어 왔다.
      그러나 사파리 3.1의 릴리즈와 함께 라이센스 문제를 해결한 Tyue Type Font(TTF)와 Open Type Font(OTF)를 웹 페이지에 웹 폰트처럼 사용 할 수 있게 되었다.
      웹 브라우저가 웹 폰트 형식의 Downloadable Font를 다른 포맷으로 지원하기 시작하고, Web Open Font Format(WOFF) 지원이 일반화되었다.

      font-face란?

      font-face규칙은 CSS3에 새로 추가된 웹 글꼴명세로 시스템에서 지원해주지 않는 글꼴을 웹 서버에서 내려 받아 화면에 표시해 주는 방법으로 MS가 독자적으로 IE6~8 브라우저에 지원하던 명세였는데 W3C에 제안하여 현재 CSS3 표준 초안이 되었다.

      font-face 문제점 및 사용방법

      font-face는 웹 서버에서 글꼴을 내려 받아 사용하므로 글꼴이 없는 사용자가 이용하는데 좋다.
      하지만 font-face를 사용하기 전에 다음과 같은 몇 가지 문제를 확실히 알고 있어야 한다.

      • * TTF(True Type Font)는 용량이 커서 EOT(Embedding Open Type)나 WOFF(Web Open Font Format)를 쓰는 것이 일반적이다.
        (TTF형식일 경우 영문 글꼴은 크기가 작지만, 한글 글꼴의 경우 크기가 상대적으로 큼. TTF형식은 압축되지 않은 타입으로 웹에서 사용하긴 무리)
        ※ 예) 나눔고딕.TTF 는 2.23MB(한자 포함 4.13MB), EOT,WOFF로 변환하면 나눔고딕.EOT는 846KB, 나눔고딕.WOFF는 981KB

        해결방법

        TTF형식 파일을 EOT, WOFF형식 파일로 변환하여 사용.
        (EOT, WOFF형식으로 변환시 상대적으로 최대는 30%~70%의 용량으로 압축효과가 있다.)

      • * IE6~8 브라우저는 EOT형식 글꼴만 지원, 크롬, 사파리, 파이어폭스, 오페라는 WOFF형식 글꼴만 지원.
        (IE9 브라우저는 EOT, WOFF형식 글꼴 둘다 지원함)
          ie IE chrome 크롬 firefox 파이어 폭스 safari 사파리 opera 오페라
        WOFF 9부터 지원 지원 지원 지원 지원
        EOT 6~9지원 미지원 미지원 미지원 미지원
      • * 기본문법
        @font-face{
        	font-family: <a-remote-font-name>;
        	src: <source>;
        	font-weight: <weight>;
        	font-style: <style>
        }
        
        속성값(Values)
        <a-remote-font-name>
        font 속성에서 폰트명(font face)으로 지정될 이름을 설정한다.
        <source>
        원격 폰트(remote font) 파일의 위치를 나타내는 URL 값을 지정하거나, 사용자 컴퓨터에 설치된 폰트명을 local("Font Name")형식으로 지정하는 속성이다.
        <weight>
        폰트의 굵기(font weight) 값(생략 가능).
        <style>
        폰트 스타일(font style) 값(생략 가능).
        사용자의 로컬환경(local computer)에 설치된 폰트는 local() 이라는 구문을 사용하여 지정이 가능하다.
        만약 해당 폰트를 찾지못한다면, 다른 대체 폰트를 찾을때까지 폰트를 검색작업을 계속 할 것이다.
      • * 모든 브라우저에서 글꼴을 표시하기 위해 font-face규칙을 두번 선언해야 한다.
        @font-face{font-family:ngwoff; src:url(NanumGothic.woff)}
        @font-face{font-family:ngeot; src:url(NanumGothic.eot)}
        body{font-family:나눔고딕, NanumGothic, ngwoff, ngeot}
        
        font-face규칙을 두번 사용할 경우 시스템 글꼴이 없는 경우 IE6~9 브라우저에서 EOT형식 외에 WOFF형식도 요청하기 때문에 사용자는 불필요한 1MB미만의 파일을 추가로 내려받는 셈이다.
      • 해결방법위에서 봤듯이 IE6~8 브라우저는 EOT를 지원한다. 그렇기 때문에 불필요하게 WOFF파일까지 요청 할 필요가 없다.
        때문에 IE6~8에서는 local(※)이라는 구문을 넣어서 WOFF의 요청을 막아준다.local(※) 값의 괄호 안쪽에 포함된 ※ 기호는 사용자 시스템에 존재하지 않을만한 글꼴을 임의로 지정한 것. 굳이 2byte짜리 특수문자를 사용한 이유는 Mac OS에서 2byte짜리 문자열로 된 시스템 글꼴 이름은 아예 처리하지 않기 때문이다.
        (IE6~8 브라우저가 두번째 src속성을 해석하지 못하도록 하기 위함. local값의 용도는 사용자 로컬 시스템 글꼴이 있는 경우 참조하는 것인데 Mac 컴퓨터는 시스템 글꼴 이름이 모두 1바이트로 되어 있기 때문에 2바이트 이름을 사용해서 아예 제외. local값은 비워두면 안되기 때문에 반드시 넣어야 하고 여기에 로컬에 전혀 없을만한 글꼴이름을 넣는다.)☞ font-face 명세에 따르면 'EOT'글꼴에 대한 format('eot') 선언이 없기 때문에 선언을 굳이 안함.
      • format('woff') 포맷 타입이 선언되어있는데, format(‘woff’) 값을 명시적으로 작성하면 이 형식을 지원하는 브라우저만 글꼴을 내려받게 되어 있다.
        값은 반드시 홀따옴표 또는 쌍따옴표 안에 있어야 하며 작성하지 않는 경우 지원 여부에 무관하게 모든 형식의 글꼴을 내려받는것이 명세이다.
        글꼴을 지원하지 않으면서도 내려받는 상황을 예방하기 위해 이 형식을 지원하는 경우에만 외부 글꼴을 내려받도록 명시적으로 코드를 작성한 것이다.
        IE 7~8 브라우저는 이 코드를 해석하지 못하기 때문에 woff 글꼴을 추가로 요청하지 않도록 만든 것이다.
      • local(※) 값은 외부 자원을 참조하기 이전에 시스템에 설치된 글꼴을 우선 참조할 수 있도록 만들어 준다. 그러나 이코드에서는 IE6~8 브라우저가 local() 값을 처리하지 못하는 특징을 이용하여 WOFF 글꼴을 추가로 요청하지 않도록 해준다.
      • @font-face{
        	font-family:ng;
        	src:url(NanumGothic.eot);
        	src:local(※), url(NanumGothic.woff) format('woff')
        }
        
        body{font-family:나눔고딕, NanumGothic, ng}
        

      참고

      미디어 쿼리를 이용하여 @media 구문 안쪽에 @font-face규칙을 선언하는 경우 IE9 브라우저는 미디어쿼리 안의 @font-face를 무시하기 때문에 표시하지 못한다.

      해결방법

      * IE9 조건부 주석문 사용

      <!–-[if IE 9]>
      <style>
      	/* This code is used only in IE 9 */
      	@font-face{
      		font-family:ng;
      		src:url(NanumGothic.eot);
      	}
      	
      	body{font-family:나눔고딕, NanumGothic, ng}
      </style>
      <![endif]-–>
      

      * 나머지 브라우저에선 미디어쿼리를 이용

      /* IE 9 does not support @font-face within @media */
      @media all and (min-width:768px) {
      	@font-face{
      		font-family:ng;
      		src:url(NanumGothic.eot);
      		src:local(※), url(NanumGothic.woff) format(‘woff’);
      	}
      
      	body{font-family:나눔고딕, NanumGothic, ng}
      }
      

      해결방법

      * @font-face 규칙을 미디어쿼리 밖에 선언

      /* IE 9 does not support @font-face within @media */
      @font-face{
      	font-family:ng;
      	src:url(NanumGothic.eot);
      	src:local(※), url(NanumGothic.woff) format(‘woff’);
      }
      
      @media all and (min-width:768px) {
      	body{font-family:나눔고딕, NanumGothic, ng}
      }
      

      IE6~8 브라우저는 미디어쿼리를 지원하기 위해 respond.min.js 파일을 사용해야 한다.(미디어쿼리 구문 안쪽에 @font-face 규칙을 추가하는 경우도 있다.)

      마치며...

      Font-Face(웹 폰트)의 성가신 점은 바로 브라우저 호환성이다. 브라우저마다 다르게 보인다, 브라우저마다 적용이 안 된다 등등
      여러 가지 말들이 많지만, 맑은커뮤니케이션에서 테스트 해본 결과 위와 같은 방법을 사용하면 왠 만한 이슈는 예방하고 정상적으로 사용 할 수 있게끔 해준다.
      이상!!!!!!!!!!

      반응형
      반응형
      반응형웹은 데스크탑, 노트북, 넷북, 태블릿, 스마트폰, 스마트TV 등 N-Screen의 Multi Device에 어떠한 사용자도 제약없이 접근할 수 있도록 제공하는 웹을 말한다.
      반응형웹에서 가장 중시되어야 할 것은 모바일을 우선순위로 해야한다.
      최적화된 반응형웹 접근방식으로서 모바일을 우선에 두고 CSS를 작성하는 방법으로 가장 단순한 기기, 최소성능의 Device에 우선을 두고 작업을 하며, 이렇게 작업을 하면 기준치 이하의 Device에 과도한 짐을 지우지 않으면서, 최신 브라우저를 사용하는 사용자에게 풍부한 경험을 제공한다.
      또한 웹의 창시자 팀 버너스 리 경(Tim Berners - Lee , W3C Director and inventor of the World Wide Web)은 이렇게 이야기 했다.
      웹의 힘은 그것의 보편성에 있다. 장애에 구애없이 모든 사람이 접근할 수 있는 것이 필수적인 요소이다.
      (The power of the Web is in its universality, Access by everyone regardless of disability is an essential aspect.)

      반응형웹의 등장배경

      현재 다양한 IT Device 등장함에 따라 N-Screen 욕구가 생겨나게 되고, 이에따라 Multi Device환경에 최적화된 디자인과 기능을 보여주어야 한다. 기존에는 이를 위해 사용자 브라우저 UA(User Agent) 정보를 감지하여 사용자 접속시 모바일 전용페이지로 이동할지 데스크탑 전용 페이지에 머무르게 해야 할지 판단했기에 새로운 Device가 등장할 때마다 개발자는 고민해야 햇다.
      그리고 새로운 모바일 브라우저가 등장하면 개발자가 새로운 코드를 추가했다. 데스크톱과 모바일 이외에도 그 중간 정도 크기의 해상도인 태블릿 PC를 많이 사용하는 요즘과 같은 상황에는 유연하게 대응하지 못하는 방식이다. 만약 기존의 방식대로 대응한다면 태블릿 PC 전용 페이지를 추가로 개발하고 UA 정보를 추가한 다음 태블릿 PC 사용자 접속 시 태블릿 PC 전용 페이지로 이동하는 코드를 추가해야 한다.

      이와 달리 반응형 웹은 사용자의 해상도와 같은 장치 특성을 해석해서 단 하나의 HTML 페이지가 여러 패턴의 CSS 뷰를 갖도록 만들어 준다. 특정 해상도에 최적화된 페이지를 만드는 것이 아니라 모든 해상도에 대응하는 페이지를 만들기 때문에 현존하는 모든 장치의 해상도를 일일이 파악할 필요가 없다. CSS3 미디어쿼리 규칙이 등장하면서 서버 측 개발자가 해야만 했던 일을 이제는 클라이언트 개발자가 할 수 있게 된 것이다. 이렇듯 웹은 데스크탑의 차원을 넘어서야 했다.

      반응형웹 마크업 가이드 제작 전 고민사항

      • 1. 미디어쿼리 해상도 분기문제
      • 2. IE8 브라우저의 하위 호환성
      • 3. 모바일 환경에서의 성능문제
      • 4. 가변적 그리드 기반의 레이아웃
      • 5. 웹폰트를 기본글꼴로 사용시 브라우저 호환성 및 모바일 성능저하 문제

      고민사항1 : 미디어쿼리 해상도 분기문제 해결방법

      다양한 Device를 어떻게 미디어쿼리로 분기 할 것인가에 대한 고민은 반응형웹 프로젝트를 진행하는 개발자라면 누구나 고민할 것이다.
      모바일 페이지를 기본CSS로 작성하고 미디어쿼리를 사용하여 데스크탑 페이지, 테블릿페이지로 개발하면 된다.

      • 1. 데스크탑 페이지
        최근 고해상도 사용자가 많아짐에 따라 1280px 이상(데스크탑 페이지 가운데 정렬 디자인이 대부분이므로 CSS는 컨텐츠 영역을 PX로 고정한다.)으로 미디어쿼리 작성한다.
      • 2. 노트북 및 태블릿 페이지
        태블릿과 노트북은 가로사이즈가 1024px로 동일하다. 태블릿에서는 틸팅(화면회전)이 되므로 가로사이즈를 width="auto"로 CSS를 작성한다.
        미디어쿼리의 해상도는 768px 이상 ~ 1025px 이하로 작성한다.
      • 3. 모바일 페이지
        미디어쿼리를 적용하지 않고 기본 CSS로 작성한다.
        태블릿과 같이 틸팅(화면회전)이 되므로 가로사이즈를 width="auto"로 CSS를 작성한다.
      @media all and (min-width:768px) and (max-width:1024px){
      /* 태블릿 및 노트북 CSS 작성 */
      }
      
      @media all and (min-width:1025px){
      /* 데스크탑 CSS 작성 */
      }
      

      고민사항2 : IE8 브라우저의 하위 호환성 해결방법

      반응형웹이란 IT Device에 반응하는 것이지 화면을 Resize해서 반응하는 것이 아니며, 그것이 본질이다. 그렇기에 데스크탑 페이지에서 Resize 해도 반응하지 않아도 무방하다.
      그러나 클라이언트는 반응형웹의 본질에 대해서 모르는 경우가 대부분이다. 무조건 Resize되어야 반응형이라고 생각한다. 그렇기 때문에 논리적으로 설득하는것이 가장 좋은 방법이나, 안될 경우에는 Internet Exploer 6~8 버전 브라우저에서도 미디어쿼리를 해석할 수 있도록 만들어 주는 JavaScript 라이브러리가 있다.
      respond.min.js라고 부르는 이 파일은 약 4KB 정도의 용량이다. 어떤 용도로 사용해도 제한이 없는 MIT 또는 BSD 라이선스를 가지고 있기 때문에 소스 코드에 포함된 라이선스 명시 조항만 지우지 않으면 github에서 언제든 내려받아 사용할 수 있다.

      respond.min.js 내려받기 : https://github.com/scottjehl/Respond

      respond.min.js 파일을 HTML 문서의 <head> 태그 부분에 다음과 같은 방식으로 삽입하면 Internet Exploer 6~8 버전 브라우저가 미디어쿼리를 해석할 수 있게 된다. 로컬(local)에서는 확인이 불가능 하며, 서버에 올린 후 적용된 것을 확인할 수 있다.

      <!--[if lt IE 9]>
      <script type="text/javascript" src="/js/respond.min.js"></script>
      <![endif]-->
      

      Internet Explorer 브라우저만 해석할 수 있는 조건부 주석을 사용했기 때문에 다른 표준 브라우저들은 이 코드를 무시하고 JS 파일을 요청하지 않으며 IE9 미만인 IE6 ~ IE8 에서만 사용된다.

      고민사항3 : 모바일 환경에서의 성능문제 해결방법

      데스크탑은 성능이 좋아 속도에 문제가 없지만, 모바일 Device 경우 낮은성능으로 인하여 최적화를 고려해야 한다.

      • 1. 모바일 CSS
        모바일 CSS를 기본으로 작성하고, 태블릿과 데스크탑 페이지를 미디어쿼리로 작성하여 모바일에 불필요한 CSS는 요청하지 않게 한다. 미디어쿼리의 경우 해당 해상도가 아닐경우 CSS를 요청하지 않아 성능을 최적화 할 수 있다.
      • 2. Sprite 기법 사용
        여러개의 잘개 쪼개진 이미지는 서버에 많은 요청을 유발하므로 의미가 비슷한 이미지의 경우 병합하여 사용함으로서 서버측에 이미지 요청 횟수를 줄여 성능을 최적화 한다.
      • 3. 들여쓰기 및 띄워쓰기 최소화
        CSS 및 마크업 들여쓰기 및 띄워쓰기를 최소화하여 성능을 높여준다.

        NHN Markup Coding Convention : http://html.nhncorp.com/

      • 4. 웹폰트 요청분기
        웹폰트사용 시 기본 CSS로 작성하지 않고 해당 데스크탑 미디어쿼리부분에 작성하여 모바일 Device의 성능을 올려준다.

      고민사항4 : 가변적 그리드 기반의 레이아웃 해결방법

      • 1. 컨텓츠 레이아웃 시 rem, %를 사용하여 개발할 경우 아직 출시되지 않은 device에 대비한다.
      • 2. 이미지와 미디어들도 감싸 있는 그리드에 맞게 max-width:100% 넣어준다.

      고민사항5 : 웹폰트를 기본글꼴로 사용시 브라우저 호환성 및 모바일 성능저하 문제 해결방법

      IE9은 @media 규칙 내부에 @font-face 허용 안하기 때문에 @media 구문 안쪽에 @font-face 규칙을 선언하는 경우 IE9 브라우저는 외부 글꼴을 요청하지 않기 때문에 표시하지 못합니다.
      그렇기 때문에 웹폰트 사용 시 IE9 조건부 주석을 사용하여 IE9에서만 해석할 수 있도록 개발해야 한다.

      <!--[if IE 9]>
      <link rel="stylesheet" type="text/css" href="iefont9.css">
      <![endif]-->
      

      반응형웹 기본가이드 다운로드

      맑은커뮤니케이션에서 만든 반응형웹 기본가이드는 미디어쿼리 및 자바스크립트로 분기하는 방법 2가지 자료를 첨부하였습니다.
      사용 시 작성자 주석부분 지우지 말고 사용해 주세요.

      반응형웹_1_미디어쿼리.zip
      다운로드
      반응형웹_2_자바스크립트.zip
      다운로드

      참고블로그 : http://helloworld.naver.com/helloworld/81480

      반응형
      반응형
      지난 2013년 2월 NHNCompany에서 학교에 첫 정시 입학이 이루어졌습니다.
      그러면서 이번에 (주)맑은커뮤니케이션에서 웹퍼블리싱 작업하게된 부분은 타 사이버 교육기관처럼 교수님들과 학생들의 필요한 웹페이지의 관리 프로그램이었습니다.
      그중 이번에 소개할 내용은 멀티 디바이스를 지향하는 달력(캘린더)/스케쥴관리 MarkUp 부분입니다.
      현재 정상적으로 관리되고 있는 사이트나 작업 진행중인 사이트들 중 꼭 필요하지않지만 대학교나,정규화된 회사들은 스케쥴표나 달력을 필요로 하고 있습니다. 또한 스케쥴표와 달력을 꼭 필요로한 홈페이지들도 많이 늘어나고있습니다.
      그 중심에는 스마트폰을 활용해 PC와 동기화를 가능하게 하여 언제 어디서나 어떤 기기를 사용해 자신의 스케쥴을 관리할수 있게 발전이 되었기 때문입니다.
      이런 흐름에 맞춰 작업을 진행하게 되었으며 포스팅 하게될 내용은 PC버전과 어떤 기종의 모바일에서도 출력이가능하고 개발도 용의한 테이블 스케쥴표를 만들게된 과정과 에러사항/해결에 대해서 정리해보겠습니다.

      웹퍼블리싱 제작과정

      1.테이블 마크업
      강의 시간표
       
      0교시
      (08:00)
                 
      1교시
      (09:00)
                 
       
      
      강의 시간표
       
      0교시
      (08:00)
                 
      1교시
      (09:00)
                 

      - 여타 다를것 없는 기본 테이블로 월~금요일까지의 칸 입력 후 시간대별 교시를 입력합니다.
      클릭시 해당데이터를 입력하거나 다른 폼에서 데이터 입력시 데이터 삽입도 가능하도록 마크업한 상태입니다.

      2. 개발시 데이터 출력될 스케쥴 마크업
      강의 시간표
       
      0교시 (08:00)
      자바스크립트 (01반)강의실A - 홍길동
      JAVA (02반)강의실B - 홍길동
      C++ (03반)강의실C - 홍길동
       
      유비쿼터스 (04반)강의실D - 홍길동
       
      1교시 (09:00)    
      Node.js
      Dart.js
      강의실E - 홍길동
       
      2교시 (10:00)            
      강의 시간표
       
      0교시 (08:00)
      자바스크립트 (01반)강의실A - 홍길동
      JAVA (02반)강의실B - 홍길동
      C++ (03반)강의실C - 홍길동
       
      유비쿼터스 (04반)강의실D - 홍길동
       
      1교시 (09:00)  
      자바스크립트
      jQuery API (01반)
      강의실A - 홍길동
       
      Node.js
      Dart.js
      강의실E - 홍길동
       
      2교시 (10:00)            

      Css (아래의 에러사항들의 문제를 주석으로 처리)

       
      .bbs_table{width:100%;border:1px solid #d0d4d9;line-height:16px;/* IE7 수정 */*border-right:0/* IE7 수정 */}
      .bbs_table th:first-child,.bbs_tbl_type2 td:first-child{border-left:0}
      .bbs_table th{padding:10px 9px 7px;border-width:0 0 0 1px;border-color:#dcdee2;border-style:solid;text-align:center;background-color:#eff0f2;color:#333}
      .bbs_table td{padding:10px 9px 7px;border-width:1px 0 0 1px;border-color:#edeef0 #dcdee2;border-style:solid;text-align:center;line-height:33px;color:#666;/* IE7 수정 */*border-left:0;*border-top:0;*border-bottom:1px solid #edeef0;*border-right:1px solid #dcdee2;/* IE7 수정 */}
      .bbs_table td input[type=text],.bbs_tbl_type2 td select,.bbs_tbl_type2 td a.fron{margin:-6px 0 -2px}
      .bbs_table td:hover{border:1px solid #666 !important}
      .bbs_table tr:first-child td{border-top:1px solid #dcdee2}
      .bbs_table tr:first-child td:hover{border-top:1px solid #666 !important}
      .schu_line_bg{border:1px solid #999 !important;background-color:#f9fafa}
      .schedule_area_v1{position:relative;/* IE7 수정 */*top:3px;/* IE7 수정 */padding:18px 5px 16px;line-height:18px;font-size:12px}
      .schedule_area_v1 a{display:block;position:relative;color:#333}
      .schedule_area_v1 a:hover{font-weight:bold}
      .schedule_close{display:block;position:absolute;top:2px;right:2px;width:15px;height:15px;cursor:pointer;border:0;background-color:#f9fafa;color:#333}
      

      * 옵션사항

      - 테이터 출력되면 해당 컬럼에 필요 문구가 입력됩니다.

      - 데이터 출력시 빈 컬럼과 구분하기위해 백그라운드 색과 보더 라인을 입혀줍니다.

      - 데이터 출력반환시 X(이미지로 대체가능)표시를 클릭합니다

       

      제작후 데이터 입력시 에러사항들

      첫째. 각 컬럼별 테이터입력시 위,아래,양옆 사방으로 보더라인 두줄표현문제
      둘째. 최상단 컬럼과 타이틀 컬럼부분 보더라인 겹침문제 (IE7)
      셋째. 타이틀 컬럼 제외 데이터가 출력될 모든 컬럼 '행'의 내용이 길어진 만큼 컬럼높이값이 같이 늘어나야하는 문제



      에러사항과 해결방안

      첫째. 각 컬럼별 테이터입력시 위,아래,양옆 사방으로 보더라인 두줄표현문제
       1. 컬럼 td 안에 div섹션을 구현 absolute 위치값을 상단으로 겹치도록 올림. 
       2. 위,아래,양옆 데이터가 입력되어도 겹쳐보이도록표현해 라인이 한줄로 표현.
       3. 컬럼 td에는 보더값만 지정, 나머지 부속성들은 div섹션에 삽입. 
       4. IE7에서는 우측,하단 부분의 라인이 겹쳐지는 문제가 발생. 
       5. absolute의 위치값이 적용되지 않고 그대로 배출하여 정상처럼 두줄로 표현하지않고 밑쪽으로 내려감.
       6. 해결책은 td의 반대 좌측,상단 보더를 없애 겹침을 유지시켜 줍니다
       
      둘째. 최상단 컬럼과 타이틀 컬럼부분 보더라인 겹침문제 (IE7)
       - 해당 타이틀컬럼(thead)부분의 하단 보더라인 삭제와 컬럼의 제일 첫번째 컬럼만 상단 보더를 넣어주면 문제가 해결됩니다.
       
      셋째. 월~금요일에 해당하는 교시의 내용이 길어진 만큼 컬럼높이값이 같이 늘어나야하는 문제
       - 보더라인을 IE7버그로 최초 div섹션이 주었으나 섹션별로 높이값이 데이터별로 일정하지않아, 어쩔수없이 상위클레스 td에 주었으며, 위사항들의 보더라인의 해결로 인해 자연적으로 해결.




      작업완성/작업평

      최초 컨펌후 작업진행 되었을때는 기존 달력들과 스케줄 소스를 조그만 수정해서 쓰면 된다는 식으로 작업하였으나, 생각외로 에러사항이 많이 생겼고(IE7) 시대의 흐름에 맞게 PC뿐만아니라 멀티 디바이스도 신경써야했기 때문에 해결방안을 찾는데도 너무 많은 시간을 투자했습니다. 언제나 그렇듯이 PSD상에서는 가볍게 느껴지는 작업도 개발로 이뤄지면 항상 생각지도 못한 에러사항이 발생합니다. 이 소스를 보고 조금이나 도움이 되는 부분이 있었으면 좋겠습니다.
      감사합니다.



      스케줄표 다운로드

      schedule.html
      다운로드

       

       

      반응형
      반응형
      Property 지원 Browser 설명 추가설명
      Border Radius ie9 firefox chrome safari opera 둥근 모서리를 넣기
      Box-shadow ie9 firefox chrome safari opera 박스에 그림자 효과 주는 속성
      Text-shadow firefox chrome safari opera 텍스트에 그림자 효과 주는 속성
      Multiple Colummns firefox chrome safari 텍스트 레이아웃에 대해 여러 개의 열을 주는 속성
      Transitions firefox chrome safari opera css 값의 변화를 부드러운 애니메이션으로 표현함
      Transform firefox chrome safari opera 회전 효과, 스케일링(확대/축소)효과, 기울임 조절, 위치 변경
      Animation chrome safari 개체에 동적인 효과를 주기
      Text-overflow ie7 ie8 ie9 firefox chrome safari opera 텍스트 랩핑(Wrapping)과 관련되는 스타일
      Background-Size ie9 firefox chrome safari opera 백그라운드에 깔린 이미지의 사이징을 조절
      반응형
      반응형

      저는 웹퍼블리싱을 시작하면서 젤 큰 고민이 스크립트 구현 영역에 관한 부분이었던것 같습니다.
      저의 결론은 스크립트는 개발영역이 포함되지 않는 부분까지 구현하도록 하고 있습니다.

      동적인 움직임을 주기 위해서는 자바스크립트를 사용했는데요 현재는 제이쿼리라는 오픈소스를 많이 활용합니다.

      제이쿼리는 오픈소스를 무료로 사용이 가능하고 만들어진 플러그인이 많아서 사용하기 좋기 때문입니다. 그리고 움직임이 자바스크립트 보다는 부드럽고 화려해서 사용자의 반응도 좋더라구요~

      그래서 이번에는 코딩할때 많이 쓰이는 제이쿼리 플러그인들을 공유하려고 합니다.

      저도 코딩할때 활용하는 플러그인이라서 문제없이 사용하 실 수 있을것 같아요~

      1. 메인페이지의 비주얼은 개발소스가 전혀 들어가지 않기 때문에 메인비주얼의 동적인 움직임을 스크립트로 표현해 주어야 하는데요.
        이 플러그인은 이미지가 좌우로 슬라이드되는 플러그인으로 기본 메인비주얼 스크립트로 가장 많이 쓰일거라고 생각됩니다.
      2. 두번째도 메인비주얼영역에 사용할 수 있는 플러그인입니다.
        아코디언 플러그인으로 가로아코디언이라서 메인비주얼에 사용 가능합니다.
      3. 이 플러그인은 toggle 관련된 플러그인인데요.
        아래 슬라이드로 열었다 닫았다하고 싶을때 사용해 주세요!
      4. 페이드 관련된 플러그인입니다.
        텍스트, 이미지등이 페이드되는 예제가 들어있습니다.
        요것도 쓸때가 많을것 같죠?^^
      5. 6가지 움직임 활용이 가능한 플러그인입니다.
        메인비쥬얼 혹은 특이한 포토갤러리 같은 곳에 사용이 가능 할 수 있을 것같아요
      6. 드래그 관련된 플러그인입니다.
        레이어팝업을 이리저리 움직이게 하고싶다는 요청이 있을 때 사용해주시면 될 것같습니다.
      7. lightbox라고 하는 플러그인입니다.
        레이어를 띄울때 주위(배경)를 어둡게 하고 그 위에 레이어를 띄우는 플러그인입니다.
      8. placeholder 플러그인입니다.
        placehilder는 input의 입력값 작성에 도움을 주는 역할을 하는데요. 접근성에 맞추기 위해 placeholder를 작성하는것이 좋다고 되어있습니다.
        하지만 placeholder속성은 html5에 해당하는 속성으로 IE6,7,8에서는 사용이 불가능합니다.
        이 플러그인은 비표준브라우저에서도 html5처럼 속성값으로 사용할 수 있으니까 편리하게 사용이 가능할 것 같습니다.
      9. 탭메뉴 플러그인입니다.
        아이디를 이용한 탭메뉴입니다. 탭은 설명이 필요없을 듯하네요^^
      10. 마지막은 툴팁 플러그인을 소개합니다.
        툴팁은 어려운 용어가 많은 금융권이나 공공기관 같은 사이트에서 잘 사용하 실 수 있을 것 같아요.
      반응형
      반응형

      alt과 title의 차이점

      alt 속성이란?

      이미지를 볼 수 없는 환경에서도 내용을 확인할 수 있게 합니다. 즉, 대체 텍스트라고 합니다.

      title 속성이란?

      해당 객제에 대한 제목이나 특성을 설명하기 위한 것(참고의 의미)

      title 속성과 alt 속성의 의미는 전혀 다르므로 의미에 맞게 사용하셔야 합니다. 또한, title 속성을 alt 속성 대신 사용해선 안됩니다.

      alt 속성

      alt 속성을 사용할 수 있는 태그

      <img />, <area />, <input />

      alt 속성 사용시 유의사항
      • 명쾌하고 짧은 대체 텍스트를 제공
      • 파일명을 대체 텍스트로 제공 지양
      • 이미지 맵에 대한 대체 텍스트 제공
      • 의미없는 이미지에는 공백으로 대체
      • 의미를 제대로 파악할 수 없는 대체 텍스트 지양
      • 의미있는 이미지에 무의미한 대체 텍스트 제공 지양
      • '~ 하십시오.', '~ 됩니다.' 등 친절한 설명을 자제하고 간단 명료하게
      • '링크', '여기', '클릭', '바로가기' 등의 목적지를 구체적으로 알려주지 않는 단어 사용하지 말자

      잘못된 예

      		<img src="bullet.gif" alt="블릿" />
      		<img src="naver.gif" alt="바로가기" />
      		<img src="next.gif" alt="버튼을 누르시면 다음페이지로 이동됩니다." />
      		<img src="photo.jpg" alt="사진 1" />
      		<img src="model.jpg" alt="model" />
      		<img src="logo.png" alt="로고" />
      		<ol>
      			<li><img src="text1.gif" alt="" /></li>
      			<li><img src="text2.gif" alt="" /></li>
      			<li><img src="text3.gif" alt="" /></li>
      		</ol>

      올바른 예

      		<!-- 의미없는 이미지일 경우 -->
      		<img src="bullet.gif" alt="" />
      		
      		<!-- 대체 텍스트 사용 예제 -->
      		<img src="naver.gif" alt="네이버" />
      		<img src="next.gif" alt="다음페이지" />
      		<img src="photo.jpg" alt="튤립" />
      		<img src="model.jpg" alt="꽃무늬 원피스를 입고 있는 모델" />
      		<img src="logo.png" alt="블루웨이브" />
      		<input type="image" src="btn_writ.gif" alt="글쓰기" />
      		
      		<!-- 이미지 맵에 대한 대체 텍스트 -->
      		<img src="languge.gif" alt="언어" usemap="#language" />
      		<map name="language">
      			<area sshape="rect" coords="10,5,66,19" href="/en/" alt="English">
      			<area sshape="rect" coords="10,17,66,32" href="/ko/" alt="Korean">
      		</map>
      		
      		<!-- 다이어그램 또는 그래프 경우 -->
      		<img src="graph.gif" alt="2004년 반도체 수출액 2,538억원, 수입액 265억원, 2005년 반도체 수출액 3,538억원, 수입액 302억원" />

      title 속성

      title 속성을 사용할 수 있는 태그

      <html>, <head>, <title>, <base>, <basefont>, <meta>, <script>, <param>을 제외한 모든 태그에 사용할 수 있습니다.

      a 태그

      이동할 목적지에 대해서 좀 더 명확하게 이해할 수 있게 title를 제공해야 합니다.

      		<a href="http://www.naver.com" title="네이버(새창)" target="_blank"><img src="naver.gif" alt="네이버" /></a>
      abbr 태그

      약자로 'WWW', 'URL', 'HTML', 'IT' 등 한 문자씩 발음하는 단어를 정의하는 태그

      		<abbr title="World Health Organization">WHO</abbr>
      acronym 태그

      두문자어로 'NATO', 'NASA', 'SOHO' 등 한 단어로 발음하는 단어를 정의하는 태그
      HTML5 에서는 삭제되는 태그, abbr의 의미와 혼동 되어 abbr로 통합해서 사용됩니다.

      		<acronym title="North Atlantic Treaty Organization">NATO</acronym>
      input 태그

      input 종류 : button, checkbox, file, image, password, radio, text, submit 등

      		<input type="file" name="" value="" title="파일을 선택하세요" />
      		<input type="text" name="" value="" title="텍스트를 입력하세요." />
      		<input type="radio" name="" value="" />
      		<input type="image" name="" src="이미지 주소" alt="" />
      		<input type="button" name="" value="button" />
      		<input type="submit" name="" value="submit" />
      		<input type="checkbox" name="" value="" />
      		<input type="password" name="" value="" title="비밀번호 입력하세요." />
      iframe 태그(사용을 가능한 지양합니다.)

      프레임 제목은 프레임의 내용을 인식할 수 있도록 짧고 간결하게 제목을 제공해야 합니다.
      또한, 내용이 없는 빈 프레임의 경우에도 title="빈 프레임" or "내용 없는 프레임" 과 같이 title를 제공해야 합니다.

      		<iframe src="briefing.html" title="국정브리핑 정책속보" name="briefing"></iframe>

      위의 내용을 제외한 웹접근성 향상을 위한 방법

      • 테이블의 내용을 이해할 수 있도록 summary 속성, caption 태그를 제공해야 한다.
        					<table class="tbl_view" summary="1월부터 12월까지의 평균 강수량을 나타낸 표, 장마 기간이 있는 6~7월에 강수량이 가장 많고, 11월~2월 사이의 강수량이 가장 낮다.">
        						<caption>한국의 월별 강수량</caption><!-- 생략 -->
      • 테이블을 제공할 경우, 머리글<thead>, 바닥글<tfoot>, 본문<tbody>을 구분하여야 한다.
      • * 주의사항 : <thead>, <tfoot>, <tbody> 순으로 작업되어야 합니다.
        					<table class="bbs_list" summary="공지사항 리스트">
        						<thead>
        							<tr>
        								<th>번호</th>
        								<th>제목</th>
        								<th>작성일</th>
        								<th>조회수</th>
        							</tr>
        						</thead>
        						<tbody>
        							<tr>
        								<td>1</td>
        								<td>제목</td>
        								<td>2012-05-15</td>
        								<td>111</td>
        							</tr>
        						</tbody>
        					</table>
        					
        					<table>
        						<caption>3일 일기예보</caption>
        						<tbody>
        							<tr>
        								<th>오늘<br />5.15(화)</th>
        								<td><img src="p_02.gif" alt="구름 조금" /></td>
        								<td>구름 조금</td>
        							</tr>
        							<tr>
        								<th>예상기온/th>
        								<td colspan="2">최고 33도 / 최저 24도</td>
        							</tr>
        						</tobdy>
        					</table>
      • 서식을 제공할 경우 <label>을 제공해야 한다.
        * <label> 태그의 for와 <input />의 id가 동일하여야 합니다.
        * <label>이 <input>, <select> 등의 입력창과 제목을 연결시켜 문서 파악을 용이하게 합니다.
        * checkbox와 radio 경우 <label>을 이용하여 텍스트를 클릭해도 선택되게 작업할 수 있으며, 사용자들은 클릭영역이 넓어져 사용이 편리해집니다.
        					<dl>
        						<dt><label for="uid">아이디</label></dt>
        						<dd><input type="text" id="uid" title="아이디 입력" /></dd>
        					</dl>
        					<dl>
        						<dt><label for="upw">비밀번호</label></dt>
        						<dd><input type="password" id="upw" title="비밀번호 입력" /></dd>
        					</dl>
      • <form>안에 여러 컨트롤(입력 받는 서식)이 있을 떄, <fieldset>으로 그룹화 하고 <legend>로 제목을 표기합니다.
        					<fieldset>
        						<legend>로그인 </legend>
        						<dl>
        							<dt><label for="uid">아이디</label></dt>
        							<dd><input type="text" id="uid" title="아이디 입력" /></dd>
        						</dl>
        						<dl>
        							<dt><label for="upw">비밀번호</label></dt>
        							<dd><input type="password" id="upw" title="비밀번호 입력" /></dd>
        						</dl>
        					</fieldset>
      • 웹접근성을 향상하기 위해선 위 방법 말고도 많은 부분이 더 있는데요~
        그 부분들은 http://biew.co.kr/17 여기에서 참고하세요~

      마치며

      많은 분들이 웹퍼블리싱 작업을 하시면서 헷갈려 하시는 부분을 위주로 정리를 해보았습니다.
      저 또한 매번 작업을 할 때 마다 헷갈리는 부분이 많았는데요.~ 다른분들께서도 이 글을 보시고 조금이나마 도움이 되셨으면 좋겠습니다.

      반응형

      '웹접근성' 카테고리의 다른 글

      WAI-ARIA 웹퍼블리싱  (0) 2018.08.22
      웹 접근성을 고려한 콘텐츠 제작 기법 2.0  (0) 2012.01.20
      한국형 "모바일 앱 접근성 지침"  (0) 2012.01.06
      반응형
      웹퍼블리싱을 실무에서 하다보면 자바스크립트를 꼭 해야하나?
      해야 한다면 과연 어디까지 해야하나? 에 대해 많은 퍼블리셔들은 고민을 할 것입니다. 저 또한 이런 문제로 고민할 때가 많았습니다. 그 고민에 대한 결과로 퍼블리셔는 front end, 또는 UI에 관련된 부분만 작업하는 것이라고 저는 정의 내리고 있습니다.
      예를 들어 메인 페이지부분의 개발 소스가 들어가지 않는 부분을 말하는 것입니다. 비쥬얼 움직임이 그 예 입니다. 개발이 들어가는 부분에 대해서는 간단한 자바스크립트라 하더라도 하지 않는게 제 원칙입니다. 나중에 프로젝트 완료시 그부분이 제대로 작동하지 않을시 서로 책임을 떠 넘기는 식의 문제가 발생하기 때문입니다. 그래서 저는 프로젝트 시작 시 그부분에 대해 명확히 개발자 분들과 이야기 합니다. 그렇게 하다보면 대략 웹페이지 같은 경우는 20가지 정도 기능의 스크립트 예제만 있어도 어떤 홈페이지든 제작이 가능합니다.
      하지만 예제가 있더라도 소스를 읽지 못한다거나 간단한 수정을 할 수 없다면 무용 지물이겠지요? 그래서 퍼블리셔분들의 개발자만큼 스크립트를 다루지 않더라도 일하는데 지장이 되지 않을 정도의 부담없이 배울수 있는 강좌를 하려고 합니다.
      모르시는 분들을 위해 완전 기초부터 시작하겠습니다.

      페이지 내에 자바스크립트 추가하기

      <script>는 평범한 THML입니다. 그리고 HTML을 다루다 보면 웹 페이지의 <head> 부분에 다음과 같이 <script> 태그를 추가할 일이 심심치 않게 생깁니다.

      <head>
      	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      	<title>Untitled Document</title>
      	
      </head>
      

      <script> 태그의 type 속성은 포함되는 스크립트의 형식과 종류를 가리킵니다. 이 경우에 type="text/javascript"는 스크립트가 보통의 텍스트(HTML과 같은)이고, 자바스크립트로 작성되었다는 것을 의미합니다.

      외부 자바스크립트 파일

      페이지 내 <script> 태그를 사용하면 자바스크립트를 하나의 페이지에 추가할 수 있습니다. 하지만 대부분의 경우에는, 하나의 스크립트를 여러페이지에서 사용하게 될 것입니다. 예를 들어 메인 메뉴 스크립트는 한페이지가 아닌 모든 페이지에서 사용하게 될 것 입니다. 모든 페이지에 메인메뉴 스크립트를 사용하기 위해 자바스크립트 코드를 복사하고 붙인다면, 이는 효율적이지 않을 것입니다.
      또한 자바스크립트 코드 변경하거나 개선하려고 한다면 모든페이지를 다시 열어서 수정해야하는 수고를 하게 될 것입니다.
      프로그램 코드가 모든 페이지에 다 있다면 각 페이지는 덩치가 꽤 커져서 다운로드 속도를 더 늦추게 될 것입니다. 이 모든것들을 해결하기 위한 접근법으로 사용하는 것이 외부 자바스크립트 파일을 사용하는 방법입니다. 이는 .js라는 파일 확장자 텍스트 파일을 <script> 태그를 사용해 웹 페이지에 자바스크립트 코드를 포함한 파일을 링크하면 되는 것입니다.

      <head>
      	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      	<title>Untitled Document</title>
      	
      </head>
      

      웹페이지에 텍스트 쓰기

      자바스크립트를 사용해서 웹 페이지에 바로 메시지를 출력하는 방법에 대해 알아보겠습니다. 이것을 보고 너무 시시하다고 느꼇을지도 모르겠습니다. 하지만 기본을 완벽하게 이해하는 것이 중요하기 때문입니다.

      <script type="text/javascript">
      	document.write('Hello world!');
      </script>
      

      alert() 함수처럼, document.write()는 여는 괄호와 닫는 괄호 사이에 있는 문장을 출력하는 명령어 입니다. alert() 함수가 새창을 띄워 문장을 출력하는 것이라면 document.write() 는 페이지 내에서 문장을 출력 합니다.

      에러추적하기

      스크립트를 작성하면서 할 수 있는 실수는 단순한 오타부터 로직상의 복잡한 에러까지 다양합니다. 자바스크립트 프로그래밍 초보라면 실수의 대부분은 오타입니다. 세미콜론, 따옴표, 괄호 등을 빼먹거나, 자바스크립트 명령어를 잘 못 치기도 합니다.
      그러면 간단한 몇 가지 예를 들어 보겠습니다.

      실수의 종류 검사결과
      인수 목록 뒤에 닫는 괄호 ')'를 빼먹는 경우 명령어의 마지막 닫는 괄호를 깜박할 수 있습니다. 예를 들어 'hellow' 뒤에 닫는 괄호를 빠뜨려서 alert('hello';가 되는 등의 경우가 있습니다.
      종료되지 않은 문자열 문자열(string)은 따옴표로 감싼 문자들의 집합니다. 'hello'는 alert('hello')라는 코드 안에 있는 문자열입니다. 열거나 닫는 부호를 빼먹기 쉽습니다.
      복합문에서 }를 빼먹는 경우 프로그램을 작성하다 보면 괄호와 따옴표뿐만 아니라 {}기호와 같은 다른 형태의 구두 기호도 사용하게 될 것입니다. 이런 류의 오류를 만나면, 여는 괄호와 닫는 괄호의 쌍을 제대로 맞추었는지 확인해야 합니다.
      복합문에서 }XXX가 정의되지 않았습니다. 자바스크립트 명령어에 aler('hello')처럼 오타가 있는 경우, 명령어가 정의되지 않았다는 에러 메시지를 받습니다. 인터넷 익스플로러에서는 "aler는 정의되지 않았습니다." 라는 메시지가 나타납니다.
      문법상 실수 문법상 실수라는 것은 오타는 아니지만 허용되지 않는 방식으로 하나 혹은 하나 이상의 자바스크립트 문장이 섞였을 때 나타나는 에러를 통칭합니다.

      마치며

      위 예제는 '거침없이 배우는 자바스크립트' 책의 예제를 사용 하였습니다.
      처음에 어려운 것보다는 기본부터 쉽게 부담가지지 않고 접근할 수 있는 간단한 것부터 정리해 보았습니다.

      반응형
      반응형

      스마트폰 2천만명 시대인 지금은 모바일 웹사이트 코딩은 일반 웹사이트 코딩만큼 하게 되는것 같은데요. 최근 1,2년 사이 웹을 이용할 수 있는 다양한 모바일 기기가 등장하면서 미디어 쿼리를 이용해 다양한 해상도에 반응하는 웹을 구현하는 기술인 반응형 웹까지 만들어지게 되었습니다.

      모바일 코딩은 html5와 css3까지 다양하게 사용할 수 있어서 재미있는것 같습니다.

      하지만 모바일 웹사이트 코딩을 처음 접하시는 분들은 일반 웹사이트 코딩과 조금은 다른 부분 때문에 난관에 봉착할 때가 있을 것 입니다. 맑은커뮤니케이션에서 조금이나마 도움이 될 수 있기를 기대하면서 기본적인것 부터 정리 해보려구요.

      1. 화면 회전시 폰트사이즈 고정
        body {-webkit-text-size-adjust:none}
        
        페이지가 랜더링될 때 모바일 사파리는 텍스트의 크기를 자동으로 조절하는데, 이때 -webkit-text-size-adjust를 이용해 텍스트의 크기를 고정 또는 원하는 대로 조절할 수 있습니다. css의 body에 적어주면 해결됩니다.
        • auto : 화면의 폭에 맞추어서 텍스트의 크기를 자동으로 조절
        • none : 폰트사이즈 고정
        • n% : 폰트사이즈를 지정된사이즈로 변경
      2. -webkit-text-size-adjust의 3가지 속성
      3. 모바일 웹페이지를 가로크기에 맞추기
                            
                        
        
        스마트폰에서 랜더링 시켰을경우 터치를 통한 화면의 크기가 변경되지 않아야 하는데, 일반 웹사이트들은 그 크기가 pc에 맞게 제작되었기 때문에 상대적으로 작은 모바일디스플레이로는 감당하기 힘들게 됩니다. 이럴 때 위의 메타태그로 디스플레이 크기에 맞춰질 것입니다.
        • width=device-width : 플랫폼 가로 크기에 맞춤
        • initial-scale : 확대비율
        • maximum-scale : 최대확대비율
        • minimum-scale=1.0 : 최소축소비율
        • user-scalable : 사용자에 의한 화면확대 가능여부 (yes / no)
      4. 웹페이지가 브라우징된 후 주소창을 사라지게 합니다.
        window.addEventListener('load', function() {
        	setTimeout(scrollTo, 0, 0, 1);
        }, false);
        
      5. 스마트폰으로 접속시 해당 모바일 웹페이지로 자동 링크됩니다.
        var uAgent = navigator.userAgent.toLowerCase();
        var mobilePhones = new Array('iphone','ipod','android','blackberry','windows ce',
        'nokia','webos','opera mini','sonyericsson','opera mobi','iemobile');
        for(var i=0;i<mobilephones.length;i++) pre !="-1)" document.location="링크될 주소" ; < if(uagent.indexof(mobilephones[i])>
        </mobilephones.length;i++)>
      6. 페이지의 전체 백그라운드이미지를 넣을 경우, background-size를 사용합니다. 이 경우는 이미지가 늘어나거나 해도 시각적으로 무리가 없어야 할 것같습니다. 그라데이션등이 있는 bg는 늘어나면 보기 안좋더라구요~
        body {background:url(bg.png) repeat 0 0;
        background-size:100% 100%;}
        
      7. 이미지를 해상도에 맞게 조절하고 싶을 경우에는 max-width를 사용합니다.
        h1 {width:auto;} 
        h1 img {max-width:100%;}
        
      8. width값이 100%인 경우 border 값을 넣으면 가로스크롤이 생겨 버리니 조심해야겠죠.
      9. select, input등에 원치않는 그라데이션과 라운드가 처리되어 있는데, 이 form 요소의 기본속성을 초기화하는 방법입니다.
                            
        border-radius:0px 0px; /* 아이폰의 input 라운드 초기화 */
        -webkit-appearance:none; /* form 요소의 디바이스 기반 스타일 초기화 */
        
      10. html5의 form 요소의 type속성(http://biew.co.kr/18 참고)을 이용한 상황에 맞는 아이폰 자판 레이이웃을 호출할 수 있습니다. (아이폰의 경우입니다.)
                            
        
        
        html5의 새로운 input 속성인 입력값을 설명해주는 placeholder 속성도 활용할 수 있습니다. 이는 웹접근성 지침(http://biew.co.kr/17 참고)에도 표기되어있으며 웹접근성을 높일 수 있습니다.
      반응형
      반응형
      웹퍼블리싱을 학원에서 배우거나 책으로 공부할때 CSS를 기본속성 값 그대로 표현하는 법은 많이 가르치고 책에도 나와 있지만, CSS Shorthand 대해선 사용하는 방법만 나와있지 정확한 순서나 원리 원칙에 대해 나와있는 것은 보기 힘듭니다. 그래서 CSS Shorthand에 대하여 정리하고 합니다.
      CSS Shorthand, -우리말로 "줄여쓰기, 속기"- 는 스타일시트의 파일을 줄여줄 뿐만 아니라 가독성을 높여주고 수정할때에도 빠르게 할 수 있습니다.

      1. Font

      font 속성을 속기로 사용할때 선언하지 않은 값은 기본 값이됩니다. font의 기본 속성은 아래와 같습니다.

      • - font-style
      • - font-variant
      • - font-weight
      • - font-size
      • - line-height
      • - font-family

      줄여쓰지 않고 속성 적용

      .element {
      	font-style: normal;
      	font-variant: normal;
      	font-weight: normal;
      	font-size: inherit;
      	line-height: normal;
      	font-family: inherit;
      }
      

      CSS Shorthand 적용

      .element {font: normal normal normal inhert/normal inherit;}
      

      2. Background

      배경화면은 단색, 이미지등으로 적용할 수 있습니다. 속성은 아래와 같습니다.

      • - background-color
      • - background-image
      • - background-repeat
      • - background-position
      • - background-attachment

      줄여쓰지 않고 속성 적용

      .element {
      	background-color: transparent;
      	background-image: none;
      	background-repeat: repeat;
      	background-position: top left;
      	background-attachment: scroll;
      }
      

      CSS Shorthand 적용

      .element {background: transparent url(image.png) repeat top left scroll;}
      

      3. List

      목록속성은 단 3가지만 있습니다. 속성은 아래와 같습니다.

      • - list-style-type
      • - list-style-position
      • - list-image

      줄여쓰지 않고 속성 적용

      .element {
      	list-style-type: square;
      	list-style-position: inside;
      	list-style-image: url(image.png);
      }
      

      CSS Shorthand 적용

      .element {list-style: square inside url(image.png);}
      

      4. border

      Border는 상하좌우의 속성을 지닙니다. 속성은 아래와 같습니다.

      • - border-width
      • - border-top
      • - border-top-color
      • - border-top-style
      • - border-top-width
      • - border-style
      • - border-right
      • - border-right-color
      • - border-right-style
      • - border-right-width
      • - border-color
      • - border-bottom
      • - border-bottom-color
      • - border-bottom-style
      • - border-bottom-width
      • - border-left
      • - border-left-color
      • - border-left-style
      • - border-left-width

      Border 속성은 위와같이 많습니다. 하지만 많이 사용하는 것은 파란색으로 쓰여진 글자부분입니다. 위3가지 속성을 줄여서 사용하시면 되고 사용방법은 간답합니다.

      줄여쓰지 않고 속성 적용

      .element {
      	border-width: 5px;
      	border-style: dotted;
      	border-color: #000;
      }
      

      CSS Shorthand 적용

      .element {border: 5px solid #000;}
      

      5. Margin과 Padding

      Margin과 Padding은 각각 4가지 입니다. 속성은 아래와 같습니다. (padding 줄여쓰기 또한 아래와 동일합니다.)

      • - margin-top
      • - margin-right
      • - margin-bottom
      • - margin-left
      • - padding-top
      • - padding-right
      • - padding-bottom
      • - padding-left

      줄여쓰지 않고 속성 적용

      .element {
      	margin-top: 5px;
      	margin-right: 7px;
      	margin-bottom: 5px;
      	margin-left: 7px;
      }
      

      CSS Shorthand 적용 (순서는 위 > 오른쪽 > 아래 > 왼쪽 순서로 작성합니다.)

      .element {margin: 5px 7px 5px 7px;}
      

      CSS Shorthand 적용 (margin의 상하 속성이 같고, 좌우 속성이 같을경우)

      .element {margin: 5px 7px;}
      

      CSS Shorthand 적용 (margin의 상하 좌우 속성이 같을경우)

      .element {margin: 5px;}
      

      6. outline

      outline은 element 요소 주변의 구분할 때 사용합니다. 속성은 아래와 같습니다.

      • - outline-width
      • - outline-style
      • - outline-color

      줄여쓰지 않고 속성 적용

      .element {
      	outline-width: 3px;
      	outline-style: dotted;
      	outline-color: #000;
      }
      

      CSS Shorthand 적용

      .element {outline: 3px dotted #000;}
      

      7. Transition

      Transition은 CSS LEVEL3 으로 마우스 이벤트에 의한 동적인 요소를 표현하고자 할 때 주로 사용됩니다. 속성은 아래와 같습니다.

      • - transition-property
      • - transition-timing-function
      • - transition-delay

      줄여쓰지 않고 속성 적용

      transition-property: all;
      transition-duration: 3s;
      transition-timing-function: ease-in;
      transition-delay: 2s;
      
      /* 파폭 4 */
      -moz-transition-property: all;
      -moz-transition-duration: 3s;
      -moz-transition-timing-function: ease-in;
      -moz-transition-delay: 2s;
      
      /* 크롬과 사파리 */
      -webkit-transition-property: all;
      -webkit-transition-duration: 3s;
      -webkit-transition-timing-function: ease-in;
      -webkit-transition-delay: 2s;
      
      /* 오페라 */
      -o-transition-property: all;
      -o-transition-duration: 3s;
      -o-transition-timing-function: ease-in;
      -o-transition-delay: 2s;
      

      CSS Shorthand 적용

      transition: all 3s ease-in 2s;
      	
      /* 파폭 4 */
      -moz-transition: all 3s ease-in 2s;
      
      /* 크롬과 사파리 */
      -webkit-transition: all 3s ease-in 2s;
      
      /* 오페라 */
      -o-transition: all 3s ease-in 2s;
      

      마치며

      CSS 줄여쓰기는 문법적으로 강제성을 가지지는 않습니다. 그러나 작성시 시간절약과 CSS크기를 줄일 수 있습니다.
      또한 저 같은 경우는 줄여쓰기를 자주 사용하는 편입니다. 그래서 위와 같이 정리하였으니 CSS작성하실 때 많은 도움이 되었으면 합니다.

      반응형
      반응형

      2011년 10월에 출시된 iOS 5에서부터 지원하기 시작하여 재조명을 받게된 input type들에 대해 알아보겠습니다.

      본래 input을 HTML5에 추가된 type들을 정확히 써야 하는 이유는 더욱 시맨틱한 데이터 정보를 입력하기 위함이나, 그로 인해 눈으로 보이는 실질적 혜택은 모바일 디바이스에서 보이는 키패드의 변화입니다. 시맨틱 마크업이 추후 어떤식으로 우리에게 편리함을 줄 수 있을지 가늠해 볼 수 있는 좋은 예라고 할 수 있겠지요.

      (※ type="search" 같은 경우 form 엘리먼트로 쌓여있여야만 키보드 하단 다음문장 버튼 부분이 검색 버튼으로 바뀝니다.)

      HTML5에서 새로 추가된 input Type

      HTML5에서 새로 추가된 input Type
      type 데이터 형태 구현 모습 설명
      search 검색 [텍스트 필드] 검색창을 구성할 때 사용하는 input type

      url URL [텍스트 필드] url 입력 input type
      email 이메일 [텍스트 필드] email 입력 input type
      tel 전화번호 [텍스트 필드] 전화번호 입력 input type
      datetime 날짜와 시각 [텍스트 필드] 날짜와 시각 입력 input type
      date 날짜 [텍스트 필드] 날짜(년-월-일) 입력 input type
      month [텍스트 필드] 시간대 없는 년과 달 입력 input type
      week [텍스트 필드] 시간대 없는 주 입력 input type
      time 시각 [텍스트 필드] 시, 분 입력 input type
      datetime-local 날짜와 시각 [텍스트 필드] 시간대 없는 날짜와 시각 입력 input type
      number 숫자 [텍스트 필드] 숫자 값 input type
      range 범위 숫자 값이나 정확한 숫자가 필요 없는 의미상의 값 input type
      color 8bit sRGB input type

      기존 input Type

      기존 input Type
      type 데이터 형태 구현 모습 설명
      hidden 숨김 숨김 input으로 웹퍼블리싱 시 사용하지 않으며 개발단에서 추가되는 input type
      text 텍스트 [텍스트 필드] 일반 텍스트 입력 시 사용하는 input type
      password 비밀번호 [텍스트 필드] 텍스트 필드이나 무조건 영문키로 변환되며 어떤 키가 타이핑되었는지 숨겨져 나타난다.
      file 파일 첨부 파일을 첨부할 수 있도록 하는 input type
      radio 라디오 버튼 동일 name으로 묶인 여러 개체 중 단일 개체만 선택 가능하도록 하는 input type
      checkbox 체크박스 동일 name으로 묶인 여러 개체에서 여러 여체가 선택 가능하도록 하는 input type
      submit 전송 버튼 form 안에 있는 값을 전송하기 위한 input type
      image 전송 버튼 form 안에 있는 값을 전송하기 위한 이미지로 된 input type
      button 버튼 단순 모션 등 서버와 관련없는 페이지단의 처리를 위한 input type
      reset 리셋 버튼 form 안에 있는 value들을 초기화하기 위한 input type. 실수로 클릭 시 모든 값이 지워지는 불편함으로 인해 거의 사용하지 않음.

      참조

      반응형
      반응형

      웹 접근성의 목적은 장애인과 비장애인이 동등하게 접근할 수 있도록 웹 컨테츠를 제작하는데 있습니다. 한국에는 한국형 웹 컨텐츠 접근성 지침이라는 웹사이트에서 웹 컨텐츠를 제공할 경우 지켜야하는 웹 접근성 지침 표준문서가 있습니다.

      한국형 웹 컨텐츠 접근성 지침 2.0을 기준으로 웹 접근성을 고려한 콘텐츠 제작 기법 v2.0이 2011년 11월에 발표되었습니다. 맑은커뮤니케이션에서 문서에 대한 자료와 내용을 정리해 보고자 합니다.

      한국형 웹 컨텐츠 접근성 지침(KWCAG)은 W3C의 웹 컨텐츠 접근성 지침(WCAG)를 한국 실정에 맞게 알아보기 쉽게 구성한 표준문서입니다. 현재 국가표준은 한국형 웹 컨텐츠 접근성 지침 2.0 으로 구성은 크게 4가지의 원칙과 13가지의 세부 지침으로 구성되어 있고 각 세부 지침별로 사례별 기술지침이 부가적으로 포함되어 있습니다. html5를 기준으로 작성되었으며 자료 내용과 함께 내용을 확인하시면 좀 더 쉽게 이해할 수 있을거라 생각합니다.

      첫째. 인식의 용이성

      웹 사이트에서 제공하는 컨텐츠를 이용하기 위해서는 해당 컨텐츠를 정확히 인식할 수 있어야 한다.

      지침 검사항목
      텍스트 아닌 컨텐츠에는 대체 텍스트를 제공해야 한다. 텍스트 아닌 컨텐츠는 그 의미나 용도를 이해할 수 있도록 적절한 대체 텍스트 제공해야 한다.
      • 제대로 제공된 대체텍스트는 일반적인 접근이 불가능한 사용자 뿐아니라 예외적인 상황에서는 일반인들에게도 유용할 수 있다.
      1. 이미지에 대한 대체 텍스트 제공
                                          biew
                                      
      2. 버튼에 대한 대체 텍스트 제공
                                          
      3. 이미지 맵에 대한 대체 텍스트
                                                      language
                                                      
                                                          English
                                                          Korean
                                                      
                                                  
      4. CAPTCHA에 대한 대체 텍스트 제공
      CAPTCHA(의도적으로 글자 모양을 비틀어 만든 이미지)는 사용 목적상 그 내용을 대체 텍스트로 제공한다면 CAPTCHA가 의도하는 본래 목적을 달성할 수 없기 때문에 CAPTCHA에 대한 대체 텍스트는 그 용도를 알려주는 것으로 한다.
      5. 온라인 시험 등에 대한 대체 텍스트 제공
      검사, 시험을 위한 컨텐츠는 검사결과 또는 시험의 정답을 유추할 수 있는 내용을 대체 텍스트로 제공할 수 없으므로 이는 간략한 용도를 알려주는 정도로 대체 텍스트를 제공해야 한다.
                                          색맹 검사용 이미지1
                                      
                                          토플 1번 문항용 오디오
                                      
      6. QR 코드에서 URL을 대체 텍스트로 제공
                                                      애듀랭키 아이폰용 QR 코드
                                                  
      동영상, 음성등 멀티미디어 컨텐츠를 이해할 수 있도록 멀티미디어 대체 수단을 제공해야 한다. 멀티미디어 컨텐츠에는 자막, 원고 또는 수화를 제공해야 한다.
      • 멀티미디어 컨텐츠를 동등하게 인식할 수 있도록 제작하기 위해서는 자막, 원고 또는 수화를 제공해야 한다.
      • 가장 중요한 요소는 멀티미디어 컨텐츠와 동등한 내용을 제공하는 것이고 가장 바람직한 방법은 닫힌 자막(Closed caption)을 오디오와 동기화시켜 제공하는 것이다.
      • 대사 없이 영상만 제공하는 경우에는 화면 해설(텍스트, 오디오, 원고)을 제공하고, 음성만 제공하는 경우에는 자막, 원고 또는 수화를 제공해야 한다.
      1. 열린 자막 제공
      청각장애인은 시청각 컨텐츠에 포함된 대화를 청취할 수 없으므로 이를 열린자막(동영상의 오디오 트랙에 포함된 대화 및 중요한 음향 정보를 텍스트 표시된 자막)으로 시각적인 정보를 제공해야 한다.
      2. 닫힌 자막 제공
      닫힌 자막(사용자가 필요에 따라 자막을 화면에 표시하도록 제작하는 방법)은 동영상의 대화와 중요한 음향 정보를 포함해야 하며 대화나 음향 효과가 제공되지 않는 동영상은 '이 동영상은 음성을 제공하지 않음'이라는 메시지를 닫힌 자막 방식을 이용하여 수시로 제공할 필요가 있다.
      3. 수화 제공
      빠르게 변화하는 자막을 인식하기 어려운 청각장애인을 위하여 동영상의 자막을 수화로 함께 제공하고 자막으로 인하여 수화가 가리지 않도록 닫힌 자막으로 구현하여 사용자가 자막을 화면에서 삭제할 수 있어야 한다.
      컨텐츠는 명확하게 전달되어야 한다. 컨텐츠는 색에 관계없이 인식될 수 있어야 한다.
      • 컨텐츠에서 제공하는 모든 정보는 특정한 색을 구별할 수 없는 사용자나 흑백 디스플레이 사용자, 흑백 인쇄물을 보는 사용자가 색을 배제하여도 해당 컨텐츠를 인식할 수 있도록 제공해야 한다.
      1. 색을 보완하는 텍스트 제공
      명확한 지시 사항 제공 지시 사항은 모양, 크기, 위치, 방향, 색, 소리 등에 관계없이 인식될 수 있어야 한다.
      • 특정 요소를 가리키거나 지시 사항을 전달하는 컨텐츠에 한하는 것으로, 시각이나 청각 등과 같은 특정 감각에만 의존하여 제공해서는 안 되며, 다른 감각을 통해서도 지시 사항을 인식하는 데 문제가 없도록 제공해야 한다.
      • 텍스트 컨텐츠와 대체 텍스트가 제공된 텍스트 아닌 컨텐츠는 보조 기기를 통해 다른 감각으로의 전환이 가능하기 때문에 이들 컨텐츠를 음성 컨텐츠로 변환하여 제공할 필요는 없다.
      1. 시각 정보를 이용한 지시문의 보완
      색, 크기, 모양 또는 위치를 이용하여 어떤 컨트롤이나 컨텐츠를 지시하는 경우 시각장애인이 인식할 수 있도록 대체 수단을 제공해야 한다.
      2. 청각 정보를 이용한 지시문의 보완
      청각 정보를 이용하여 지시문을 제공하는 웹 컨텐츠는 청각 정보를 인식할 수 없는 사용자를 위한 대체 수단을 제공해야 한다.
      텍스트 컨텐츠와 배경 간의 명도 대비는 4.5대 1 이상이어야 한다.
      • 웹 페이지에서 보이는 핵심 텍스트 컨텐츠와 배경 간의 충분한 대비를 제공하여, 저시력자, 색각 이상자, 노인 등도 컨텐츠를 인식할 수 있도록 제공해야 한다.
      • 본문 컨텐츠에 단순한 목적으로 사용한 글자, 마우스나 키보드를 활용하여 초점(Focus)을 받았을 때 명도 대비가 커지는 컨텐츠는 예외로 한다.
      자동으로 재생되는 배경음을 사용하지 않아야 한다.
      • 웹 페이지에서 자동으로 재생되는 배경음(동영상, 음성, 음악 등)으로 인해 컨텐츠를 인식하는 데 방해받지 않아야 한다. 단, 3초 미만의 배경음은 예외로 한다.
      • 3초 이상 재생되는 배경음을 사용할 경우, 반드시 배경음을 제어할 수 있는 수단(멈춤, 일시정지, 음량조절 등)이나 배경음 제어로 이동하는 바로가기 링크를 웹 페이지의 첫 부분에 제공해야 한다.
      • 컨텐츠가 제공하는 배경음의 음량을 조절하더라도 화면 낭독프로그램의 음량에는 영향을 주지 않아야 한다.
      1. 재생 시간이 3초 미만인 배경음의 사용
      웹 페이지에 포함되어 자동적으로 재생되는 사운드 컨텐츠의 길이를 3초 미만이 되도록 구현하고, 반복적으로 재생되지 않도록 한다.
      2. 배경음을 정지 상태로 제공하는 방법
      컨텐츠에 포함된 배경음을 음소거 상태로 제공하고, 사용자 제어에 의하여 배경음을 들을 수 있도록 구현하는 방법으로 이 방법은 사용자가 화면 낭독 프로그램을 사용하는데 아무런 영향을 주지 않는다.

      둘째. 운용의 용이성

      사용자 인터페이스 구성요소는 조작 가능하고 내비게이션 할 수 있어야 한다.

      지침 검사항목
      컨텐츠는 키보드로 접근할 수 있어야 한다. 모든 기능은 키보드만으로도 사용할 수 있어야 한다.
      • 웹 페이지에서 제공하는 모든 기능은 키보드만으로도 사용할 수 있어야 한다.
      • 사용자의 반응 속도나 지속성이 중요한 요소인 붓질(Painting), 시뮬레이션 컨텐츠등과 시각적인 방법으로만 접근이 가능한 지리정보 컨텐츠, 가상현실 컨텐츠등은 예외로 할 수 있다.
      1. 키보드와 마우스 이벤트 핸들러 제공
      • - 마우스와 키보드 이벤트 핸들러를 동시에 제공하는 링크
      • - 마우스와 키보드 이벤트 핸들러를 동시에 제공하는 버튼
      2. 키보드와 마우스로 접근이 가능한 이미지 버튼
                                          
                                      
      3. 키보드와 마우스로 접근이 가능한 링크 제공
      • - 키보드 초점을 받을 때 메뉴의 색이 변화할 경우
                                                    
                                                    	공지사항
                                                    
                                                
      • - 마우스 클릭과 키보드 선택에 의하여 공통적으로 이벤트 핸들러 발생할 경우
                                                    
                                                        공지사항
                                                    
                                                
      4. 키보드만으로 입력 서식 이동이 가능하도록 제공
      자동적으로 초점이 다음 입력 상자로 이동하지 않도록 구현하거나 이동하더라도 다시 뒤로 돌아갈 수 있도록 구현되어야 한다.
      키보드에 의한 초점은 논리적으로 이동해야 하며 시각적으로 구별할 수 있어야 한다.
      • 웹 페이지에서 제공하는 모든 기능을 키보드만으로 사용하여 운용할 경우에도 초점이 논리적인 순서에 따라 이동하도록 제공해야 하며, 조작이 불가능한 상태가 되거나 갑작스러운 페이지의 전환 등이 일어나지 않아야 한다.
      • 저시력자, 지체 장애인들이 초점을 받은 컨텐츠를 시각적으로 인지할 수 있도록 시각적으로 표현하여야 한다.
      1. 컨텐츠 화면 순서와 동일한 키보드 내비게이션 순서 제공
      시각적으로 표시된 컨텐츠와 일치하지 않으면 사용자에게 혼란을 줄 수 있으므로 Tab 키를 눌러서 컨텐츠를 이동하는 순서는 시각적 레이아웃 순서와 일치해야 한다. 컨텐츠의 논리적인 이동 순서를 돕기 위해 tabindex로 제어하는 방법도 있다.
      2. 시각적으로 표시 가능한 초점 표시 방법
      키보드로 웹 페이지를 이동할 때 현재 초점이 어디에 있는지 알 수 있어야 한다. 마우스와 같은 장치를 이용하지 못하는 사람에게 키보드와 같은 순차적인 탐색 장치가 매우 중요한 도구가 되기 때문이다.
      • - CSS의 가상 클래스
                                                    a:hover,
        											a:focus { border:1px solid #ee6600; }
                                                
      • - 스크립트를 사용하여 배경색이나 경계선 변경
                                                    
        											focus me
                                                
      컨텐츠를 읽고 사용하는 데 충분한 시간을 제공해야 한다. 시간 제한이 있는 컨텐츠는 응답시간을 조절할 수 있어야 한다.
      • 웹 컨텐츠 제작 시 시간 제한이 있는 컨텐츠는 가급적 제공하지 않는 것이 바람직하며, 보안 등의 사유로 시간 제한이 반드시 필요할 경우에는 이를 회피할 수 있는 수단을 제공해야 한다.
      1. 제한 시간 연장 방법 제공
      제한 시간을 가진 기능을 제공할 때 사용자가 제한 시간을 연장할 수 있도록 해야 한다.
      2. 메타 태그를 이용한 페이지 재 이동 방법 제공
                                      	<meta http-equiv="refresh" content="0;URL='redirect.html'" />
                                          

      redirect.html 페이지로 이동합니다.

      자동으로 변경되는 컨텐츠는 움직임을 제어할 수 있어야 한다.
      • 웹 컨텐츠에서 스크롤 및 자동 갱신되는 컨텐츠를 장애인 사용자가 이용할 수 있도록 일시정지할 수 있는 방법을 제공해야 한다.
      1. 변화하는 컨텐츠를 일시정지 시키고, 일시정지 된 곳으로 부터 다시 시작할 수 있도록 제공

      2. 전체 배너를 보여줄 수 있는 방법 제공

      3. 전체 배너의 리스트 제공

      4. 사용자 요구에 의한 업데이트 방법 제공

      광과민성 발작 예방 광과민성 발작을 일으킬 수 있는 컨텐츠를 제공하지 않아야 한다. 초당 3~50회 주기로 깜빡이거나 번쩍이는 컨텐츠를 제공하지 않아야 한다.
      • 깜빡이거나 번쩍이는 컨텐츠로 인해 발작을 일으키지 않도록 초당 3~50회 주기로 깜박이거나 번쩍이는 컨텐츠를 제공하지 않아야 한다.
      1. 깜빡이는 시간이 3초 이내인 컨텐츠만 제공
      사용자의 시각적인 유인 효과를 위해서 컨텐츠의 움직임, 번쩍임, 깜빡임을 사용하는 경우 이들 움직임이 3초 이내에 자동적으로 멈출 수 있도록 제공한다.
      2. 경고 페이지 제공
      alert창을 이용하여 사용자에게 움직임, 번쩍임, 깜빡임이 있는 페이지로 이동함을 알리고 이동여부를 사용자가 결정할 수 있도록 한다.
      컨텐츠는 쉽게 내비게이션 할 수 있어야 한다. 컨텐츠의 반복되는 영역은 건너뛸 수 있어야 한다.
      • 화면 낭독 프로그램을 이용하는 사람들은 반복되는 메뉴 등을 페이지마다 다시 듣게 되는데 이런 불편을 막기 위해, 메뉴 등과 같이 페이지마다 공통되며 반복되는 영역을 사용자가 바로 건너뛰어 핵심 컨텐츠로 이동할 수 있도록 건너뛰는 방법을 제공해야 한다.
      1. 반복적인 컨텐츠 영역의 시작 부분에 건너뛰기 링크 제공
      컨텐츠 영역 건너뛰기 링크(skip navigation)를 제공하면 해당 영역을 건너뛰고 다음 영역으로 사용자 제어를 이동시킬 수 있으므로 키보드 사용자의 사용성을 높일 수 있다.
      ** 모든 페이지가 반복 영역 건너뛰기가 반드시 필요하지는 않는다.
      컨텐츠 블록마다 링크의 수가 많거나 메뉴나 링크 등의 반복되는 컨텐츠가 많은 복잡한 페이지일 경우에만 반복 영역 건너뛰기가 필요하다.
      또한 반복 영역 건너뛰기 자체도 너무 많이 제공되지 않아야 한다.
      2. 건너뛰기 링크의 화면 표시
                                      	
      									본문 바로가기
                                      
      페이지, 프레임, 컨텐츠 블록에는 적절한 제목을 제공해야 한다.
      • 페이지, 프레임, 컨텐츠 블록에 적절한 제목을 제공하여 사용자가 웹 컨텐츠를 운용하기 쉽게 도와주어야 한다.
      • 제목은 간단명료해야 하며, 해당 페이지, 프레임, 컨텐츠 블록을 유추할 수 있도록 제공해야 한다.
      1. 웹 페이지의 제목 제공
      2. 컨텐츠 블록의 제목 제공
                                      	

      김치의 종류

      • 배추김치
      • 열무김치
      3. 프레임 제목 제공
      frame 태그를 사용할 경우 해당 frame의 title 속성을 제공하여 프레임 간의 내비게이션이 용이하도록 해야 한다.
      웹 페이지를 frameset으로 구성하고 title 태그를 제공하더라도 각 frame별로 title 속성을 제공해야 한다.
      적절한 링크 텍스트 링크 텍스트는 용도나 목적을 이해할 수 있도록 제공해야 한다.
      • 링크의 용도나 목적지를 명확하게 이해할 수 있도록 링크 텍스트를 제공해야 한다.

      셋째. 이해의 용이성

      웹 사이트에서 제공하는 컨텐츠를 이해할 수 있어야 한다.

      지침 검사항목
      가독성 컨텐츠는 읽고 이해하기 쉬워야 한다. 주로 사용하는 언어를 명시해야 한다.
      1. <html> 태그에 주 사용 언어 지정
                                      	<html lang="ko">
                                      
                                      	<html lang="en">
                                      
      컨텐츠의 기능과 실행결과는 예측 가능해야 한다. 사용자 요구에 따른 실행 사용자가 의도하지 않은 기능(새 창, 초점 변화 등)은 실행되지 않아야 한다.
      • 컨트롤이나 사용자 입력은 초점을 받았을 때에 의도하지 않는 기능이 자동적으로 실행되지 않도록 컨텐츠를 개발해야 한다.
      • 사용자가 마우스로 클릭하거나 키보드를 이용하여 입력한 후 기능이 실행되어야 한다.
      • 사용자가 예측할 수 없는 상황에서 정보를 제공하지 않아야 하며, 특히 사용자가 인지하지 못한 상황에서 새 창, 팝업 창 등을 제공하지 않아야 한다.
      1. 명확한 서식 제출(submit) 버튼 제공
                                      	

      메일링 리스트에 가입하려면 이메일 주소를 넣어주십시오.

      2. 새 창 열림을 사전에 알림
                                      	뜨개질 포털 사이트 (새 창으로 열림)
                                          한국어 페이지 (새창으로 열림)
                                          도움말
                                      
      컨텐츠는 논리적으로 구성해야 한다. 컨텐츠는 논리적인 순서로 제공해야 한다.
      • 컨텐츠는 보조 기기 등을 통해서도 논리적인 순서로 이해할 수 있어야 한다.
      1. 컨텐츠를 의미 있는 순서로 배열
                                      	
      자장면
      짬뽕
      탕수육
      김치찌개
      된장찌개
      2. 스타일을 이용한 글자 간격 조절
      디자인요소에 의해 단어사이에 강제로 공백을 넣게 되면 단어의 의미가 달라지고, 화면 낭독 프로그램에서는 다르게 발음을 하게 될 수도 있으며, 페이지 내에서 해당 단어를 검색할 수 없게 되고, 검색 엔진이나 번역 엔진에서도 다른 단어로 인식하게 된다. 이 경우 CSS의 letter-spacing 속성이나 text-align 속성을 이용해 조절하면 된다.
      3. 동적으로 생성된 요소는 그것을 유발시킨 요소 바로 뒤에 위치
                                      	

      What is IMEI?

      Explanation of IMEI

      Help content here....

      Back to IMEI input field.

      위의 예제는 IMEI code에 대한 도움말이 보이는 소스 코드이다. 위와 같은 도움말 제공 방식에 대해 도움말이 IMEI Code를 입력한 다음에 나오기때문에 시각장애인들이 도움말이 있다는 사실을 알기 어렵다는 지적도 있다. 그런 경우, 도움말 링크를 <label>안에 넣어 다음과 같이 표현해도 된다.
                                      	

      표는 이해하기 쉽게 구성해야 한다.
      • 시각장애인 등도 이해할 수 있도록 표의 이해를 돕기 위한 내용 및 구조에 대한 정보를 제공해야 한다.
      1. 표 제목을 <caption>으로 제공
                                      	중간 생략
                                          
      개인별 시험 성적표
      2. 표의 구조 또는 내용에 대한 요약을 summary로 제공
                                      	중간 생략
                                          
      개인별 시험 성적표
      3. 표의 헤더 셀과 데이터 셀의 관계 정의
                                      	
      개인별 시험 성적표
      구분중간 고사기말 고사
      김철수5060
      박영희7080
      입력 도움 입력 오류를 방지하거나 정정할 수 있어야 한다. 입력 서식에는 대응하는 레이블을 제공해야 한다.
      • 시각 장애인 등이 해당 서식을 이해할 수 있도록 레이블을 제공해야 한다.
      1. 입력 서식과 <label>의 명시적 관계 제공
                                      	
                                          
                                      
                                      	
      									
                                      
      2. <label>을 제공할 수 없는 입력 서식에 title 제공
                                      	
                                          
                                          
                                      
      3. 여러 개의 유사한 입력 서식 묶기
                                      	
      집 주소
      회사 주소
      입력 오류를 정정할 수 있는 방법을 제공해야 한다.
      • 사용자의 실수로 잘못된 오류가 발생할 경우 이를 정정할 수 있는 방법을 제공해야 한다.
      1. 입력 값 또는 형식에 대한 예시 제공
      HTML5로 코딩할 경우 html5에서 제공하는 placeholder 속성을 이용해 예제를 보여주거나 다양한 웹폼을 사용하면, 복잡한 자바스크립트를 쓰지 않고 사용자의 입력 오류를 줄이는데 도움을 줄 수 있다.
                                      	






      2. 오류 메시지를 스크립트 경고창으로 제공
      제출한 값을 검사한 후 이상이 있을 때 오류가 발생한 사실을 alert창으로 보여줄 수 있다. 그리고 경고창을 확인한 후의 초점이 오류가 난 입력필드로 이동해야 사용자가 오류를 쉽게 수정할 수 있다.
      3. 중요한 서식 제출 시 재확인 절차 제공
      사용자가 최종적으로 되돌릴 수 없는 거래(온라인 시험, 금융 거래, 법적인 절차에 대한 동의, 법적인 거래 등)를 하기 전에 자신의 입력 사항이 맞는지 검토할 기회를 주어야 한다.

      넷째. 견고성

      웹 컨텐츠는 미래의 기술로도 접근할 수 있도록 견고하게 만들어야 한다.

      지침 검사항목
      웹 컨텐츠는 마크업 언어의 문법을 준수해야 한다. 마크업 언어의 요소는 열고 닫음, 중첩 관계 및 속성 선언에 오류가 없어야 한다.
      • 마크업의 문법을 최대한 준수하여 제공하고 특히 태그의 열고 닫음, 중첩 관계의 오류가 없도록 해야 한다.
      1. 여는 태그와 닫는 태그의 정확한 사용
      마크업 언어를 이용하여 마크업 문서를 구현할 때 반드시 태그의 열림과 닫힘이 일치해야 한다.
                                      	

      요소를 여는 태그의 닫음 표시가 불명확한 문단입니다.

      2. 속성 이름과 속성 값의 정확한 사용
      따옴표로 속성 값을 구분하여 제공할 경우 따옴표를 누락하게 되면 일부 정보가 무시될 수 있다.
                                      	
                                      
      속성 값에 따옴표를 사용해야 할 경우, 따옴표를 그냥 사용하면 속성 값의 종결문자로 인식하기 때문에 값으로 사용할 때 "로 사용해야 한다.
                                      	
                                      
      3. 태그의 정확한 중첩관계
      태그를 사용할 경우 중첩관계가 엇갈리지 않도록 해야 한다.
                                      	

      중첩관계가 명확해야 한다.

      4. 표준에 부합하는 태그와 속성 이름, 값 사용
      브라우저에 따라서는 표준에 명시되지 않는 태그나 속성을 허용하는 경우가 있다. 그러나 마크업 문서를 작성할 경우 반드시 표준에 명시된 태그와 속성을 사용해야 이 문서를 어떠한 브라우저와 보조기술을 이용하여 접근하더라도 정상적인 접근이 가능하게 된다.
      웹 애플리케이션은 접근성이 있어야 한다. 웹 애플리케이션 접근성 준수 컨텐츠에 포함된 웹 애플리케이션은 접근성이 있어야 한다.
      • 웹 컨텐츠에 포함된 부가 애플리케이션 또는 웹 페이지의 기능을 실행하는 데 필요한 웹 애플리케이션은 웹 페이지를 사용하거나 접근하는 것을 방해하지 않아야 한다. 웹 애플리케이션은 본 지침에서 설명한 모든 지침들을 적용하여 제작하여야 한다.
      반응형
      반응형

      맑은커뮤니케이션에서 현재까지(글 작성일 현재) Completed Work로 규격의 정의가 끝나 모든 모던 브라우저에서 실 사용이 가능한 Selectors Level 3 까지의 Selector들에 대해 정리해 보았습니다.

      이전 http://biew.co.kr/10 포스트에서와 같이 selectivizr를 이용하면 사용 가능한 Selector들이 있고, 이를 사용하면 불필요한 클래스(특히 class="last" 또는 class="first" 등) 없이 사용 가능하므로 Front-end 단 Mark up 작성자도 편하고, Server 단 개발자와의 협업도 조금 더 수월해 질 것 입니다.
      Selector는 많이 이해하고 응용력이 풍부할 수록 상상 이상의 디자인들을 심플하고 시멘틱한 마크업에 이미지 없이 입혀줄 수도 있습니다. (물론 다른 CSS3들과의 아름다운 조화가 필요합니다.)

      현재 예제로 입력된 내용들이 썩 좋다고 이야기 드릴 수 없어서 죄송할 따름입니다만, 더 적합하고 이해하기 쉬운 예제들을 건의해주신다면 업데이트 하도록 하겠습니다.

      (※ CSS3 예제들 같은 경우엔 IE를 제외한 브라우저에서 보셔야 정상적인 화면을 보실 수 있습니다. IE9도 지원은 하되 예제가 잘 안나오는 현상이 있습니다.)

      CSS3에서 새로 추가된 Seletor

      HTML5에서 새로 추가된 input Type
      Selector 지원 Browser 설명
      E[attr^=val] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성의 값이 'val'으로 시작하는 요소를 선택
      Mark up /* CSS */
      .attrStartChar::after {display:block;clear:both;content:''}
      .attrStartChar > li {float:left;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrStartChar > li[title^=Chrome] {border:3px solid purple}

      /* HTML */
      <ul class="attrStartChar">
           <li title="Internet Explorer">Internet Explorer</li>
           <li title="Firefox Browser">Firefox</li>
           <li title="Chrome Browser">Google Chrome</li>
           <li title="Safari Browser">Apple Safari</li>
      </ul>
      Result
      • Internet Explorer
      • Firefox
      • Google Chrome
      • Apple Safari
      E[attr$=val] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성의 값이 'val'으로 끝나는 요소를 선택
      Mark up /* CSS */
      .attrEndChar::after {display:block;clear:both;content:''}
      .attrEndChar > li {float:left;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrEndChar > li[title$=Browser] {border:3px solid purple}

      /* HTML */
      <ul class="attrEndChar">
           <li title="Internet Explorer">Internet Explorer</li>
           <li title="Firefox Browser">Firefox</li>
           <li title="Chrome Browser">Google Chrome</li>
           <li title="Safari Browser">Apple Safari</li>
      </ul>
      Result
      • Internet Explorer
      • Firefox
      • Google Chrome
      • Apple Safari
      E[attr*=val] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성의 값에 'val'이 포함된 요소를 선택
      Mark up /* CSS */
      .attrAllChar::after {display:block;clear:both;content:''}
      .attrAllChar > li {float:left;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrAllChar > li[title*=icon] {border:3px solid purple}

      /* HTML */
      <ul class="attrAllChar">
           <li title="icon creator">icon creator</li>
           <li title="nice graphics">nice graphics</li>
           <li title="amazing icon list">amazing icon list</li>
           <li title="greate png icons 25">greate png icons 25</li>
      </ul>
      Result
      • icon creator
      • nice graphics
      • amazing icon list
      • greate png icons 25
      E:root ie9 firefox chrome safari opera 문서의 최상위 요소(html, xml) 선택
       
      E:nth-child(n) ie9 firefox chrome safari opera 앞으로부터 지정된 순서와 일치하는 요소가 E라면 선택 (E아닌 요소의 순서가 계산에 포함됨)
      Mark up /* CSS */
      .nthC_list::after {display:block;clear:both;content:''}
      .nthC_list > li{float:left;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .nthC_list.num {float:left;margin-right:30px}
      .nthC_list.num span, .nthC_list.num p {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .nthC_list.num span:nth-child(3) {border:3px solid purple}
      .nthC_list.odd_list > li:nth-child(odd) {border:3px solid purple}
      .nthC_list.even_list > li:nth-child(even) {border:3px solid purple}
      .nthC_list.etc > li:nth-child(3n+2) {border:3px solid purple}

      /* HTML */
      <div class="nthC_list num">
           <p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p><br><p>P Element</p>
      </div>
      <div class="nthC_list num">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>

      <ul class="nthC_list odd_list">
           <li>John William Mauchly</li>
           <li>John Adam Presper Eckert Jr.</li>
           <li>John Vincent Atanasoff</li>
           <li>Clifford Edward Berry</li>
      </ul>

      <ul class="nthC_list even_list">
           <li>John William Mauchly</li>
           <li>John Adam Presper Eckert Jr.</li>
           <li>John Vincent Atanasoff</li>
           <li>Clifford Edward Berry</li>
      </ul>

      <ul class="nthC_list etc">
           <li>list1</li>
           <li>list2</li>
           <li>list3</li>
           <li>list4</li>
           <li>list5</li>
           <li>list6</li>
           <li>list7</li>
           <li>list8</li>
      </ul>
      Result
      • P Element


        Span Element

        P Element


        P Element


        P Element


        P Element


        P Element


        Span Element

        P Element


        P Element


        • John William Mauchly
        • John Adam Presper Eckert Jr.
        • John Vincent Atanasoff
        • Clifford Edward Berry
        • John William Mauchly
        • John Adam Presper Eckert Jr.
        • John Vincent Atanasoff
        • Clifford Edward Berry
        • list1
        • list2
        • list3
        • list4
        • list5
        • list6
        • list7
        • list8
      E:nth-last-child(n) ie9 firefox chrome safari opera 뒤로부터 지정된 순서와 일치하는 요소가 E라면 선택 (E아닌 요소의 순서가 계산에 포함됨)
      Mark up /* CSS */
      .nthLc_wrap {float:left;margin-right:30px}
      .nthLc_wrap > p, .nthLc_wrap > span {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .nthLc_wrap > span:nth-last-child(4) {border:3px solid purple}

      /* HTML */
      <div class="nthLc_wrap">
           <p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p><br><p>P Element</p>
      </div>
      <div class="nthLc_wrap">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>
      Result

      P Element


      Span Element

      P Element


      P Element


      P Element

      P Element


      P Element


      Span Element

      P Element


      P Element

      E:nth-of-type(n) ie9 firefox chrome safari opera E 요소 중 앞으로부터 순서가 일치하는 요소 선택 (E 요소의 순서만 계산에 포함됨)
      Mark up /* CSS */
      .nthOt_wrap span {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .nthOt_wrap span:nth-of-type(5) {border:3px solid purple}

      /* HTML */
      <div class="nthOt_wrap">
           <span>DOS</span><br><span>Windows</span><br><span>Mac OS</span><span>UNIX</span><br><span>LINUX</span>
      </div>
      Result
      DOS
      Windows
      Mac OSUNIX
      LINUX
      E:nth-last-of-type(n) ie9 firefox chrome safari opera E 요소 중 끝으로부터 순서가 일치하는 요소 선택 (E 요소의 순서만 계산에 포함됨)
      Mark up /* CSS */
      .nthLot_wrap span, .nthLot_wrap p {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .nthLot_wrap span:nth-last-of-type(1) {border:3px solid purple}

      /* HTML */
      <div class="nthLot_wrap">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>
      Result

      P Element


      P Element


      Span Element

      P Element


      P Element

      E:last-child ie9 firefox chrome safari opera 마지막에 등장하는 요소가 E라면 선택 (E 아닌 요소의 순서가 계산에 포함됨)
      Mark up /* CSS */
      .lc_wrap {float:left;margin-right:30px}
      .lc_wrap span, .lc_wrap p {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .lc_wrap span:last-child {border:3px solid purple}

      /* HTML */
      <div class="lc_wrap">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>
      <div class="lc_wrap">
           <p>P Element</p><br><p>P Element</p><br><p>P Element</p><br><p>P Element</p><br><span>Span Element</span>
      </div>
      Result

      P Element


      P Element


      Span Element

      P Element


      P Element

      P Element


      P Element


      P Element


      P Element


      Span Element
      E:first-of-type ie9 firefox chrome safari opera E 요소 중 첫 번째 E를 선택 (E 요소의 순서만 계산에 포함됨)
      Mark up /* CSS */
      .fOt_wrap {float:left;margin-right:30px}
      .fOt_wrap span, .fOt_wrap p {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .fOt_wrap p:first-of-type {border:3px solid purple}

      /* HTML */
      <div class="fOt_wrap">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>
      <div class="fOt_wrap">
           <span>Span Element</span><p>P Element</p><br><p>P Element</p><br><p>P Element</p><br><p>P Element</p>
      </div>
      Result

      P Element


      P Element


      Span Element

      P Element


      P Element

      Span Element

      P Element


      P Element


      P Element


      P Element

      E:last-of-type ie9 firefox chrome safari opera E 요소 중 마지막 E를 선택 (E 요소의 순서만 계산에 포함됨)
      Mark up /* CSS */
      .lOt_wrap {float:left;margin-right:30px}
      .lOt_wrap span, .lOt_wrap p {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .lOt_wrap span:last-of-type {border:3px solid purple}

      /* HTML */
      <div class="lOt_wrap">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>
      <div class="lOt_wrap">
           <p>P Element</p><br><p>P Element</p><br><p>P Element</p><br><p>P Element</p><br><span>Span Element</span>
      </div>
      Result

      P Element


      P Element


      Span Element

      P Element


      P Element

      P Element


      P Element


      P Element


      P Element


      Span Element
      E:only-child ie9 firefox chrome safari opera E 요소가 유일한 자식이면 선택 (E 아닌 요소가 포함되면 선택안함)
      Mark up /* CSS */
      .oc_wrap {float:left;margin-right:30px}
      .oc_wrap span, .oc_wrap p {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .oc_wrap p:only-child {border:3px solid purple}

      /* HTML */
      <div class="oc_wrap">
           <p>P Element</p><br><span>Span Element</span>
      </div>
      <div class="oc_wrap">
           <p>P Element</p>
      </div>
      Result

      P Element


      Span Element

      P Element

      E:only-of-type ie9 firefox chrome safari opera E 요소가 유일한 타입이면 선택 (E 아닌 요소가 포함되어도 선택)
      Mark up /* CSS */
      .oOt_wrap {float:left;margin-right:30px}
      .oOt_wrap span, .oOt_wrap p {display:inline-block;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .oOt_wrap p:only-of-type {border:3px solid purple}

      /* HTML */
      <div class="oOt_wrap">
           <p>P Element</p><br><span>Span Element</span>
      </div>
      <div class="oOt_wrap">
           <p>P Element</p>
      </div>
      Result

      P Element


      Span Element

      P Element

      E:empty ie9 firefox chrome safari opera 텍스트 및 공백을 포함하여 자식 요소가 없는 E를 선택
      Mark up /* CSS */
      .empty_list::after {display:block;clear:both;content:''}
      .empty_list > li {float:left;margin:5px;padding:5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .empty_list > li:empty {border:3px solid purple}

      /* HTML */
      <ul class="empty_list">
           <li>첫번째</li>
           <li></li>
           <li>세번째</li>
      </ul>
      Result
      • 첫번째
      • 세번째
      E:target ie9 firefox chrome safari opera E의 URI가 요청되면 선택 (따라서 E는 ID가 지정되어야 함)
      Mark up /* CSS */
      .targetUl::after {display:block;clear:both;content:''}
      .targetUl > li {float:left;margin-bottom:10px}
      .targetUl > li > a {display:inline-block;padding:5px 10px}
      .targetDiv {float:left;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .targetDiv:target {border:3px solid purple}

      /* HTML */
      <ul class="targetUl">
           <li><a href="#target1">#target1 go</a></li>
           <li><a href="#target2">#target2 go</a></li>
           <li><a href="#target3">#target3 go</a></li>
      </ul>
      <div id="target1" class="targetDiv">target1</div>
      <div id="target2" class="targetDiv">target2</div>
      <div id="target3" class="targetDiv">target3</div>
      Result
      target1
      target2
      target3
      E:enabled ie9 firefox chrome safari opera 사용 가능한 폼 컨트롤(input, textarea, select, button) E를 선택
      Mark up /* CSS */
      .enabled_list::after {display:block;clear:both;content:''}
      .enabled_list > li {float:left;margin:5px}
      .enabled_list > li input[type=text]:enabled {border:2px solid purple}
      .enabled_list > li input[type=checkbox]:enabled {box-shadow: 0 0 0 2px purple}
      .enabled_list > li button:enabled {border:2px solid purple;color:purple}

      /* HTML */
      <ul class="enabled_list">
           <li><input type="text" disabled="disabled" /></li>
           <li><input type="text" /></li>
           <li><input type="checkbox" disabled="disabled" /></li>
           <li><input type="checkbox" /></li>
           <li><button disabled="disabled">button</button></li>
           <li><button>button</button></li>
      </ul>
      Result
      •  
      •  
      E:disabled ie9 firefox chrome safari opera 사용 불가능한 폼 컨트롤(input, textarea, select, button) E를 선택
      Mark up /* CSS */
      .disabled_list::after {display:block;clear:both;content:''}
      .disabled_list > li {float:left;margin:5px}
      .disabled_list > li input[type=text]:disabled {border:2px solid purple}
      .disabled_list > li input[type=checkbox]:disabled {box-shadow: 0 0 0 2px purple}
      .disabled_list > li button:disabled {border:2px solid purple;color:purple}

      /* HTML */
      <ul class="disabled_list">
           <li><input type="text" disabled="disabled" /></li>
           <li><input type="text" /></li>
           <li><input type="checkbox" disabled="disabled" /></li>
           <li><input type="checkbox" /></li>
           <li><button disabled="disabled">button</button></li>
           <li><button>button</button></li>
      </ul>
      Result
      •  
      •  
      E:checked ie9 firefox chrome safari opera 선택된 폼 컨트롤(input check="checked") E를 선택
      Mark up /* CSS */
      .checked_list::after {display:block;clear:both;content:''}
      .checked_list > li {float:left;margin:5px}
      .checked_list > li input[type=checkbox]:checked {box-shadow: 0 0 0 2px purple}

      /* HTML */
      <ul class="checked_list">
           <li><input type="checkbox" /></li>
           <li><input checked="checked" type="checkbox" /></li>
      </ul>
      Result
      E:not(S) ie9 firefox chrome safari opera S가 아닌 E 요소를 선택
      Mark up /* CSS */
      .not_list::after {display:block;clear:both;content:''}
      .not_list > li {float:left;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .not_list > li:not(:nth-child(2n)) {border:3px solid purple}

      /* HTML */
      <ul class="not_list">
           <li>list1</li>
           <li>list2</li>
           <li>list3</li>
           <li>list4</li>
           <li>list5</li>
      </ul>
      Result
      • list1
      • list2
      • list3
      • list4
      • list5
      E~F ie9 firefox chrome safari opera E 요소가 앞에 존재하면 F를 선택
      Mark up /* CSS */
      .wave_warp ul {margin:7px 0 20px}
      .wave_warp ul:last-child {margin-bottom:0}
      .wave_warp ul::after {display:block;clear:both;content:''}
      .wave_warp ul > li{float:left;margin-right:15px}
      .wave_warp h3~ul {color: orangered}

      /* HTML */
      <div class="wave_warp">
           <h3>Won</h3>
           <ul>
               <li>1000 <span>원</span></li>
               <li>2000 <span>원</span></li>
               <li>500 <span>원</span></li>
               <li>100 <span>원</span></li>
           </ul>
           <h3>US Dollar</h3>
           <ul>
               <li>1 <span>달러</span></li>
               <li>2 <span>달러</span></li>
           </ul>
           <h4>US Cent</h4>
           <ul>
               <li>50 <span>센트</span></li>
               <li>10 <span>센트</span></li>
           </ul>
      </div>
      Result

      Won

      • 1000
      • 2000
      • 500
      • 100

      US Dollar

      • 1 달러
      • 2 달러

      US Cent

      • 50 센트
      • 10 센트

      CSS1 Seletor

      기존 input Type
      Selector 지원 Browser 설명
      E ie6 ie7 ie8 ie9 firefox chrome safari opera E 요소를 선택
      Mark up /* CSS */
      .e_select_wrap span {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid purple;box-sizing:border-box}

      /* HTML */
      <div class="e_select_wrap">
           <span>P Element</span>
      </div>
      Result
      P Element
      E:link ie6 ie7 ie8 ie9 firefox chrome safari opera 아직 방문한 적이 없는 hypertext의 앵커 E를 선택
      Mark up /* CSS */
      .link_wrap a:link {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}

      /* HTML */
      <div class="link_wrap">
           <a href="#">Anchor Element</a>
      </div>
      Result
      E:visited ie6 ie7 ie8 ie9 firefox chrome safari opera 이미 방문한 hypertext의 앵커 E를 선택
      Mark up /* CSS */
      .visited_wrap a:link {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .visited_wrap a:visited {border:3px solid darkcyan}

      /* HTML */
      <div class="visited_wrap">
           <a href="#">Anchor Element</a>
      </div>
      Result
      E:active ie6 ie7 ie8 ie9 firefox chrome safari opera E 요소에 마우스가 클릭되어 있거나 엔터가 눌려있는 동안 E를 선택
      Mark up /* CSS */
      .active_wrap a:link {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .active_wrap a:visited {border:3px solid darkcyan}
      .active_wrap a:active {border:3px solid goldenrod}

      /* HTML */
      <div class="active_wrap">
           <a href="#">Anchor Element</a><span>마우스를 클릭하고 있어보세요.<br>(마우스를 띄는 순간 색상이 원상복귀됩니다.)</span>
      </div>
      Result
      Anchor Element마우스를 클릭하고 있어보세요.
      (마우스를 띄는 순간 색상이 원상복귀됩니다.)
      E:hover ie6 ie7 ie8 ie9 firefox chrome safari opera E 요소에 마우스가 올라가 있는 동안 E를 선택
      Mark up /* CSS */
      .hover_wrap a:link {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .hover_wrap a:visited {border:3px solid darkcyan}
      .hover_wrap a:active {border:3px solid goldenrod}
      .hover_wrap a:hover {border:3px solid lightcoral}

      /* HTML */
      <div class="hover_wrap">
           <a href="#">Anchor Element</a><span>마우스 커서를 올려보세요.</span>
      </div>
      Result
      Anchor Element마우스 커서를 올려보세요.
      E:focus ie6 ie7 ie8 ie9 firefox chrome safari opera E 요소에 포커스가 머물러 있는 동안 E를 선택
      Mark up /* CSS */
      .focus_wrap a:link {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .focus_wrap a:visited {border:3px solid darkcyan}
      .focus_wrap a:active {border:3px solid goldenrod}
      .focus_wrap a:hover {border:3px solid lightcoral}
      .focus_wrap a:focus {border:3px solid lightcoral}

      /* HTML */
      <div class="focus_wrap">
           <a href="#">Anchor Element</a>
           <span>
               마우스로 클릭해보세요.<br>
               (마우스를 클릭하고 있지 않아도 유지되며, 다른 곳을 클릭하여 포커스가 사라지는 순간 색상이 원상복귀됩니다.)
           </span>
      </div>
      Result
      Anchor Element 마우스로 클릭해보세요.
      (마우스를 클릭하고 있지 않아도 유지되며, 다른 곳을 클릭하여 포커스가 사라지는 순간 색상이 원상복귀됩니다.)
      E::first-line ie7 ie8 ie9 firefox chrome safari opera E 요소의 첫 번째 라인을 선택(블럭요소에서만 사용가능)
      Mark up /* CSS */
      .firstLine_wrap::first-line {color:lightcoral}

      /* HTML */
      <div class="firstLine_wrap">
           오늘의 날씨는 "맑음"입니다.<br>
           즐거운 마음으로 하루를 활기차게 보냅시다.<br>
           내일도 마찬가지로 맑은 날씨가 계속될 것으로 보입니다.
      </div>
      Result
      오늘의 날씨는 "맑음"입니다.
      즐거운 마음으로 하루를 활기차게 보냅시다.
      내일도 마찬가지로 맑은 날씨가 계속될 것으로 보입니다.
      E::first-letter ie7 ie8 ie9 firefox chrome safari opera E 요소의 첫 번째 문자를 선택(블럭요소에서만 사용가능)
      Mark up /* CSS */
      .firstLetter_wrap::first-letter {color:lightcoral}

      /* HTML */
      <div class="firstLetter_wrap">
           오늘의 날씨는 "맑음"입니다.<br>
           즐거운 마음으로 하루를 활기차게 보냅시다.<br>
           내일도 마찬가지로 맑은 날씨가 계속될 것으로 보입니다.
      </div>
      Result
      오늘의 날씨는 "맑음"입니다.
      즐거운 마음으로 하루를 활기차게 보냅시다.
      내일도 마찬가지로 맑은 날씨가 계속될 것으로 보입니다.
      E.warning ie6 ie7 ie8 ie9 firefox chrome safari opera 클래스의 이름의 warning으로 지정된 E 요소 선택
      Mark up /* CSS */
      span.warning {color:lightcoral}

      /* HTML */
      <span class="warning">warning class</span>
      Result warning class
      E#myid ie6 ie7 ie8 ie9 firefox chrome safari opera 아이디의 이름이 myid로 지정된 E 요소 선택
      Mark up /* CSS */
      span#myid {color:lightcoral}

      /* HTML */
      <span id="myid">myid id</span>
      Result myid id
      E F ie6 ie7 ie8 ie9 firefox chrome safari opera E 요소의 자손인 F 요소를 선택
      Mark up /* CSS */
      .eInF span span {color:lightcoral}

      /* HTML */
      <div class="eInF">
           <span>P Element in <span>span Element</span></span>
      </div>
      Result
      P Element in span Element

      CSS2 Seletor

      기존 input Type
      Selector 지원 Browser 설명
      * ie6 ie7 ie8 ie9 firefox chrome safari opera 모든 요소를 선택
      Mark up /* CSS */
      .starSeletor_wrap * {color:lightcoral}

      /* HTML */
      <div class="starSeletor_wrap">
           <span>p Element,</span><br>
           <span>span Element,</span>
           <blockquote data-ke-style="style1">blockquote Element,</blockquote>
           <dl>
               <dt>dt Element,</dt>
               <dd>dd Element</dd>
           </dl>
      </div>
      Result
      p Element,
      span Element,
      blockquote Element,
      dt Element,
      dd Element
      E[attr] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성이 포함된 요소 E를 선택
      Mark up /* CSS */
      .attrNormal::after {display:block;clear:both;content:''}
      .attrNormal > li {float:left;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrNormal > li[title] {border:3px solid purple}

      /* HTML */
      <ul class="attrNormal">
           <li title="icon creator">icon creator</li>
           <li>nice graphics</li>
           <li>amazing icon list</li>
           <li title="greate png icons 25">greate png icons 25</li>
      </ul>
      Result
      • icon creator
      • nice graphics
      • amazing icon list
      • greate png icons 25
      E[attr=var] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성의 값이 정확하게 일치하는 'var'이 포함되는 요소를 선택
      Mark up /* CSS */
      .attrVar::after {display:block;clear:both;content:''}
      .attrVar > li {float:left;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrVar > li[title='amazing icon list'] {border:3px solid purple}

      /* HTML */
      <ul class="attrVar">
           <li title="icon creator">icon creator</li>
           <li title="nice">nice graphics</li>
           <li title="amazing icon list">amazing icon list</li>
           <li title="greate png icons 25">greate png icons 25</li>
      </ul>
      Result
      • icon creator
      • nice graphics
      • amazing icon list
      • greate png icons 25
      E[attr~=var] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성의 값에 공백으로 분리된 값이 일치하는 'var'이 포함되는 요소를 선택
      Mark up /* CSS */
      .attrWaveChar::after {display:block;clear:both;content:''}
      .attrWaveChar > li {float:left;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrWaveChar > li[title~=icon] {border:3px solid purple}

      /* HTML */
      <ul class="attrWaveChar">
           <li title="icon creator">icon creator</li>
           <li title="nice graphics">nice graphics</li>
           <li title="amazing icon list">amazing icon list</li>
           <li title="greate png icons 25">greate png icons 25</li>
      </ul>
      Result
      • icon creator
      • nice graphics
      • amazing icon list
      • greate png icons 25
      E[attr|=var] ie7 ie8 ie9 firefox chrome safari opera 'attr' 속성의 값이 'val' 또는 'val-'으로 시작되는 요소 E를 선택
      Mark up /* CSS */
      .attrDashChar::after {display:block;clear:both;content:''}
      .attrDashChar > li {float:left;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .attrDashChar > li[id|=icon] {border:3px solid purple}

      /* HTML */
      <ul class="attrDashChar">
           <li id="icon-1">icon num1</li>
           <li id="icon-2">icon num2</li>
           <li id="icon-3">icon num3</li>
           <li id="icon-4">icon num4</li>
           <li id="icon-5">icon num5</li>
      </ul>
      Result
      • icon num1
      • icon num2
      • icon num3
      • icon num4
      • icon num5
      E:first-child ie7 ie8 ie9 firefox chrome safari opera 처음에 등장하는 요소가 E라면 선택 (E 아닌 요소의 순서가 계산에 포함됨)
      Mark up /* CSS */
      .fc_wrap {float:left;margin-right:30px}
      .fc_wrap > p, .fc_wrap > span {display:inline-block;margin:5px;padding: 5px 10px;border:3px solid #ddd;box-sizing:border-box}
      .fc_wrap > span:first-child {border:3px solid purple}

      /* HTML */
      <div class="fc_wrap">
           <p>P Element</p><br><p>P Element</p><br><span>Span Element</span><p>P Element</p><br><p>P Element</p>
      </div>
      <div class="fc_wrap">
           <span>Span Element</span><p>P Element</p><br><p>P Element</p><br><p>P Element</p><br><p>P Element</p>
      </div>
      Result

      P Element


      P Element


      Span Element

      P Element


      P Element

      Span Element

      P Element


      P Element


      P Element


      P Element

      E:lang(en) ie8 ie9 firefox chrome safari opera HTML lang 속성의 값이 'en'으로 지정된 요소를 선택
      Mark up /* CSS */
      .lang_wrap span{font-weight:bold}
      .lang_wrap ul{margin-top:7px}
      .lang_wrap ul > li {margin:2px 0}
      .lang_wrap ul > li:lang(en) {color:lightcoral}

      /* HTML */
      <div class="lang_wrap">
           <span>"안녕"의 다른 나라 말들</span><br>
           <ul>
               <li lang="en">Hello</li>
               <li lang="de">Hallo</li>
               <li lang="it">Ciao</li>
               <li lang="pt">oi</li>
           </ul>
      </div>
      Result
      "안녕"의 다른 나라 말들
      • Hello
      • Hallo
      • Ciao
      • oi
      E::before ie8 ie9 firefox chrome safari opera E 요소의 시작 지점에 생성된 요소를 선택
      Mark up /* CSS */
      .before_list > li {position:relative;margin:5px 0;padding-left:12px}
      .before_list > li::before {display:block;position:absolute;top:50%;left:0;width:4px;height:4px;background-color:lightcoral;transform:translateY(-50%);content:''}

      /* HTML */
      <ul class="before_list">
           <li>iPhone</li>
           <li>Mac mini</li>
           <li>Macbook air</li>
           <li>iPad</li>
      </ul>
      Result
      • iPhone
      • Mac mini
      • Macbook air
      • iPad
      E::after ie8 ie9 firefox chrome safari opera E 요소의 끝 지점에 생성된 요소를 선택
      Mark up /* CSS */
      .after_list::after {display:block;clear:both;content:''}
      .after_list > li {float:left;position:relative;margin:5px 0;padding:0 10px}
      .after_list > li::after {display:block;position:absolute;top:50%;right:0;width:1px;height:12px;background-color:lightcoral;transform:translateY(-50%);content:''}
      .after_list > li:last-child::after {display:none}

      /* HTML */
      <ul class="after_list">
           <li>500</li>
           <li>800</li>
           <li>1000</li>
           <li>5000</li>
      </ul>
      Result
      • 500
      • 800
      • 1000
      • 5000
      E>F ie7 ie8 ie9 firefox chrome safari opera E 요소의 자식인 F 요소를 선택
      Mark up /* CSS */
      .gt_list li {margin-left:10px}
      .gt_list > li > ul > li {color:lightcoral}

      /* HTML */
      <ul class="gt_list">
           <li>리스트 내용
               <ul>
                   <li>리스트 내 리스트
                       <ul>
                           <li>그 안의 또 리스트</li>
                           <li>그 안의 또 리스트</li>
                       </ul>
                   </li>
                   <li>리스트 내 리스트</li>
                   <li>리스트 내 리스트</li>
               </ul>
           </li>
           <li>리스트 내용</li>
           <li>리스트 내용</li>
      </ul>
      Result
      • 리스트 내용
        • 리스트 내 리스트
          • 그 안의 또 리스트
          • 그 안의 또 리스트
        • 리스트 내 리스트
        • 리스트 내 리스트
      • 리스트 내용
      • 리스트 내용
      E+F ie7 ie8 ie9 firefox chrome safari opera E 요소 바로 다음에 오는 F 형제 요소를 선택
      Mark up /* CSS */
      .plus_wrap h4 {margin-bottom:7px}
      .plus_wrap h4 + span {color:lightcoral}

      /* HTML */
      <div class="plus_wrap">
           <h4>Apple iPhone</h4>
           <span>It's the most amazing iPhone yet.</span><br>
           <span>Copyright © 2012 Apple Inc. All rights reserved.</span>
      </div>
      Result

      Apple iPhone

      It's the most amazing iPhone yet.
      Copyright © 2012 Apple Inc. All rights reserved.
      반응형
      반응형
      HTML5 이전에는 드래그앤드롭 기능을 사용하기 위해선 복잡한 스크립트 작업을 해야 했습니다.
      그러나 HTML5에서 새로이 추가된 확장태그 중에 draggable 속성이 있는데 이 속성을 활용하면 쉽게 드래그앤드롭 기능을 사용할 수 있습니다.
      draggable 속성중에는 ture, false, auto 3가지 값을 가지고 있으며, 사용방법은 아래와 같습니다.

      HTML5에 추가된 드래그앤드롭 관련 이벤트

      이벤트 이름 이벤트 설명
      ondragstart 드래그가 시잘될 때 발생하는 이벤트
      ondrag 요소가 드래그 중일 때. 드래그 중 마우스를 떼지 않았을때 발생하는 이벤트
      ondragend 드래그가 끝날 때. 드래그를 하고 마우스를 뗄 때 발생하는 이벤트
      ondragenter 정확히 드롭을 목표한 공간에 마우스를 떼어 드래그를 끝낼때 발생하는 이벤트
      ondragleave 드롭을 목표로한 공간에서 요소를 꺼낼때 발생하는 이벤트
      ondragover 드롭을 목표로한 공간을 드래그한 상태로 요소가 지나갈 때 발생하는 이벤트
      ondrop 드롭이 될 때 발생하는 이벤트

      dataTransfer 전송 타입

      드래그앤드롭으로 이동을 시킬때에는 서로 데이터를 주고 받아야 합니다. 이때 사용되는 것이 'dataTransfer' 오브젝트 입니다.
      사용방법은 아래와 같습니다.
      event.dataTransfer.전송타입('데이터타입');

      Type 이벤트 설명
      dataTransfer.setData(type, data)
      • - key/value 쌍으로 MIME 타입과 데이터 저장(여러 세트 저장 가능)
      • - Draggable의 dragstart 이벤트에서 Draggable의 정보를 저장하기 위해 사용
      • - 브라우저의 기본 드래그 요소나 외부 애플리케이션의 드래그 요소는 자동으로 여러 세트의 MIME 타입이 지정됨
      dataTransfer.getData(type)
      • - 지정한 MIME 타입의 데이터 반환
      • - droppable의 drop 이벤트에서 draggable의 정보를 꺼내기 위해 사용

      드래그앤드롭 실습예제

      여러나라의 음식이미지를 이미지를 각 화면에 맞게 분류하는 예재룰 만들어야 합니다.
      그럼 먼저 HTML 마크업을 해야 합니다. 마크업은 아래와 같이 하면 됩니다.

      CSS

      div {width:320px; height:320px; text-align:center; border:1px solid #000; padding:5px; margin:20px;}
      img {width:75px; height:60px; padding:5px;}
      h2 {font-size:.8em; color:#000; font-weight:bold;}
      .fl {float:left;}
      

      HTML

      한국음식

      중국음식

      서양음식

      일단 위와같이 4개의 각각 드래그앤드롭될 div 박스를 만든 후 이미지 드래그를 시작하자마자 'drop' 함수를 자바스크립트에서 호출할 것입니다.
      또한 드래그앤드롭되는 동안 발생하는 문제를 막기위해 'ondragenter', 'ondragover' 를 'false' 시켰습니다.
      또한 각 이미지에는 드래그를 시작하자마자 이벤트가 발생해야 하므로 'ondragstart' 이벤트 핸들러를 사용 하였습니다.

      자바스크립트

      function drag(target, food) {		//드래그 시작시 호출 할 함수
      	food.dataTransfer.setData('Text', target.id);
      };
      function drop(target, food) {		//드롭시 호출 할 함수
      	var id = food.dataTransfer.getData('Text');
      	target.appendChild(document.getElementById(id));
      	food.preventDefault();	
      };
      

      drag 함수에서는 'food.dataTransfer.setData'를 이용하여 아미지 정보를 셋팅하였고, 'food.dataTransfer.getData'를 이용하여 드래그 되고 이는 정보를 가져왔습니다.
      그리고 'food.preventDefault()'를 사용하여 이벤트를 종료하였습니다.

      위 예제를 응용한다면 장바구니 담기 등 여러방면에서 응용하여 사용이 가능할 것입니다.
      위 예제를 첨부하오니 학습하는데 도움이 되었으면 합니다.

      html5 드래그앤드롭.zip
      다운로드
      반응형
      반응형

      마이크로소프트는 15일(현지시간) 블로그를 통해 2012년 1월부터 윈도우XP, 윈도우 Vista, 윈도우 7 운영체제의 구형 브라우저에 대해 자동 업그레이드 시작한다고 발표했다.

      웹 브라우저 자동 업그레이드는 Windows Update를 통해 이루어지며 윈도우 XP에서 IE6,7을 사용하는 PC는 IE8로 업그레이드 되며 Vista, 7 운영체제에서는 IE9로 업그레이드 된다.

      웹 브라우저 자동 업그레이드시 사용자에게 별도로 알려주지 않고 업그레이드가 진행된다.

      자동 업그레이드를 원치 않는 사용자는 MS에서 제공하는 별도의 자동 업그레이드 차단 프로그램을 설치하면 된다.

      자동 업그레이드 서비스는 2012년 1월부터 호주, 브라질을 시작으로 다른나라로 점차 서비스를 확대할 예정이다.

      올해로 10돌을 맞은 IE6 브라우저는 지난 10년간 업그레이드된 웹 표준기술을 반영하지 않아 호환성이 떨어지며 보안에 취약해 악성코드 감염경로로 악용되고 있고 분산서비스 거부(DDoS) 공격의 주요 경로로 활용되는 등 치명적인 결함을 안고 있다.

      해외 구글, 페이스북, 아마존, 유튜브등 주요 사이트들은 IE6 지원을 중단한 상태며 국내에서는 지난 7월 정부, MS, 포털 3사등이 손잡고 IE6 퇴출 캠패인을 벌이기도 했다.

      한편, 11월 30일 기준으로 국내 웹 브라우저 점유율에서 IE6가 차지하는 비율은 8.9%로 중국(27.9%)다음으로 가장 많은 사용자들이 IE6을 사용하고 있는 실정이다. - 케이벤치 (www.kbench.com)

      국내 최대 IT/디지털 미디어 케이벤치 www.kbench.com

      반응형
      반응형

      요즈음 맑은커뮤니케이션에서 프로젝트를 하다보면, 고객사들은 스마트폰을 활용한 앱웹에 관심이 많습니다.
      그리고 일반사람들은 어플리케이션이고, 앱이라고 하면 대부분 통용이 됩니다. 하지만 그 안을 들여다보면 좀더 복잡한 내용을 접할 수 있습니다. 이것은 작업방식에 따라 네이티브앱, 모바일웹, 하이브리드앱으로 구분이 됩니다. 하지만 이 세가지에 대한 기본지식이 없는 경우가 허다합니다. 또한 실무자들도 모르는 경우가 많습니다. 프로젝트 진행을 위해서는 이 세가지 방법중에 한가지를 정하고 프로젝트를 진행해야 하는데 이 세가지를 잘 알지 못한다면 기획단계부터 프로젝트는 엉망이 될 것입니다. 그래서 이 세가지에 대한 개념을 설명 하고자 합니다.

      네이티브 앱

      iOS의 개발 언어인 Object-C 또는 안드로이드는 Java를 이용한 이클립스에서 작성된 특정 플랫폼에서만 작동되는 앱을 말합니다.
      네이티브 앱의 장점으로는 특정 플랫폼에 함께 탑재되어 있는 다른 어플리케이션과의 인터페이스나 API의 사용이 가능하여 어플리케이션 간의 확장성이 용이하고 UI 구성요소가 대부분 패키지화 또는 라이브러리 형식으로 기본 제공되기 때문에 빠른 로딩 속도가 장점입니다.
      단점으로는 특정 플랫폼에서만 작동되기 때문에 제한적인 환경을 가지고 있고, 업데이트는 앱스토어를 통해서 받기 때문에 앱스토어를 열기 전까지는 업데이트를 할 수 없는 것이 단점입니다. 또한 안드로이드의 경우는 회사마다 device의 환경이 다르기 때문에 개발의 어려움이 많습니다.

      모바일 웹

      웹페이지를 작업할 때 사용하는 HTML5, CSS, JavaScript 등을 활용하여 작성된 브라우저에서 동작되는 화면을 말합니다. 따라서 브라우저의 환경적인 특성을 제외하고는 대부분 모든 브라우저에서 볼 수 있는 장점이 있습니다. 개발 시 화면 체크를 바로바로 확인할 수 있고, 바로 변경 및 수정이 가능하기 때문에 즉각적인 대응이 가능한 장점이 있습니다. 그리고, 기존의 웹 개발방식과 동일하기 때문에 개발 비용을 절감할 수 있는 장점도 가지고 있습니다. 단점은, 모바일에서 사용되는 API의 활용이 불가능하다는 것과 UI의 구성요소를 실시간으로 로딩하므로, 처리속도가 느리다는 점과 인터넷이나 WiFi의 연결 상태에 따라 영향을 받는다는 단점이 있습니다.

      하이브리드 앱

      하이브리드 앱의 경우에는 용어의 정의가 모호한 부분이 있지만, 대체적으로 모바일 앱과 유사한 점이 있습니다.
      네이티브 앱과 동일한 환경을 가지고 있지만, 부분적으로 HTML, CSS로 작성된 앱을 말합니다. 인터넷 환경과 WiFi 환경에 따른 영향에도 유연하고, 모바일 앱보다는 빠른 로딩 속도와 스마트폰에서 바로 실행이 가능하다는 장점이 있습니다. 네이티브 앱의 개발보다 하이브리드 앱의 개발 비용이 상대적으로 절감할 수 있는 개발 형태라고 볼 수 있습니다.
      단점으로는 네이티브 앱과 마찮가지로 앱스토어를 통해서 업데이트 및 업그레이드를 해야 하는 단점이 있습니다.
      하이브리드 앱의 개발이 네이티브 앱과 모바일앱의 장, 단점을 적절히 활용하여 개발할 수 있는 형태라고 볼 수 있습니다.

      현재 개발 추세는 하이브리드 앱의 개발이라 할 수 있습니다.
      화면 안에서의 네비게이션 시스템이나, 중요한 Key 역활을 하는 부분을 제외하고 일반적인 정보를 대부분 모바일 웹으로 개발하는게 전반적인 내용에서 볼 때 단점보다는 장점이 많다는데 있습니다.
      Cross Flatform이나 web 서비스 매쉬업을 지원하는 유일한 대안이라고 볼 수 있고, 모바일 웹에 있어서 절대적인 지원을 받고 있는 HTML5가 있기 때문에 가능한 것 입니다.
      전반적인 개발 비용을 절감할 수 있고, 개발 인력의 수급, 개발 기간, 확장성을 고려할 수 있다는 점 역시 간과할 수 없는 부분이기도 합니다.

      자료 : http://kimdirector.tistory.com/

      반응형
      반응형

      드림위버는 많은 이지웍 기능으로 간편하게 코딩 할 수 있는 웹퍼블리싱 편집툴 입니다.
      하드코딩이 어느정도 가능하신 분이시다면 그효과를 120% 발휘할 수 있습니다. 그리고 단축키를 숙지하신다면 더 많은 효과를 보실 수 있을 거라 생각합니다.
      그래서 자주 사용할 수 있는 단축키에 대해 정리해 보았습니다.

      편집(Edit)관련 단축키

      • Ctrl+Z : 실행취소
      • Ctrl+Y : 다시실행
      • Ctrl+X : 잘라내기
      • Ctrl+C : 복사하기
      • Ctrl+V : 붙여넣기
      • Ctrl+Shift+C : HTML 복사(디자인 뷰에서 선택한 영역을 HTML코드로 복사)
      • Ctrl+Shift+V : HTML 붙여넣기(외부에서 복사된 코드를 디자인 뷰에 붙여넣기)
      • Ctrl+A : 모두선택
      • Ctrl+[ : 부모 태그 선택
      • Ctrl+] : 자식 태그 선택
      • Ctrl+F : 찾기와 바꾸기
      • Ctrl+Space : 코드힌트 보기(코드 뷰 > 태그 요소 or 속성 선택 시)
      • Ctrl + J : Page Properties 대화상자
      • Ctrl+U : 환경설정

      삽입(Insert)관련 단축키

      • Ctrl+Alt+I : 이미지 파일 삽입(gif, jpg, png)
      • Ctrl+Alt+F : 플래시 파일 삽입(swf)
      • Ctrl+Alt+D : Shockwave 파일 삽입
      • Ctrl+Alt+T : 표 삽입
      • Ctrl+Alt+A : 지정된 앵커(내부문서 링크 시 앵커 삽입)
      • h1~h6 : Ctrl+1 ~ Ctrl+6
      • p : Ctrl+Shift+P
      • strong : Ctrl+B
      • em : Ctrl+I
      • Ctrl+Shif+Space : 빈 공백 만들기

      탭(Tab)관련 단축키

      • 열린 탭간 이동 : Ctrl+Tab
      반응형
      반응형

      html5가 발표되면서 새로 추가된 태그들이 발표가 되었습니다.

      맑은커뮤니케이션에서는 이번에 html5에서 새롭게 추가된 태그들을 정리해볼까 합니다.

      새로운 태그 중 저는 <audio>, <video> 태그가 눈에 띄는데요.

      이전버전에는 오디오나 비디오의 표준안이 존재하지 않았었습니다. 그래서 윈도우 미디어 플레이어나 ActiveX기반의 기술을 사용하는 방법 혹은 Silverlight나 Flash와 같은 기술이 발전해왔습니다.

      html5에서 태그를 정의해 줌으로써 별도의 플러그인 없이 재생이 가능해 짐으로써 좀더 가벼워짐을 느낄 수 있을 것입니다.

      지금부터 새롭게 추가된 아이들을 알아볼께요~

      audio

      음악이나 다른 오디오 스트림과 같은 소리를 들려줍니다.

      속성

      속성 설명
      src 미디어 주소 제공
      autoplay 미디어 자동 재생
      loop 미디어 반복 재생
      controls 사용자 에이전트가 제공하는 기본 컨트롤러를 사용
      
      

      canvas

      스크립트를 제공하여 그래프, 게임 그래픽, 기타 비주얼 이미지를 그릴 수 있습니다.

      • - 좌표 공간에서의 크기를 조절하는 두가지 속성은 유효한 양의 정수값이어야 합니다.
      • - canvas 요소에 동적인 작업을 하려면 스크립트 언어를 사용해야 합니다.

      속성

      속성 설명
      width canvas의 너비 지정
      height canvas의 높이 지정
       
      
      

      command

      사용자가 실행할 수 있는 명령을 나타냅니다.

      속성

      속성 설명
      type 명령의 종류를 정의, radio, checkbox, command를 지정하며 기본값은 command
      label command의 이름을 지정하며 값으로 빈 문자열을 쓸 수 없음
      title 사용자에게 설명이나 힌트 제공
      icon command 요소에 보일 아이콘 지정
      disabled 사용 불가능함을 나타냄
      checked type 속성이 checkbox나 radio일 때 checked 속성을 선언하면 선택된 상태로 나타남
      radiogroup type 속성이 radio 일 때 토글된 커맨드의 이름을 지정할 수있는 속성
      
      	Save
      
      

      datalist

      input 요소에 대한 미리 정의된 옵션 집합을 나타냅니다.

      • - input 요소에 "자동완성"기능을 제공하는데 사용됩니다. 사용자는 입력 데이터로 미리내용은 미리 정의된 옵션.
      • - option 요소를 포함할 수 있습니다.
      • - input 요소에 묶여 있습니다.

      details

      사용자가 보거나 숨길 수 있는 추가정보를 지정하고 열고 닫을 수 있는 대화형 도구를 만드는데 사용합니다.

      • - summary 요소는 제목을 지정하며 세부 정보보기와 숨기기 클릭이 가능합니다.

      속성

      속성 설명
      open 세부 사항을 노출
      이미지 추가 정보
      • 만든 날짜: ‎2011‎년 ‎8‎월 ‎2‎일 ‎화요일, ‏‎오후 6:16:41
      • 크기: 11.9KB (12,236 바이트)
      • 위치: D:\Downloads

      embed

      HTML이 아닌 외부 애플리케이션이나 대화형 컨텐츠를 포함할 때 사용합니다.

      속성

      속성 설명
      src 포함하고자 하는 외부 자원의 주소 지정
      type 인스턴스화 할 플러그인의 유효한 MIME 타입 지정
      width 요소의 너비 정의
      height 요소의 높이 정의
             	
      
      

      figcaption

      부모 요소인 figure 요소의 캡션이나 제목을 정의합니다.

      biew
      biew logo

      figure

      일러스트레이션, 도표, 사진, 코드 등과 자체 포함된 내용을 지정합니다. 이 요소는 보통 문서의 흐름에서 단일 요소로 참조되어 제거되더라도 문서의 주된 흐름에 영향을 미치지 않습니다.

      biew

      hgroup

      섹션의 제목을 나타냅니다. 부제목이나 태그영역 h1 ~ h6 요소들을 그룹짓기 위해 사용합니다.

      Welcome to biew

      web standardization group

      keygen

      keygen 요소는 암호화를 위한 개인키와 공개키 쌍을 만들어냅니다.

      • - 폼 관련 요소에 속합니다.
      • - 스크립트에서 form.elements와 fieldset.elements로 호출할 수 있습니다. (여기에서 form, fieldset은 해당 요소의 name 속성값)
      • - 레이블을 붙일 수 있습니다.
      • - 폼을 전송할 때 함께 전송됩니다.

      속성

      속성 설명
      autofocus 페이지를 로드할 때 요소가 자동으로 포커스를 받음
      challenge 값과 함께 전달되는 문자열
      disabled 값을 제출하지 않음
      form 명시적으로 폼 소유자를 지정
      keytype 키의 유형을 정의
      name 폼 제출 시에 사용되는 폼 컨트롤의 이름을 나타냄

      mark

      문서 내에서 다른 문맥과의 관련성을 표시하기 위해 참조 목적으로 마킹, 혹은 하이라이팅 한 텍스트 집합을 나타냅니다.

      • - 인용구의 특정한 부분으로 주의를 환기시키기 위해 mark 요소를 사용합니다.
      • - "구문 강조"와는 다른 의미로 구문 강조에 쓰기엔 span 요소가 좀 더 적절합니다.
      • - 원래는 강조되지 않았었던 텍스트를 인용문 일부에서 mark 요소로 하이라이트할 경우 일반적인 표현 관습대로 인용문 내의 mark 요소를 이탤릭체로 표시할 수 있습니다.
      • - 텍스트에서 "중요성"(strong)을 나타내는 것과 "연관성"(mark)을 나타내는 것의 차이가 있습니다. 문장과 관련이 없으니 중요한 부분을 나타내고자 할때는 mark 요소보다는 strong 요소를 사용하는 것이 더 적합합니다.

      요즘 우리 집을 찾아 오는

      고양이

      가 있는데 너무 귀엽습니다. 내 생각엔 우리 집 정원이 맘에 드는 것 같아요! 나도

      고양이

      를 분양 받아 키워볼까 하는 생각이 듭니다.

      meter

      알려진 범위 내에서의 스칼라 측정 또는 분포 비율을 나타냅니다.

      속성 설명
      value 게이지에 표시하는 측정 값
      min 범위의 최소 값
      max 범위의 최대 값
      low '낮음' 범위의 값
      high '높음' 범위의 값
      optimum '최적' 범위의 값
      form 명시적으로 폼 소유자 정의
      내 컴퓨터 D 드라이브 사용량 : 300GB
      

      output

      계산의 결과를 나타냅니다.

      속성 설명
      for 계산의 결과와 계산에 사용되었거나 계산에 영향을 미친 값을 나타내는 요소를 명시적으로 연결
      form 폼 소유자와 요소를 명시적으로 연결
      name 폼 제출시에 사용되는 폼 컨트롤의 이름

      상품 가격: 10,000원

      progress

      작업의 진행 상황을 나타냅니다.

      속성 설명
      value 진행된 작업의 값
      max 최대 작업양
      form 명시적으로 폼 소유자 정의

      프로그램 설치 진행:

      0%
      

      rp

      루비 주석을 지원하지 않는 사용자에게 루비 텍스트를 괄호로 둘러싸서 표현하기 위해 사용됩니다.

      ()()()
      

      rt

      루비 텍스트의 루비 주석을 나타냅니다.

      ()()()
      

      ruby

      루비 주석을 정의합니다. 루비 주석은 텍스트 주변(보통 위에)에 나타나는 텍스트로 주로 동아시아권 언어에서 발음이나 주석으로 사용됩니다.

             	
      
      	韓國(한국)
      
      

      source

      video 요소 및 audio 요소와 같은 미디어 요소에서 사용할 수 있는 대체 미디어 자원을 정의합니다.

      속성 설명
      src 미디어 자원 주소 정의
      type 사용할 수 있는 타입의 자원인지 확인
      media 사용할 수 있는 미디어 자원인지 확인
      
      

      track

      video 요소 및 audio 요소와 같은 미디어 요소에 대한 텍스트 트랙을 지정합니다. 이 요소는 자막파일이나 텍스트를 포함하는 다른 파일을 자정하는데 사용됩니다.

      속성 설명
      kind 텍스트 트랙의 종류 정의
      src 텍스트 트랙 데이터의 주소 정의
      srclang 텍스트 트랙 데이터의 언어 정의
      label 사용자가 읽을 수 있는 트랙 제목 정의
      default 기본 트랙 정의
      
      

      video

      비디오나 영화를 재생하는데 사용됩니다.

      • - src 속성이 있으면 track 요소를 자식 요소로 포함할 수 있습니다.
      • - src 속성이 없으면 source 요소와 track 요소를 자식 요소로 포함할 수 있습니다.
      • - video 요소, audio 요소와 같은 미디어 요소는 자식 요소로 포함할 수 없습니다.
      • - video 요소를 지원하지 않는 오래된 웹 브라우저에서 구형 비디오 플러그인을 시도하거나 사용자가 비디오 컨텐츠에 접근할 수 있는 방법을 제시하는 텍스트를 보여줄 수 있도록 요소 내부에 컨텐츠를 제공할 수 있습니다.
      속성 설명
      src 미디어 자원의 주소를 제공
      poster 비디오를 사용할 수 없을때 보여줄 이미지
      preload none, metadata, auto 키워드를 지정하여 미디어의 다운로드 상태 결정
      autoplay 미디어를 자동 재생
      loop 미디어를 반복 재생
      audio 오디오 채널을 제어
      controls 사용자 에이전트가 제공하는 기본 콘트롤러를 사용
      width 미디어의 가로 크기를 정의
      height 미디어의 세로 크기를 정의
      반응형

      + Recent posts