반응형

 

 

AOS

Animate On Scroll Library

 

프로젝트에서 퍼블리싱 작업 중 세로로 긴 콘텐츠의 메인 또는 서브페이지를 코딩하다 보면,

고객사의 요청에 의해 스크롤되었을 때 콘텐츠 요소의 애니메이션 효과를 퍼블리싱해야 할 경우가 있습니다.

그럴 경우  AOS 또는 ScrollMagic 라이브러리를 사용하면 쉽게 스크롤 애니메이션 효과를 구현할 수 있습니다.

두 가지 모두 사용하기 쉽고, 좋은 스크롤  애니메이션 라이브러리입니다.

저는 이 두 가지 라이브러리를 프로젝트 상황에 따라 사용합니다.

ScrollMagic 라이브러리의 경우 GSAP TweenMax를 알아야 사용하기 편리합니다.

또한 자바스크립트와  jQuery를 알아야 합니다.

애니메이션 효과나 제어를 직접 해야 하기 때문에 시간 소요가 더 많이 됩니다.

그렇기에 AOS 라이브러리보다 애니메이션(속도, 시작 위치, 곡선 등)을 자유롭게 구현할 수 있습니다.

그러나 프로젝트의 시간이 촉박할 경우, ScrollMagic 라이브러리로 퍼블리싱하다 보면 야근이 눈에 훤하죠?

그럴 경우 AOS 라이브러리를 사용하면 쉽게 스크롤 애니메이션을 코딩할 수 있습니다.

AOS 라이브러리는 자바스크립트를 몰라도 쉽게 사용할 수 있습니다.

 또한 많은 효과를 제공하기 때문에 ScrollMagic 라이브러리에 뒤떨어지지 않습니다.

'시간 투자 대비 가성비는 모든 스크롤 애니메이션 라이브러리 중 최고'라고 생각됩니다.

제가 왜 두 가지 라이브러리를 상황에 따라 골라서 사용하는지 AOS와 ScrollMagic 라이브러리의 차이를 아시겠죠?

그럼 지금부터 이번 포스팅의 주제인 AOS 라이브러리에 대해 알아보겠습니다. 

 

 

 

 

 

Installation

 

기본적으로 <head> 태그 안에 aos.js와 aos.css 라이브러리 파일을 불러옵니다.

jQuery 라이브러리도 필요합니다.

aos.js, jQuery.js는 CDN으로 불러오겠습니다.

<head>
	<link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css"> 
	<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> 
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 
</head>

 

그다음 <header>, <body>, 스크립트 영역 중 한 곳에 AOS 라이브러리를 사용하기 위한 초기화 스크립트를 작성합니다.

여기까지가 AOS 라이브러리를 사용하기 위한 준비과정입니다.

<script> 
	AOS.init();
	/* 주석부분과 같이 AOS API - Global Setting 가능
	AOS.init({
		offset: 120,
		delay: 0,
		duration: 400,
		easing: 'ease',
		once: false,
		mirror: false,
		anchorPlacement: 'top-bottom'
	});    
	*/
</script>

 

 

 

 

 

 사용방법(How to use AOS?)

 

기본 완성된 기본 사용방법은 아래와 같습니다.

<!DOCTYPE html>
<html>
    <head>
        <title>AOS Animation</title> 
        <!-- AOS 라이브러리 불러오기-->
        <link rel="stylesheet" href="https://unpkg.com/aos@2.3.1/dist/aos.css"> 
        <script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script> 
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> 
    </head>
    <body>
        <!-- AOS 스크립트 초기화 -->
        <script> 
            AOS.init(); 
        </script>
        <!-- //AOS 스크립트 초기화 -->
        <div aos="fade-up" data-aos-offset="200" data-aos-easing="ease-out-cubic" data-aos-duration="500">
            <!-- 애니메이션 객체 요소 -->
            <!-- //애니메이션 객체 요소 -->
        </div>
    </body>
</html>

※ AOS 라이브러리 애니메이션은 블록 태그(Block Tag)에만 적용 가능합니다. 인라인 태그(Inline Tag)에는 효과가 적용되지 않습니다.

 

 

 

 

 

data-aos 옵션 속성

 

AOS 라이브러리 코드 사용방법을 알았으니, 이제 API 옵션에 대해 알아보겠습니다. 

옵션 속성이 무엇인지 정확히 알아야 제대로 사용할 수 있기 때문입니다.

옵션 속성도 정확히 모른 상태에서 사용방법만 안다는 것은 무의미하겠죠?

API API 핵심내용
data-aos 사용할 애니메이션 효과명
data-aos-easing 애니메이션 시간흐름에 따른 속도설정 옵션(default: ease)
data-aos-anchor 특정한 객체에 anchor를 설정하여,
어떤 객체를 기준으로 애니메이션이 시작 될지를 설정
data-aos-delay 애니메이션 재생 대기시간 설정(default: 0)
data-aos-offset 애니메이션 효과가 시작될 객체의 위치 설정
data-aos-duration 애니메이션의 재생시간 설정(default: 400)
data-aos-anchor-placement 애니메이션이 어느 위치에서부터 적용될지 설정(default: top-bottom)
data-aos-once 스크롤 할때마다 애니매이션이 재생될지를 설정(default: false) 

※ delay와 duration은 0부터 3000까지 최대값을 설정할 수 있고, 50 단위로 설정 변경이 가능합니다.

 

 

data-aos : Attribute Value

Fade animation
  • fade
  • fade-up
  • fade-down
  • fade-left
  • fade-right
  • fade-up-left
  • fade-up-right
  • fade-down-left
  • fade-down-right
Flip animation
  • flip-up
  • flip-down
  • flip-left
  • flip-right
Slide animation
  • slide-up
  • slide-down
  • slide-left
  • slide-right
Zoom animation
  • zoom-in
  • zoom-in-up
  • zoom-in-down
  • zoom-in-left
  • zoom-in-right
  • zoom-out
  • zoom-out-up
  • zoom-out-down
  • zoom-out-left
  • zoom-out-right

 

 

data-aos-easing : Attribute Value

  • linear
  • ease
  • ease-in
  • ease-out
  • ease-in-out
  • ease-in-back
  • ease-out-back
  • ease-in-out-back
  • ease-in-sine
  • ease-out-sine
  • ease-in-out-sine
  • ease-in-quad
  • ease-out-quad
  • ease-in-out-quad
  • ease-in-cubic
  • ease-out-cubic
  • ease-in-quart
  • ease-out-quart
  • ease-in-out-quart

 

 

data-aos-anchor-placement : Attribute Value

  • top-bottom
  • top-center
  • top-top
  • center-bottom
  • center-center
  • center-top
  • bottom-center
  • bottom-top

 

 

 

 

 

AOS  라이브러리 예제 및 다운로드

 

AOS Library  공식 사이트 :  https://michalsnik.github.io/aos/

 

AOS - Animate on scroll library

AOS Animate On Scroll Library Scroll down

michalsnik.github.io

 

 

AOS Library  Github : https://github.com/michalsnik/aos

 

GitHub - michalsnik/aos: Animate on scroll library

Animate on scroll library. Contribute to michalsnik/aos development by creating an account on GitHub.

github.com

 

 

 

 

 

마치며...

 

여러 가지 스크롤 애니메이션 라이브러리가 있지만, 저는 AOS 라이브러리가 가장 사용하기 쉽다고 생각합니다.

자바스크립트를 잘 몰라도 쉽게 사용할 수 있기에 사용자의 범위도 신입부터 경력자까지 범용성 또한 좋다고 생각합니다.

시간이 촉박한 프로젝트에서 스크롤 애니메이션 퍼블리싱을 구현해야 할 경우, 작업시간이 부족해서 헤매지 마시고 AOS Library로 멋있고 동적인 사이트를 쉽게 만들어 보시기 바랍니다.

맑은커뮤니케이션 저희 퍼블리셔 직원분들도 파이팅!!

감사합니다.

 

 

 

반응형
반응형

 

 

TweenMax 곡선ㆍ라운드 애니메이션

 

프로젝트 퍼블리싱을 하다 보면, 디자이너 작업자들이 문의를 합니다.

 

혹시 곡선 형태의 애니메이션 처리 작업이 가능한가요?

퍼블리셔 : 음....

퍼블리셔 : 가능하지만 스크립트로 처리해야하고 0.0.1초 단위로 '가로 1px, 세로 1px씩 변할 때마다 엘리먼트의 좌표를 바꿔줘야 하고너무 복잡....블라 블라

 

 

디자이너 : 쉽게 말해주세요.

퍼블리셔 : 프로젝트 시간도 부족하고 해서 하기 힘들 것 같습니다.

디자이너 : 네ㅜㅜ

 

 

대부분의 곡선 애니메이션 구현을 요청하면 대부분의 퍼블리셔들은 이렇게 대답을 할 것 같습니다.

하지만 GSAP의 곡선을 처리하는 bezier 속성을 알게 된다면, 간편하게 곡선 애니메이션(라운드 움직임)의 효과를 만들 수 있습니다.

자바스크립트나 jQuery로는 구현할 수 없는 신세계??

그럼 바로 bezier curve에 대해서 알아보겠습니다.

이것을 알게되는 순간 퍼블리셔로써 큰 무기를 가지게 되는 것입니다.

 

 

 

 

 

bezier : Array

 

Target 객체를 정해진 좌표까지 이동을 직선으로 하는 것이 아닌 부드러운 곡선으로 이동합니다.

코드 작성 기본 규칙

GSAP 라이브러리로는 bezier curve 곡선을 사용할 수 없습니다. 

bezier 속성을 사용하기 위해서는 GSAP의 TweenMax 라이브러리를 사용해야 합니다.

저는 프로젝트 작업 시 GSAP 라이브러리보다는 TweenMax 라이브러리를 통합으로 사용합니다. 

왜냐하면TweenMax 라이브러리에서는 GSAP 라이브러리가 가지고 있는 기능들을 모두 사용 가능합니다.

 

TweenMax library CDN : https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.3/TimelineMax.min.js

 

 

bezier 코드는 CSS의 position 속성이 없다면 사용 불가능합니다. 그러나 애니메이션 키값을 'top', 'left'가 아닌 'x', 'y' 키값으로 좌표값을 작성하여 트윈 한다면 CSS position 속성 없이 애니메이션이 가능합니다.

 

 bezier 속성 안에 ease, repeat, yoyo 등의 gsap 속성을 사용할 수 있습니다. ease, repeat, yoyo 속성은 기초 1~3편 포스팅에서 작성했습니다. 기억나지 않으시면 다시 한번 보시길 추천드립니다.  

 

 

 

 

 

bezier 속성인 curviness, autoRotate, type 속성을 이용한 bezier 곡선

 

curviness : 커브의 강도를 나타냅니다. 키값이 크면 클수록 역동적으로 애니메이션 됩니다.

 

autoRotate : true를 키값으로 주면  진행방향이 '곡선의 움직임 방향'으로 엘리먼트가 틀어져 애니메이션이 발생하며, false를 키값으로 주면 진행방향과 상관없이 target 모습 그대로 틀어짐 없이 애니메이션 됩니다.

 

type : 기본값은 "thru"이며 "soft", "quadratic", "cubic" 4가지입니다. 첨부해드리는 예제를 통해서 보시면 차이를 알 수 있습니다.

 

 

좌표 키값과,  기본 GSAP 속성을 사용한 bezier 곡선

  TweenMax - bezier base 예제 실습 파일  

gsap_bezier_base.zip
0.03MB

 

 

 

 

curviness, autoRotate 속성 값을 적용한 bezier 곡선

  TweenMax - bezier curviness, autoRotate 예제 실습 파일  

gsap_bezier_autoRotate.zip
0.03MB

 

 

 

 

type 속성 값을 적용한 bezier 곡선

  TweenMax - bezier type 예제 실습 파일  

gsap_bezier_type.zip
0.03MB

 

 

 

 

 

bezier 마치며...

 

GSAP bezier 곡선 움직임(애니메이션)에 대하여 모두 알아보았습니다.

코드 작성이 자바스크립트나, jQuery 작성이 직관적이고 쉽게 곡선 애니메이션을 만들 수 있다는 것을 보셨죠?

이것을 끝으로 GSAPㆍTweenMax 라이브러리 포스팅을 마무리하고자 합니다.

GSAP 설치방법부터 기초, 심화과정의 세분화 과정을 통해 여러 편에 걸쳐 포스팅하였습니다.

GSAP 라이브러리 포스팅을 시작할 때 정리해야 할 내용들이 많아서 걱정이 많이 됐는데, 완전히 끝나고 나니 시원 섭섭하네요!

GSAPㆍTweenMax 라이브러리 포스팅 전편이 퍼블리싱하는데 길잡이가 되길 바라며, 마무리하겠습니다.

감사합니다.

 

반응형
반응형

 

 

GSAP Callback (트윈 제어 - 콜백 함수)

 

callback은 이벤트에 전달해주는 콜백 함수입니다.

GSAP는 함수를 호출하고 파라미터를 넘기는 과정을 편하게 제어할 수 있습니다.

GSAP 콜백 함수는 onInit, onStart, onComplete, onUpdate, onRepeat, onReverseComplete 가 있습니다.

이번 포스팅에서는 위 콜백 함수에 대해 알아보고자 하며, 예제는 자주 사용하는 콜백 함수 위주로 작성할 것이며,

사용빈도가 낮은 콜백 함수는 간단하게 설명 위주로 포스팅하고자 합니다.

 

 

 

 

onInit

 

애니메이션(Tween)이 시작되기 바로 전에 함수를 호출합니다.

onStart와 별 차이가 없지만, 당연히 onStart 보다 빨리 호출됩니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>GSAP - onInit</title>
    <script src="js/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
    <script>
        $(function(){
            gsap.to('.tweenbox', 3, {
                marginLeft: 300,
                backgroundColor: '#ccc',
                border: '2px solid #222',
                borderRadius: 30,
                onInit: motionOnit
            });

            function motionOnit() {
                alert('GSAP Tween 콜백함수 시작 전'); //Tween이 시작되기 바로 전에 호출
            }
        });
    </script>
    <style>
        .tweenbox {width:100px;height:100px;border:2px solid crimson;background:lightcoral;box-sizing:border-box}	
    </style>
</head>
<body>
    <div class="tweenbox"></div>
</body>
</html>

  GSAP - onInit 예제 실습 파일  

gsap.onInit.zip
0.03MB

 

 

 

 

onStart

 

애니메이션(Tween)이 시작할 때 함수를 호출합니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>GSAP - onStart</title>
    <script src="js/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
    <script>
        $(function(){
            gsap.to('.tweenbox', 3, {
                marginLeft: 300,
                backgroundColor: '#ccc',
                border: '2px solid #222',
                borderRadius: 30,
                onStart: motionStart
            });

            function motionStart() {
                alert('GSAP Tween 콜백함수 시작'); //Tween이 시작
            }
        });
    </script>
    <style>
        .tweenbox {width:100px;height:100px;border:2px solid crimson;background:lightcoral;box-sizing:border-box}	
    </style>
</head>
<body>
    <div class="tweenbox"></div>
</body>

  GSAP - onStart 예제 실습 파일  

gsap.onStart.zip
0.03MB

 

 

 

 

onComplete

 

애니메이션(Tween)이 종료되었을 때 함수를 호출합니다.

퍼블리셔가 프로젝트 퍼블리싱 작업 시 GSAP 콜백 함수 중 가장 사용빈도가 높습니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>GSAP - onComplete</title>
    <script src="js/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
    <script>
        $(function(){
            gsap.to('.tweenbox', 3, {
                marginLeft: 300,
                backgroundColor: '#ccc',
                border: '2px solid #222',
                borderRadius: 30,
                onComplete: motionOncomplete
            });

            function motionOncomplete() {
                alert('GSAP Tween 콜백함수 종료');
                gsap.to('.tweenbox', 3, {
                    marginLeft: 0,
                    backgroundColor: 'lightcoral',
                    border: '2px solid crimson',
                    borderRadius: 0
                }); 
            }
        });
    </script>
    <style>
        .tweenbox {width:100px;height:100px;border:2px solid crimson;background:lightcoral;box-sizing:border-box}	
    </style>
</head>
<body>
    <div class="tweenbox"></div>
</body>
</html>

  GSAP - onComplete 예제 실습 파일  

gsap.onComplete.zip
0.03MB

 

 

 

 

Event(함수) + Params

 

애니메이션(Tween) 중 호출하고자 하는 함수 뒤에 Params 파라미터를 붙여 줄 수 있습니다.

 

 

코드 문법 규칙 

Ⅰ. 배열의 형태로 값을 넘겨주어야 합니다.

Ⅱ.  자기 자신의 값을 넘겨줄 때에는 "{self}"라고 값을 주어야 합니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="utf-8">
    <title>GSAP - onComplete</title>
    <script src="js/jquery.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/gsap.min.js"></script>
    <script>
        $(function(){
            var outText = document.querySelector(".motion-message");
            gsap.to('.tweenbox', 3, {
                marginLeft: 300,
                backgroundColor: '#ccc',
                border: '2px solid #222',
                borderRadius: 30,
                onStart: motionMessage,
                onStartParams: ['GSAP Tween 콜백함수 시작 메시지','START'],
                onComplete: motionMessage,
                onCompleteParams: ['GSAP Tween 콜백함수 종료 메시지', 'END']
            });

            function motionMessage(message1, message2) {
                outText.innerHTML += message1 + '-' + message2 + '<br>';
            }
        });
    </script>
    <style>
        .tweenbox {width:100px;height:100px;border:2px solid crimson;background:lightcoral;box-sizing:border-box}	
        .motion-message{margin:30px 10px}
    </style>
</head>
<body>
    <div class="tweenbox"></div>
    <div class="motion-message"></div>
</body>
</html>

  GSAP - params 예제 실습 파일  

gsap.params.zip
0.03MB

 

 

 

 

onUpdate

 

애니메이션(Tween)이 계속 진행되는 동안 호출합니다.

해당 함수는 사용빈도가 낮으므로, 예제는 만들지 않고 위에 콜백 함수 설명으로 대신합니다. 

 

 

 

 

onRepeat

 

애니메이션(Tween)이 반복될 때마다 호출합니다.

해당 콜백 함수는 사용빈도가 낮으므로, 예제는 만들지 않고 위에 콜백 함수 설명으로 대신합니다. 

 

 

 

 

onReverseComplete

 

애니메이션(Tween)이 반전(Reverse) 된 후 모션이 완료되었을 때 호출합니다.

해당 콜백 함수는 사용빈도가 낮으므로, 예제는 만들지 않고 위에 콜백함수 설명으로 대신합니다. 

 

 

 

 

GSAP Callback(콜백 함수) 마치며...

 

포스팅했던 GSAP 기초 1~기초 3까지 내용을 모두 학습하셨다면, 웹퍼블싱 하면서 동적인 화면 구현의 프로젝트는 충분히 수행 가능하리라 생각됩니다.

하지만 퍼블리셔로서 발전하고 싶은 욕구를 만족시키기 위해 콜백 함수까지 알고 있다면 더욱 좋다고 생각합니다.

가끔 프로젝트 작업 시 GSAP(트윈 맥스)를 사용하다 콜백 함수를 사용해야 할 경우도 있습니다.  

다음 포스팅은 GSAP(TweenMax) 심화 마지막 편으로 곡선 방향의 애니메이션을 하는 방법을 알아보겠습니다.

감사합니다.

 

반응형
반응형

 

 

GSAP Variables (트윈 제어 - Style Controlling )

 

이전 '기초 2 포스팅' 에서는 GSAP는 움직임을 제어할 수 이벤트 컨트롤링에 대해 알아보았습니다.

이번 포스팅 주제는 스타일 컨트롤하는 방법에 대해서 다루어 보겠습니다.

CSS를 잘 다루는 퍼블리셔라면 이번 주제의 내용을 쉽게 이해하실 수 있으리라 생각됩니다.

또한 Easing 컨트롤에 대해 같이 알아보겠습니다.

 

 

 

 

CSS Style 트윈 기본 문법

 

기본적인 문법은 CSS 작성방법과 동일하며, CSS 코드를 모두 사용 가능합니다.

그러나 background-color, margin-top, background-image와 같이 css에 '-' 가 포함되어 있는 문법을 사용해 트윈 스타일을 변경하고자 할 경우에는 카멜 표기법을 사용합니다.

카멜 표기법 사용방법은 '-' 뒤에 영문을 대문자로 작성합니다.

예를 들어 backgroundColor, marginTop, backgroundImage로 작성합니다.

 

gsap.to('.tweenbox', 3, {width:300, height:300, backgroundColor:'#ccc'});

  GSAP - CSS Style Control 예제 실습 파일  

gsap.css.style.zip
0.03MB

 

 

 

 

GSAP 제공하는 Style 트윈 기본 문법

 

CSS Style과 동일하게 gsap에 내장된 Style 변경 방법입니다.

장점은 CSS Style 보다 코드가 좀 간편합니다.

CSS만 사용해도 무리가 없으나, 더 알고 있다고 나쁜 건 없겠죠?

GSAP에서 제공하는 Style과 CSS Style의 문법 차이를 아래와 같이 간단하게 정리해 보겠습니다.

 

GSAP CSS
x:300 transform: translateX(300px), margin-left: 300px 
y:300 transform: translateY(300px), margin-top: 300px 
scaleX:2 transfome: scaleX(2)
scaleY:2 transfome: scaleY(2)
rotation:360 transform: rotate(360deg)
rotationX:180 transform: rotateX(180deg)
rotationY:180 transform: rotateY(180deg)
skewY:45 transform: skewY(45deg)
xPercent:45 transform: translateX(45%)
yPercent:45 transform: translateY(45%)

 

  GSAP Style Control 작성 문법  

 

gsap.fromTo('.tweenbox', 1.5, { scaleX:1, scaleY:1, rotation:0, delay: 0 }, {scaleX:2, scaleY:2, rotation:180, delay: .5 });

  GSAP - GSAP Style Control 예제 실습 파일  

gsap_gsap.css.zip
0.03MB

 

 

 

 

GSAP Easing

 

GSAP는 Jquery처럼 easing 함수를 제공합니다.

easing의 function은 애니메이션이 진행됨에 따라 지정한 값의 속도 변화 움직임을 컨트롤하는 설정 값입니다.

그렇기 때문에 움직임을 표현할 때 없어서는 안 될 중요한 요소입니다.

GSAP에서 기본 easeing 값은 Power1.easeOut 입니다.

 

 

  CDN - Easing 라이브러리 적용방법  

 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>GSAP</title>
	<!-- CDN GSAP, Easing -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.7.1/gsap.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.8.0/EasePack.min.js"></script>
</head>
<body>

</body>
</html>

 

 

  Easing  코드 적용방법  

 

TweenMax.staggerFrom('.tweenbox', 1, {
	ease: Back.easeOut,
	opacity: 0,
	y: 200,
	delay: 0.5
}, 0.2);

  GSAP - GSAP Easing Control 예제 실습 파일  

gsap_easing.zip
0.03MB

 

 

Easing의 종류는 GSAP 공식 사이트에서 easing을 종류별 구현하여 확인할 수 있습니다.

또한 예시, 실행을 해보고 easing 코드를 복사하면 쉽게 사용할 수 있습니다.

백 번 설명하여 포스팅하는 것보다는 직접 보시면 이해가 더 빠르리라 생각되어, GSAP 공식 사이트의 easing 메뉴 URL을 아래에 공유해 드립니다.

 

https://greensock.com/docs/Easing

 

 

 

 

GSAP Controlling, Easing 마치며...

 

GSAP Style, Easing Controlling에 대하여 정리해 보았습니다.

이전에 작성한 '기초 2', 이번에 작성한 '기초 3' 통해 GSAP의 이벤트, 스타일,  Easing 컨트롤에 대해 모두 다루어 보았습니다.

이 글을 보신 분들 모두 퍼블리싱하시면서 GSAP 애니메이션을 떡 주무르듯이 컨트롤하실 수 있는 고수가 되실 수 있었으면 합니다.

다음 포스팅은 GSAP eventCallback 함수에 대해 간단하게 알아 보겠습니다.

감사합니다.

 

 

 

반응형
반응형

 

 

GSAP Variables (트윈 제어 - Tween Controlling )

 

GSAP는 움직임을 제어할 수 있는 메서드를 제공합니다.

이번 포스팅에서는 repeat(), repeatDelay(), delay(), yoyo(), start(), resume(), restart(), reverse(), isActive(), pause(), seek(), timeScale() 에 대해 예제와 설명을 통해 알아가 보겠습니다. 

 

 

 

 

repeat(number)

 

애니메이션(트윈이라 정의) 반복 횟수 설정합니다.

기본값은 1이며, -1을 설정하면 무한반복됩니다. delay가 포함되어 있는 경우 첫 번째 트윈만 delay가 적용되고, repeat가 반복 실행되는 두 번째부터는 delay가 적용되지 않습니다.

 

//CSS
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
$(function(){
	gsap.to('.tweenbox', 3, {
		marginTop: 300,
		marginLeft: 300,
		backgroundColor: '#ccc',
		border: '2px solid #222',
		borderRadius: 30,
		repeat: 3 //repeat 값이 -1 일 경우 무한 반복
	});
});

//HTML
<div class="tweenbox"></div>

  gsap.repeat() 예제 실습 파일  

gsap.repeat().zip
0.03MB

 

 

 

 

repeatDelay(number)

 

트윈 반복 시  지연 시간을 초 단위로 설정합니다.

 

//CSS
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
$(function(){
	gsap.to('.tweenbox', 3, {
		marginTop: 300,
		marginLeft: 300,
		backgroundColor: '#ccc',
		border: '2px solid #222',
		borderRadius: 30,
		repeat: 3 //repeat 값이 -1 일 경우 무한 반복
		repeatDelay: 2 // 반복 지연시간 설정(초 단위)
	});
});

//HTML
<div class="tweenbox"></div>

  gsap.repeatDelay() 예제 실습 파일  

gsap.repeatDelay().zip
0.03MB

 

 

 

 

delay(number)

 

트윈 지연 시간을 초 단위로 설정합니다.

 

//CSS
.btn {
	display:inline-block;
	padding:5px 10px 6px;
	background-color:#333;
	font-size:13px;
	color:#fff;
	text-decoration:none
}
.content {
	display:flex;
	justify-content:center;
	padding:200px 0;
	border:1px solid #000
}
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
$(function(){
	$('.btn').click(function(){
		gsap.fromTo('.tweenbox', 1.5, { scaleX:1, scaleY:1, rotation:0, delay: 0 }, {scaleX:2, scaleY:2, rotation:180, delay: .5 });
	});
});

//HTML
<a href="#none" class="btn">Toggle Tween Delay</a>
<div class="content">
	<div class="tweenbox"></div>
</div>

  gsap.delay() 예제 실습 파일  

gsap.delay().zip
0.03MB

 

 

 

 

yoyo(Boolean)

 

트윈을 앞뒤로 반복하여 실행합니다.

 

//CSS
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
$(function(){
	TweenMax.to('.tweenbox', 3, {
		marginLeft: 300,
		backgroundColor: '#ccc',
		border: '2px solid #222',
		borderRadius: 30,
		repeat: -1, //repeat 값이 -1 일 경우 무한 반복
		yoyo: true // 애니메이션을 앞뒤로 반복하여 실행 시킴 - yoyo: Boolean 
	});
});

//HTML
<div class="tweenbox"></div>

  gsap.yoyo() 예제 실습 파일  

gsap.yoyo().zip
0.03MB

 

 

 

 

pause( ), resume( ), restart( )

 

  pause( )   - 트윈의 현재 위치에서 일시 중지하는 설정합니다.

  resume( )   - 방향을 바꾸지 않고 현재 위치에서 트윈을 재시작하는 설정합니다.

  restart( )   - 트윈을 처음부터 다시 시작하는 설정합니다.

 

//CSS
.btn {
	display:inline-block;
	padding:5px 10px 6px;
	background-color:#333;
	font-size:13px;
	color:#fff;
	text-decoration:none
}
.content {
	display:flex;
	padding:100px 30px;
	border:1px solid #000
}
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
var tweenBox;

function tweenStart(){
	var motionBox = document.getElementById("tweenBox");
	tweenBox = TweenMax.fromTo(motionBox, 5, { x:0, backgroundColor:'lightcoral', border:'2px solid crimson'}, {x:500, backgroundColor:'#ccc', border:'2px solid #222', borderRadius:30});
}

function tweenPause(){
	tweenBox.pause();   //멈춤
}

function tweenResume(){
	tweenBox.resume();  //재시작
}

function tweenRestart(){
	tweenBox.restart(); //처음부터 다시시작
}


//HTML
<a href="javascript:tweenStart();" class="btn">Start</a>
<a href="javascript:tweenPause();" class="btn">Pause()</a>
<a href="javascript:tweenResume();" class="btn">Resume()</a>
<a href="javascript:tweenRestart();" class="btn">Restart()</a>
<div class="content">
    <div id="tweenBox" class="tweenbox"></div>
</div>

  pause(), resume(), restart() 예제 실습 파일  

start(),restart(),resume(),pause().zip
0.03MB

 

 

 

 

reverse( )

 

트윈 재생을 역방향으로 설정 합니다.

 

//CSS
.btn {
	display:inline-block;
	padding:5px 10px 6px;
	background-color:#333;
	font-size:13px;
	color:#fff;
	text-decoration:none
}
.content {
	display:flex;
	padding:100px 30px;
	border:1px solid #000
}
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
var tweenBox;

function tweenStart(){
	var motionBox = document.getElementById("tweenBox1");
	tweenBox = gsap.fromTo(motionBox, 2, { x:0, backgroundColor:'lightcoral', border:'2px solid crimson'}, {x:300, backgroundColor:'#ccc', border:'2px solid #222', borderRadius:30})
}

function tweenReverse(){
	tweenBox.reverse();   //역방향으로 진행
}

//HTML
<a href="javascript:tweenStart();" class="btn">Start</a>
<a href="javascript:tweenReverse();" class="btn">Reverse()</a>
<div class="content">
    <div id="tweenBox1" class="tweenbox"></div>
</div>

  reverse() 예제 실습 파일  

reverse().zip
0.03MB

 

 

 

 

isActive( )

 

트윈의 활성화 여부를 나타냅니다.

 

//CSS
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}
button {margin:10px}

//JS
$(function(){
	var tween = gsap.to('.tweenbox', 2, {
		x: 300, 
		backgroundColor: '#ccc', 
		border: '2px solid #222', 
		borderRadius: 30,
		reversed: true //reversed() : 애니메이션의 역방향에 대한 여부 및 설정
	});

	$('#tweenBox').click(function(){
		if(!tween.isActive()){  //isActive() : 애니메이션 활성화 여부
			tween.reversed() ? tween.play() : tween.reverse();  //삼항연산자 :  조건 ? ture : false
		}
	});
});

//HTML
<div class="tweenbox"></div>
<button id="tweenBox">Toggle Tween Reverse</button>

  isActive() 예제 실습 파일  

isActive().zip
0.03MB

 

 

 

 

seek(number)

 

트윈을 지정한 위치로 이동 설정 합니다.

 

//CSS
.btn {
	display:inline-block;
	padding:5px 10px 6px;
	background-color:#333;
	font-size:13px;
	color:#fff;
	text-decoration:none
}
.content {
	display:flex;
	padding:100px 30px;
	border:1px solid #000
}
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
var tweenBox;

function tweenStart(){
	var motionBox = document.getElementById("tweenBox");
	tweenBox = gsap.fromTo(motionBox, 5, { x:0, backgroundColor:'lightcoral', border:'2px solid crimson'}, {x:300, backgroundColor:'#ccc', border:'2px solid #222', borderRadius:30});
}

function tweenSeek(){
	tweenBox.seek(3);   //지정한 위치로 이동(3초 위치로)
}

//HTML
<div class="content">
    <div id="tweenBox" class="tweenbox"></div>
</div>

  seek() 예제 실습 파일  

seek().zip
0.03MB

 

 

 

 

timeScale(number)

 

트윈의 속도 증가와 감속을 설정합니다.

기본값은 1이며, 1보다 작을 경우 속도가 감소하며, 값이 1보다 클 경우 속도가 증가합니다.

 

//CSS
.btn {
	display:inline-block;
	padding:5px 10px 6px;
	background-color:#333;
	font-size:13px;
	color:#fff;
	text-decoration:none
}
.content {
	display:flex;
	padding:100px 30px;
	border:1px solid #000
}
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
var tweenBox;

function tweenStart(){
	var motionBox = document.getElementById("tweenBox");
	tweenBox = gsap.fromTo(motionBox, 5, { x:0, backgroundColor:'lightcoral', border:'2px solid crimson'}, {x:700, backgroundColor:'#ccc', border:'2px solid #222', borderRadius:30});
}

function tweenTimescale(){
	tweenBox.timeScale(0.5); //배율, 속도 감소(0.5는 최초 속도의 절반 느려짐 의미함) / timeScale(2) - 속도가 2배 빨라짐 
}

//HTML
<a href="javascript:tweenStart();" class="btn">Start</a>
<a href="javascript:tweenTimescale();" class="btn">Timescale(0.5)</a>
<div class="content">
    <div id="tweenBox" class="tweenbox"></div>
</div>

  timeScale() 예제 실습 파일  

timeScale().zip
0.03MB

 

 

 

 

GSAP Controlling을 마치며...

 

이번 포스팅은 트윈 컨트롤 중  이벤트 발생 시 트윈 컨트롤에 대해 주로 알아보았습니다.

GSAP 트윈 컨트롤 포스팅해드린 내용만 완벽하게 숙지하신다면, 웹퍼블리싱(이벤트 발생 시트 윈 컨트롤 ) 하는데 문제가 없으리라 생각됩니다.

다음 편에는 트윈 컨트롤 중 style 컨트롤에 대해서 포스팅 하고자 합니다.

퍼블리셔가 해야 할 공부가 너무 많죠??

다들 힘내서 퍼블리싱 합시다!!  파이팅!!!!!!

 

반응형
반응형

 

 

GSAP 트윈 기본 문법

 

GSAP는 자바스크립트 객체의 숫자형 속성을 통해 애니메이션(앞으로 이것을 '트윈'이라 정의합니다.)을 실행합니다.

예를 들어, 특정 속성의 값을 3초 동안 모서리에 라운드 트윈을 주는 기본 문법 코드는 다음과 같습니다.

 

gsap.to('.tweenbox', 3, {borderRadius: 30});

 

첫 번째 파라미터 값은 트윈 할 목표 대상(Target), 두 번째 파라미터 값은 지속시간(Duration), 세 번째 파라미터 값은 트윈 할 목표 대상(Target)의 변화된 다른 속성(Properties) 값으로 변화가 발생하면서, 트윈이 표현됩니다. 

 

GSAP 메서드 설명에 앞서서 기본 문법에 설명드렸습니다.

지금부터는 기본 메서드인 .to(), .from(),  fromTo(), staggerTo(), staggerFrom(), TimelineMax()에 대해서 다루겠습니다.

 

 

 

 

gsap.to( )

 

this(Target) 속성에서 지정한 속성까지 트윈

 

//CSS
.tweenbox {
	width:100px;
 	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
gsap.to('.tweenbox', 3, {
	marginLeft: 300,
	backgroundColor: '#ccc',
	border: '2px solid #222',
	borderRadius: 30
});

  gsap.to() 예제 실습 파일  

gsap.to().zip
0.03MB

 

 

 

 

gsap.from( )

 

지정한 속성에서 this(Target) 속성까지 트윈 

 

//CSS
.tweenbox {
	width:100px;
 	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
gsap.from('.tweenbox', 3, {
	marginLeft: 300,
	backgroundColor: '#ccc',
	border: '2px solid #222',
	borderRadius: 30
});

  gsap.from() 예제 실습 파일  

gsap.from().zip
0.03MB

 

 

 

 

gsap.fromTo( )

 

from에서 지정된 값에서 to가 지정된 값으로 트윈

gsap.fromTo(target, duration, {from vars}, {to vars});

 

//CSS
.tweenbox {
	width:100px;
	height:100px;
	border:2px solid crimson;
	background:lightcoral;
	box-sizing:border-box
}

//JS
gsap.fromTo('.tweenbox', 5, { x:0, backgroundColor:'lightcoral', border:'2px solid crimson'}, {x:300, backgroundColor:'#ccc', border:'2px solid #222', borderRadius:30});

  gsap.fromTo() 예제 실습 파일  

gsap.fromTo().zip
0.03MB

 

 

 

 

TweenMax.staggerTo( )

 

TweenMax.staggerTo(target(Array), duration, {vars}, 대상 배열 트윈 사이의 딜레이 시간);

 

여러 개의 배열(Array)인 this(Target) 속성을  순차적(시간 차)으로 지정한 속성까지 트윈 합니다.

stagger 메서드는 공식 문법이 gsap로 바뀌기 이전 버전(2.1.3 - Version)인 TweenMax 였을 때 존재했던 메서드이지만 gsap로 공식 문법(3.0.0 - Version)이 변경되고, TimelineMax 하나의 메서드로 통일된 것 같습니다.

 

stagger(Target 배열) : 각 배열 트윈 사이의 모션 실행,  TimelineMax(트윈 배열) : this(Target) 트윈이 종료 후 모션 실행합니다.

이렇듯 엄연히 두 개의 메서드는 결이 다른데 왜 없어졌는지 모르겠습니다. 

개인적으로 저는 stagger 메서드를 더 선호합니다.

그러나 현재 최신 버전에서도 하위 버전을 지원하므로 TweenMax.staggerTo() 사용 가능합니다.

 

gsap를 몇 년 전부터 미리 알지 못했다면, 이렇게 좋은 메서드를 사용하지 못했을 메서드가 될 뻔했습니다.

 

 

 

//CSS
.btn {
	display:inline-block;
	padding:5px 10px 6px;
	background-color:#333;
	font-size:13px;
	color:#fff;
	text-decoration:none
}
.content {
	padding:100px 30px;
	border:1px solid #000
}
ul {display:flex}
li.tweenbox {
	display:flex;
	justify-content:center;
	align-items:center;
	width:100px;
	height:100px;
	margin:20px;
	background:lightcoral;
	border-radius:10px;
	list-style:none
}

//JS
function tweenStaggerTo(){
	var m0 = document.getElementById("e0");
	var m1 = document.getElementById("e1");
	var m2 = document.getElementById("e2");
	var m3 = document.getElementById("e3");
	var m4 = document.getElementById("e4");
	TweenMax.staggerTo([m0, m1, m2, m3, m4], 1, { rotation:180 }, 0.5);	//TweenMax.staggerTo([객체1, 객체2, 객체3], 시간, {트윈 모션}, 모션 사이의 딜레이 시간);
}

//HTML
<a href="javascript:tweenStaggerTo();" class="btn">Start</a>
<div class="content">
	<ul>
		<li id="e0" class="tweenbox">1</li>
		<li id="e1" class="tweenbox">2</li>
		<li id="e2" class="tweenbox">3</li>
		<li id="e3" class="tweenbox">4</li>
		<li id="e4" class="tweenbox">5</li>
	</ul>
</div>

  TweenMax.staggerTo() 예제 실습 파일  

TweenMax.staggerTo().zip
0.03MB

 

 

 

 

TweenMax.staggerFrom( )

 

여러 개의 배열(Array)을 지정한 속성에서 this(Target) 속성까지  순차적(시간 차)으로  트윈 합니다.

TweenMax.staggerFrom(target(Array), duration, {vars}, 대상 배열 트윈 사이의 딜레이 시간);

 

//CSS
ul {
	display:flex;
	justify-content:center;
}
li.tweenbox {
	display:flex;
	justify-content:center;
	align-items:center;
	width:100px;
	height:100px;
	margin:20px;
	background:lightcoral;
	border-radius:10px;
	list-style:none
}

//JS
TweenMax.staggerFrom('.tweenbox', 1, {
	ease: Back.easeOut,
	opacity: 0,
	y: 200,
	delay: 0.5
}, 0.2);

//HTML
<ul>
	<li class="tweenbox">1</li>
	<li class="tweenbox">2</li>
	<li class="tweenbox">3</li>
	<li class="tweenbox">4</li>
	<li class="tweenbox">5</li>
</ul>

  TweenMax.staggerFrom() 예제 실습 파일  

TweenMax.staggerfrom().zip
0.03MB

 

 

 

 

TimelineMax( )

 

this(Target) 하나의 객체를 순차적으로 트윈 하는 타임라인  문법입니다. 

gsap.to()가 연달아 있는 코드와 비슷합니다.

 

//CSS
ul {
	display:flex;
	justify-content:center
}
li.tweenbox {
	display:flex;
	justify-content:center;
	align-items:center;
	width:100px;
	height:100px;
	margin:20px;
	background:lightcoral;
	border-radius:10px;
	color:#fff;
	list-style:none
}

//JS
var timeLine = new TimelineMax();
timeLine.to('.tweenbox', 1, { backgroundColor: '#ddd' })
	.to('.tweenbox', 1, { backgroundColor: 'cyan' })
	.to('.tweenbox', 1, { backgroundColor: '#ccc' });
        
//HTML
<ul>
	<li class="tweenbox">1</li>
</ul>

  TimelineMax() 예제 실습 파일  

TimelineMax().zip
0.03MB

 

 

 

 

GSAP 메서드(기초) 마치며...

 

GSAP 메서드는 이정도만 숙지하고 계셔도 동적인 화면을 만드실 때 문제가 없으시리 생각됩니다.

제가 포스팅한 GSAP 메서드(기초)편이 퍼블리싱하는데 도움이 되었으면 합니다.

다음 포스팅은 GSAP VARIABLES 대해서 알아 보겠습니다.

VARIABLES는 알아야 할 것들이 많기 때문에 2~3편의 글을 작성하고자 계획 중입니다.

기대해 주세요!!!

 

반응형
반응형
프로젝트를 하다 보면 동적으로 웹 퍼블리싱해야 할 경우 jQuery animaion을 사용하거나, css animaition을 대부분 사용합니다. 
애니메이션을 더 사용하기 쉽고 강력크한 퍼포먼스를 구현할 수 없을까?
바로~~ 바로!!!
트윈맥스 애니메이션 자바스크립트 라이브러리에 대해 여러 편에 걸쳐 포스팅하여 제대로 알아보겠습니다.

 

 

 

 

GSAP

 

GreenSock Animation Platform (GSAP)는 퍼블리싱을 하면서 애니메이션을 쉽게 사용할 수 있는 강력한 타임라인 기반의 전용 애니메이션 자바스크립트 라이브러리입니다.

GSAP는 CSS의 keyframeanimation 보다 더 정밀한 컨트롤을 할 수 있습니다. 

또한 GSAP는 제이쿼리보다 20배 이상 퍼포먼스가 좋습니다.

이번 가이드에서는 GSAP세팅방법기본문법에 대해서 알아볼 것입니다.

 

 

 

 

Get GSAP (Installation)

 

코드를 작성하기 전에, HTML 파일에 GSAP 라이브러리를 추가해야 합니다.

CDN을 이용하여 추가해도 되고 파일을 다운로드하여 추가해도 됩니다.

당연히 NPM으로 설치도 가능합니다.

 

CDN 버전 선택 방법 : https://cdnjs.com/libraries/gsap/3.8.0

Download 방법 : https://greensock.com/docs/v3/Installation/#download

NPM 설치 방법 : https://greensock.com/docs/v3/Installation/#npm-club

 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="utf-8">
	<title>GSAP</title>
	<!-- CDN -->
	<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.7.1/gsap.min.js"></script>		
    
	<!-- local(download file) -->
	<script src="js/gsap.min.js"></script>
</head>
<body>

</body>
</html>

 

 

 

 

기본 문법

 

gsap.to(target:Object, duration:Number, {variables:Object});

.to()는 일반적으로  제이쿼리의 .animate()라고 생각하면 됩니다.


target : Object - 대상 오브젝트(인자)

duration : Number - 애니메이션 지속 시간 /(초)

variables : Object - target에 부여할 키 값

 

 

  문법 작성 기본규칙  

 

Ⅰ. CSS  키값은 동일하지만 border-radius, border-right 와 같이 '-' 문자가 들어가 있을 경우 카멜 표기법을 사용하면 됩니다. (EX : borderRadius, borderRight)

Ⅱ. target은 유연하게 사용 가능하기 때문에 제이쿼리 형태로 사용해도 되고 아니어도 됩니다. (EX : $(".tweenbox") , .tweenbox, 변수명 

 

 

 

 

입문 가이드 마치며...

 

다음 포스팅은 GSAP의 메서드와 VARIABLES에 대해서 가이드할 계획입니다.

이번 입문 가이드에 대해서 이해 못하셔도 됩니다. 다음 포스팅에서는 예제를 작성하여 설명할 예정이니까요!!

좀 더 쉽겠죠??

저만의 생각은 아니겠죠??

제가 작성하고 공유하는 가이드가 웹퍼블리싱 하는데 도움이 되었으면 합니다.

 

반응형
반응형
remote: support for password authentication was removed on august 13, 2021. please use a personal access token instead. remote: please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. fatal: unable to access 'https://github.com/저장소 상세 경로/': the requested url returned error: 403

 

"비밀번호 인증 지원은 2021년 8월 13일에 제거되었습니다. 개인 액세스 토큰을 사용하세요."

 

프로젝트를 진행하면서, Push를 하려고 하는데, 위와 같은 에러 메시지가 발생했습니다.

당황하지 않고 에러 메시지가 시키는 대로 토큰 방식 인증하여 위의 에러 문제를 해결했습니다.

8월 13일 이후로 token or ssh 두 가지 중 하나로 인증을 해야 Github를 사용 가능합니다.

 

 

 

 

 

해결방법 - token 발급방법


 

 

1. Github 로그인 후 상단 개인설정 클릭 → Setting 클릭

 

 

2. 좌측 메뉴 하단에  Developer settings 클릭 Personal access tokens 클릭

 

 

3. 본문 우측 상단  Generate new token 버튼 클릭 후 token 허용범위 설정하여 토큰 생성 완료합니다.

token 명 작성, 범위는 기본적으로 repo만 선택해도 되지만, 글 작성자는 모두 선택했습니다.

 

 

 

 

★ 생성된 토큰 값은 잘 복사해서 잘 관리해야 합니다.

이유는 다시 토큰 값을 볼 수 없기 때문입니다.

 

 


 

 

해결방법 - git 저장소에 token 등록(소스트리)


 

 

저장소 메뉴 클릭 → 저장소 설정 메뉴 클릭 → 편집 버튼 클릭 발급받은 토큰 코드@ 추가

 

URL / 경로 : https://발급받은 토큰 코드@github.com/저장소 상세 경로.git

 

 

 

마치며 


 

저장소에 토큰 등록을 하고 나면,  push 진행 시 에러가 발생하지 않는 것을 확인할 수 있습니다.

검색을 해보면, 여러 가지 해결책들이 있었지만, 위와 같이 해결하는 것이 가장 간단하고 쉬운 것 같았습니다.

웹퍼블리싱 Workflow에 도움이 되었으면 합니다.  

 

반응형
반응형

웹퍼블리싱 코딩 작업시 편집 프로그램을 사용하여 코딩을 합니다.
편집 프로그램은 다양하게 있으며, 각각 본인의 스타일에 맞는 편집기를 사용하게 됩니다.
(주)맑은커뮤니케이션 에서는 퍼블리셔들이 다양하게 편집 프로그램을 사용합니다.
이에 따라 편집 프로그램 중 Visual Studio Code(VS Code) 사용시 유용한 단축키 사용법을 알아보고자 합니다.
이유는 요즘 퍼블리셔, 개발자들이 많이 사용하기에 주제로 다루어 보았습니다.
사용 빈도가 높은 단축키는 ()를 하였습니다.

기본 편집 단축키

단축키 구분 핵심 설명 Command ID
Ctrl + X
커서 위치 행 삭제(잘라내기)
커서 행 코드가 필요 없을 경우 드래그로 선택하지 않고, 해당 행에 커서를 놓고 Ctrl + X로 행을 삭제(잘라내기)합니다. editor.action.clipboardCutAction
Ctrl + Shift + K
커서 위치 행 삭제
커서 행 코드가 필요 없을 경우 드래그로 선택하지 않고, 해당 행에 커서를 놓고 Ctrl + Shift + K로 행을 삭제합니다. editor.action.deleteLines
Ctrl + C
커서 위치 행 복사
커서 행 코드를 반복해서 사용해야 할 경우, 해당 행에 커서를 놓고 Ctrl + C로 행을 복사합니다. editor.action.clipboardCopyAction
Ctrl + Enter
커서 아래 행 빈줄 생성
커서를 맨 뒤로 보낸 후 Enter를 쳐서 빈 행을 생성할 수 있지만,
행의 코드 중간 부분에서도 Ctrl + Enter 단축키를 사용할 경우 더욱 쉽게 커서 아래에 빈 행을 생성 후 이동 가능합니다.
editor.action.insertLineAfter
Ctrl + Shift + Enter
커서 위 행 빈줄 생성
행의 코드 중간 부분에서도 Ctrl + Shift + Enter단축키를 사용할 경우 더욱 쉽게 커서 위에 빈 행을 생성 후 이동 가능합니다. editor.action.insertLineBefore
alt + (↑)화살표
행을 위로 이동
커서가 있는 현재 행을 윗줄로 옮길때 alt + (↑)화살표를 할 경우 쉽게 행의 코드 윗줄과 순서를 바꿀 수 있습니다. editor.action.moveLinesUpAction
alt + (↓)화살표
행을 아래로 이동
커서가 있는 현재 행을 아래로 옮길때 alt + (↓)화살표를 할 경우 쉽게 행의 코드 아랫줄과 순서를 바꿀 수 있습니다. editor.action.moveLinesDownAction
Ctrl + alt + (↑)화살표
커서를 위에 추가(다중선택) ()
동일하게 문자열을 수정시 Ctrl + alt + (↑)화살표로 윗행을 다중선택하여, 코드를 작성하면 동일하게 한번에 여러개를 수정할 수 있습니다. editor.action.insertCursorAbove
Ctrl + alt + (↓)화살표
커서를 아래에 추가(다중선택) ()
동일하게 문자열을 수정시 Ctrl + alt + (↓)화살표로 아래행 다중선택하여, 코드를 작성하면 동일하게 한번에 여러개를 수정할 수 있습니다. editor.action.insertCursorBelow
Ctrl + /
한줄 주석처리 ()
코드에 대한 설명 또는 필요에 의해 코드를 삭제하지 않고 브라우저에서 보여주고 싶지 않을 경우 Ctrl + / 단축키를 사용하면 됩니다.
퍼블리싱 작업시 자주 사용하는 단축키입니다.
해당 주석을 풀고 싶을 경우 Ctrl + / 단축키를 한번 더 누르면 됩니다.
editor.action.commentLine
Ctrl + K → Ctrl + C
블럭 주석 처리 ()
한줄 주석(//)을 여러 행 한꺼번에 처리하는 블럭주석으로 Ctrl + K → Ctrl + K 단축키를 사용하면 됩니다.
editor.action.addCommentLine
Ctrl + K → Ctrl + U
주석 삭제 ()
주석 처리한 부분을 해제 하고 싶을 경우 Ctrl + K → Ctrl + U 단축키를 사용하면 됩니다.
editor.action.removeCommentLine
Alt + Shift + A
블럭 주석 처리 ()
커서 위치에서 /* */ 또는 드래그 하여 선택된 부분을 블럭 주석 처리 하고 싶을 경우 Alt + Shift + A 단축키를 사용하면 됩니다.
editor.action.blockComment
Ctrl + Shift + [
커서 영역 접기
퍼블리싱 작업시 해당 블럭의 코딩을 완료 후 코드의 양이 많아서 코드가 보기 힘들 경우 가독성을 위해 커서 위치에서 Ctrl + Shift + [ 단축키를 사용하면 커서의 자식요소를 포함하여 접을 수 있습니다.
editor.foldRecursively
Ctrl + Shift + ]
커서 영역 펼치기
퍼블리싱 작업시 접었던 부분의 코드를 다시 수정하거나 보고 싶을 경우 Ctrl + Shift + [ 단축키를 사용하면 커서의 자식요소를 포함하여 펼칠수 있습니다.
editor.unfoldRecursively

검색관련 편집 단축키

단축키 구분 핵심 설명 Command ID
Ctrl + G
행(라인 번호)으로 이동 ()
퍼블리싱 작업시 특정 줄 번호로 빠르기 이동하고 싶을 경우 Ctrl + G 단축키를 사용하면 빠르게 원하는 행으로 이동 가능합니다.
workbench.action.gotoLine
Ctrl + P
빠른 파일 열기 ()
프로젝트 파일 폴더에서 일일이 클릭해서 파일을 찾는 수고로움을 피하고, 빠르게 파일을 찾고 싶을 경우 Ctrl + P 단축키를 사용하면 됩니다.
workbench.action.quickOpen
Ctrl + F
찾기
현재 파일에서 원하는 문자열을 찾고 싶을 경우 Ctrl + F 단축키를 사용하면 빠르게 찾아아서 이동 가능합니다.
actions.find
Ctrl + Shift + F
전체 파일에서 찾기
폴더에서 파일을 전체 검색하여 원하는 문자열을 찾고 싶을 경우 Ctrl + F 단축키를 사용하면 검색한 문자열이 있는 모든 파일을 찾을 수 있습니다.
그러나 전체 검색이다 보니, 파일이 많을 경우 시간이 오래 걸릴 수 있습니다.
workbench.view.search
Ctrl + H
현재페이지 문자열 수정하기 ()
현재 퍼블리싱 중인 페이지에서 여러개의 동일하게 사용된 클래스, 태그, 텍스트 등을 찾아서 한번에 수정하고 싶을 경우 Ctrl + H 단축키를 사용하면 검색하여, 한 개 또는 모두를 한번에 수정할 수 있습니다.
한 개씩 확인하면서 바꾸고 싶을경우 Enter 하면 한 개씩 변경 가능하며, Ctrl + Alt + Enter 하면 모두 수정이 가능합니다.
editor.action.startFindReplaceAction
Ctrl + Shift + H
폴더 모든 페이지 문자열 수정하기 ()
프로젝트 폴더 전체 페이지에서 동일하게 사용된 클래스, 태그, 텍스트 등을 찾아서 한번에 수정하고 싶을 경우 Ctrl + H 단축키를 사용하면 검색하여, 한 개 또는 모두를 한번에 수정할 수 있습니다. workbench.action.replaceInFiles
F8
오류 또는 경고 찾기
HTML, JS, CSS 파일에서 오타로 인해서 오류를 확인하고자 할 경우 F8 단축키를 사용하면 쉽게 찾아서 수정할 수 있습니다.
editor.action.marker.next

파일 관리 편집 단축키

단축키 구분 핵심 설명 Command ID
Ctrl + N
새로운 편집 탭 열기
퍼블리싱을 하다보면 새로운 파일(HTML, CSS, JS)을 생성해야 할때가 있습니다.
이럴 경우 Ctrl + N 단축키를 사용하여 파일 탭을 생성합니다.
workbench.action.files.newUntitledFile
Ctrl + Shift + N
새로운 창 열기
VS Code 에디터에서 새로운 프로젝트 폴더를 생성한 후 열고 싶을 때 Ctrl + Shift + N 단축키를 사용합니다.
현재 작업중인 프로젝트에서 종류가 다른 프로젝트의 수행을 위해 새로운 창을 열고 싶을 때 사용하는 단축키 입니다.
workbench.action.newWindow
Ctrl + O
파일 열기
새로운 파일을 만드는 것이 아닌 프로젝트 폴더내에 이미 생성된 파일을 열고자 할 경우 Ctrl + O 단축키를 사용합니다. workbench.action.files.openFile
Ctrl + W
파일 창 닫기 ()
퍼블리싱 작업을 하다보면, 여러개의 창을 열어 놓을 경우가 있습니다.
해당 파일을 더이상 열어 놓을 필요가 없거나, 파일창이 너무 많아 일부분 닫아야 할 경우 Ctrl + W 단축키로 파일을 닫아 줍니다.
workbench.action.closeWindow
Ctrl + Shift + T
이전에 닫힌 편집파일 다시 열기 ()
현재 파일에서 퍼블리싱 작업중, 이전에 닫았던 창을 다시 열어야 할 경우 Ctrl + Shift + T 단축키로 사용하면 됩니다. workbench.action.reopenClosedEditor
Ctrl + S
파일 저장
신규 파일 저장이 아닌 현재 파일을 저장해야 할 경우 Ctrl + S 단축키로 파일을 저장하면 됩니다. workbench.action.files.save
Ctrl + Shift + S
다른 이름으로 파일 저장
현재 파일을 새로운 이름의 파일로 생성하여 저장해야 할 경우 Ctrl + Shift + S 단축키로 파일을 저장하면 됩니다. workbench.action.files.saveAs
Ctrl + \
파일 화면 창 분할 ()
한 개 이상의 파일 화면을 동시에 보면서 퍼블리싱 해야 할 경우 Ctrl + \ 단축키를 사용하여 화면 창을 분할하여 보면 편리합니다.
Ctrl + \ 단축키를 누른 횟 수 만큼 화면 창이 분할 됩니다.
workbench.action.splitEditor
Ctrl + N(숫자)
화면 분할 창 위치 포커싱 ()
화면을 여러 개 분할 후, 퍼블리싱 작업시 원하는 위치의 분할 창으로 이동해야 할 경우 Ctrl + N(숫자) 단축키를 사용하여 원하는 파일 분할창으로 쉽게 이동할 수 있습니다.
예를 들어 Ctrl + 2 단축키를 누르면 2번 파일 분할창으로 이동합니다.
마우스로 매번 분할창 클릭을 하지 않아도 됩니다.

언어 편집 단축키

단축키 구분 핵심 설명 Command ID
Ctrl + ← /
Ctrl + →

단어별 커서 이동
한글자씩 커서 이동이 아닌, 단어별로 커서를 이동해야 할 경우 Ctrl + ← / Ctrl + → 단축키를 사용하여 좌우로 쉽게 이동할 수 있습니다.
Ctrl + Shift + ← /
Ctrl + Shift + →

단어 선택
단어를 선택해야 할 경우 Ctrl + Shift + ← / Ctrl + Shift + → 단축키를 사용하면 됩니다.
Alt + Shift + →
선택 확장
문단 또는 태그 단위로 확장 선택을 해야 할 경우 Alt + Shift + → 단축키를 사용하면 됩니다.
editor.action.smartSelect.grow
Alt + Shift + ←
선택 축소
문단 또는 태그 단위로 축소 선택을 해야 할 경우 Alt + Shift + ← 단축키를 사용하면 됩니다. editor.action.smartSelect.shrink
alt + 마우스 클릭
필요한 문자열을 골라서 커서 추가(다중선택) ()
동일하지 않은 다양한 문자열을 수정시 alt + 마우스 클릭으로 작업자가 원하는 문자열을 선택하여, 한번에 여러개를 수정할 수 있습니다.
Ctrl + K → F
자동 정렬()
들여쓰기를 제대로 정리하지 못했을 경우 Ctrl + A 후 Ctrl + K → F 단축키를 사용하면 한번에 코드 자동정렬을 할 수 있다.
여러명의 퍼블리셔가 한개의 프로젝트를 진행할 경우 코드 정렬의 통일성 문제를 해결할 수 있기 때문에, 없어서는 안될 단축키 입니다.
editor.action.formatSelection
Ctrl + D
특정 문자열 여러개 찾기()
동일한 문자열 여러개를 한번에 수정해야 할 경우 Ctrl + D 단축키를 사용하여 한번에 수정할 수 있다.
다중 선택 방법은 Ctrl + D 를 누른 횟 수 만큼 동일한 문자열이 선택 된다.
예를 들어 AA라는 문자열 2개를 BB로 수정이 필요할 경우, AA에 커서를 두고 Ctrl + D 단축키를 2번 눌러 AA 문자열 2개를 선택한 후 BB로 문자를 수정하면 된다.
editor.action.addSelectionToNextFindMatch
Ctrl + Shift + L
특정 문자열 모두 선택
Ctrl + D는 동일한 문자열을 누르는 횟 수 만큼 선택 갯수가 확장되는 방식이라면 Ctrl + Shift + L 단축키를 사용하면 한번에 동일한 문자열을 선택하여 편집할 수 있습니다.
찾아야 할 문자열을 블럭선택 한 후 Ctrl + Shift + L 단축키를 누른 후 수정하면 됩니다.
editor.action.addSelectionToNextFindMatch

확장프로그램 단축키

확장프로그램 핵심 설명 단축키 구분
Live Server 라이브서버는 코딩하는 것을 실시간으로 브라우저에서 F5 새로고침 없이 바로 적용해서 확인 가능하도록 해주는 가상 서버 입니다.
사용방법은 확장프로그램을 설치한 후 , Alt + L → O 단축키를 사용하면 브라우저에서 실시간으로 코딩 상황를 확인 가능합니다.
Alt + L → O
Live Server 실행 ()
Live Server 라이브서버는 코딩하는 것을 실시간으로 브라우저에서 F5 새로고침 없이 바로 적용해서 확인 가능하도록 해주는 가상 서버 입니다.
사용방법은 확장프로그램을 설치한 후 , Alt + L → C 단축키를 사용하면 가상 서버를 종료 합니다.
Alt + L → C
Live Server 종료 ()

마치며..

Visual Studio Code(VS Code) 에디터 사용시 많이 사용하는 단축키 위주로 정리해 보았습니다.
다음글은 Visual Studio Code(VS Code) 사용시 편리한 확장프로그램 몇 종류와 용도에 대해 글을 쓰도록 하겠습니다.
잘못된 내용과 궁금하신 내용은 댓글 주시면 답변 드리겠습니다.

반응형
반응형

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

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

 

 

 

사용 방법

 

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

 

 

CDN에서 Swiper 사용하기

<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" /> // CSS 파일
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script> // 스크립트 파일

주의사항: swiper에서 지원하는 min 파일의 주소가 몇 년 주기로 바뀔 수 있습니다.

위와 같은 연결 링크가 아닌 로컬 파일로 연결하면 변경 위험 없이 사용할 수 있습니다.

 

swiper-bundle.min.css
0.01MB
swiper-bundle.min.js
0.14MB

 

예시)

<!DOCTYPE html>
<html lang="ko">
<head>
    ...
    <link rel="stylesheet" href="path/to/swiper.min.css"> // CSS 파일 연결
</head>
<body>
    ...
    <script src="path/to/swiper.min.js"></script> // 스크립트 파일 연결
</body>
</html>

 

 

 

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 class="swiper-pagination"></div>

  // 슬라이드 좌,우 버튼
  <div class="swiper-button-prev"></div>
  <div class="swiper-button-next"></div>

  // 스크롤바
  <div class="swiper-scrollbar"></div>
</div>

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

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

 

 

 

3단계: 스크립트로 Swiper 초기화

new Swiper('.swiper-container');

 

.swiper-container 클래스를 포함한 다른 레이아웃 클래스의 이름을 변경할 경우에는 css, js 파일에 있는 클래스 이름도 같이 변경해야 합니다.

 

 

 

 

슬라이드 옵션

 

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

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

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

 

옵션 적용하는 방법

스크립트 파일에 넣는 코드입니다.

 

옵션이 필요없을 때

new Swiper('.swiper-container');

 

옵션을 적용해야 할 때

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

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

   // 예시 코드
  navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev'
  },

  autoplay: {
    delay: 3000
  }
});

 

 

자주 사용하는 Swiper API

 

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

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

 

옵션 변수
예시 코드 코드 설명
allowTouchMove: false false값을 넣을 경우 슬라이드를 터치를 통해 직접 움직일 수 없습니다.

slidePrev, slideNext와 같은 슬라이드 조작 버튼이나 autoplay와 같은 외부 요소를 통해서는 움직일 수 있습니다.
autoHeight: true true로 설정하면 슬라이드 내용의 높이에 따라 자동으로 슬라이드의 높이를 조정합니다.
breakpoints
(예시 코드 →)
브라우저의 크기별로 반응형 설정을 할 수 있습니다.

breakpoints: {
        // 브라우저 320px 크기일 경우
        320: { slidesPerView: 3, spaceBetween: 20, },
        // 브라우저 480px 크기일 경우
        480: { slidesPerView: 3, spaceBetween: 30, },
        // 브라우저 640px 크기일 경우
        640: { slidesPerView: 4, spaceBetween: 40, }
},
direction: 'horizontal'
direction: 'vertical'
슬라이드의 진행 방향을 정합니다.
horizontal = 가로(기본) | vertical = 세로
effect: 'slide'
'slide' | 'fade' | 'cube' | 'coverflow' | 'flip'

다섯 가지의 슬라이드 전환 효과를 부여할 수 있습니다.

effect: 'slide' // 기본 슬라이드 전환
effect: 'fade' // 희미해지면서 슬라이드 전환
effect: 'cube' // 큐브 형태로 전환
effect: 'coverflow' // 약간의 그림자와 함께 슬라이드를 밀어내며 전환
effect: 'flip' // 카드를 뒤집듯이 전환
enabled: false 슬라이드의 활성화 여부를 정할 수 있습니다.
false 값을 넣으면 슬라이드의 모든 요소가 비활성화됩니다.
followFinger: false
슬라이더를 터치하고 놓을 때만 애니메이션이 적용됩니다.
effect 옵션과 함께 사용하면 슬라이드 사용자가 터치로 슬라이드 애니메이션을 마음대로 움직일 수 없고 터치를 끝냈을 때만 적용됩니다.

더보기
더보기
[followFinger: true(적용 전)]



[followFinger: false(적용 후)]
grabCursor: true
데스크탑에서 슬라이드에 커서를 올렸을 때 그랩 커서를 보여줍니다.
loop: true
슬라이드를 계속 반복합니다.

[슬라이드 순서]
false: slide 1 → slide 2 → slide 3 → end
true: slide 1 → slide 2 → slide 3 → slide 1 → ……
on
이벤트 핸들러를 등록할 때 사용합니다.
slidesPerView: 1 슬라이드 표시 개수입니다.

더보기
더보기
[slidesPerView: 2]


[slidesPerView: 3]
spaceBetween: 0 슬라이드 간 거리를 조절합니다. (px 단위)

더보기
더보기
[spaceBetween: 20]

speed: 1000 슬라이드가 전환될 때의 시간을 지정합니다. (밀리초 단위, 1000 = 1초)
touchRatio: 1 터치 비율을 조정합니다.
숫자가 올라갈수록 슬라이드를 넘길 때 필요한 터치 동작이 줄어듭니다.

 

 

 

스와이퍼 공식 홈페이지에는 나오지 않는 방법들

 

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

더보기
더보기

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

그럴 때는 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 으로 변경해주시면 됩니다.

 

[결과 화면]

 

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

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

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

 

감사합니다.

반응형
반응형

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

오늘은 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 여기에서 참고하세요~

      마치며

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

      반응형
      반응형
      웹퍼블리싱을 실무에서 하다보면 자바스크립트를 꼭 해야하나?
      해야 한다면 과연 어디까지 해야하나? 에 대해 많은 퍼블리셔들은 고민을 할 것입니다. 저 또한 이런 문제로 고민할 때가 많았습니다. 그 고민에 대한 결과로 퍼블리셔는 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는 정의되지 않았습니다." 라는 메시지가 나타납니다.
      문법상 실수 문법상 실수라는 것은 오타는 아니지만 허용되지 않는 방식으로 하나 혹은 하나 이상의 자바스크립트 문장이 섞였을 때 나타나는 에러를 통칭합니다.

      마치며

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

      반응형

      + Recent posts