<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>uxcss blog</title>
	<atom:link href="http://uxcss.com/wp/feed" rel="self" type="application/rss+xml" />
	<link>http://uxcss.com/wp</link>
	<description>웹표준 / IT관련정보 / 기타</description>
	<lastBuildDate>Tue, 02 Oct 2018 08:36:24 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>
<site xmlns="com-wordpress:feed-additions:1">138248309</site>	<item>
		<title>PC크롬 브라우저에서 안드로이드 크롬 브라우저 디버깅 하기(ADB Plugin)</title>
		<link>http://uxcss.com/wp/archives/176</link>
					<comments>http://uxcss.com/wp/archives/176#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Tue, 02 Oct 2018 08:36:24 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=176</guid>

					<description><![CDATA[1. 크롬에 ADB 확장기능을 설치합니다. 2. 안드로이드 USB Driver 설치 ( androidnet sooner single adb interface driver ) http://developer.android.com/tools/extras/oem-usb.html Get the Google USB Driver  &#124;  Android Developers 3. Android SDK <span class="readmore"><a href="http://uxcss.com/wp/archives/176">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<p>1. 크롬에 ADB 확장기능을 설치합니다.</p>
<div class="iframely-embed">
<div class="iframely-responsive" style="height: 168px; padding-bottom: 0;"><a href="https://chrome.google.com/webstore/detail/adb/dpngiggdglpdnjdoaefidgiigpemgage" data-iframely-url="//cdn.iframe.ly/echzFGw"></a></div>
</div>
<p><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script></p>
<p>2. 안드로이드 USB Driver 설치 ( androidnet sooner single adb interface driver )</p>
<p>http://developer.android.com/tools/extras/oem-usb.html</p>
<p><a href="http://developer.android.com/sdk/win-usb.html">Get the Google USB Driver  |  Android Developers</a></p>
<p>3. Android SDK 설치</p>
<div class="iframely-embed">
<div class="iframely-responsive" style="height: 168px; padding-bottom: 0;"><a href="https://developer.android.com/studio/" data-iframely-url="//cdn.iframe.ly/4gb286u"></a></div>
</div>
<p><script async src="//cdn.iframe.ly/embed.js" charset="utf-8"></script></p>
<p>Tools -&gt; Android SDK Platform-tools 만 설치 하면됨</p>
<p>4.  adb.exe 위치 확인 및 path 시스템 속성의 변수 편집에 설정</p>
<p>5. 실행 &gt; cmd &gt; adb version         버전 정보 출력됨 path 잘 됨!</p>
<p>6. adb를 다시 시작해 줌</p>
<p>adb.exe kill-server</p>
<p>adb.exe start-server</p>
<p>7. 안드로이드 폰 디바이서의 시스템 설정 &gt; 개발자 옵션 &gt; USB 디버깅체크 .</p>
<p>(개발자 옵션이 보이지 않는 경우 시스템 설정&gt; 휴대폰 정보 &gt; 소프트웨어 정보 &gt; 빌드 번호 부분을 7번 터치하면  옵션이 활성화 됩니다.)</p>
<p>8. 크롬에서 Adb plugin를 클릭 하거나</p>
<p>주소창에 chrome://inspect/#devices 를 입력하여 디버그 시작</p>
<p>Discover USB devices  옵션에 체크</p>
<p>출처: <a href="http://chsoft.tistory.com/entry/%ED%81%AC%EB%A1%AC-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%ED%81%AC%EB%A1%AC-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80-%EB%94%94%EB%B2%84%EA%B9%85-ADB-Plugin-chrome-debug-%EB%AA%A8%EB%B0%94%EC%9D%BC">http://chsoft.tistory.com/entry/크롬-브라우저에서-안드로이드-크롬-브라우저-디버깅-ADB-Plugin-chrome-debug-모바일</a> [거만떡볶이의 일상다반사]</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/176/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">176</post-id>	</item>
		<item>
		<title>HTML 인클루드하기</title>
		<link>http://uxcss.com/wp/archives/174</link>
					<comments>http://uxcss.com/wp/archives/174#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Sun, 30 Sep 2018 09:33:25 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=174</guid>

					<description><![CDATA[HTML 인클루드하기 이 포스팅에서는 제이쿼리를 이용하여 html 파일을 인클루드 해보록 하겠습니다.(웹서버에서 동작) HTML HTML &#60;div id="wrap"&#62; &#60;p&#62;#wrap&#60;/p&#62; &#60;header role="header" data-include="include/header_inc.html"&#62;&#60;/header&#62; &#60;!-- container --&#62; &#60;div id="container"&#62; &#60;p&#62;#container&#60;/p&#62; &#60;!-- snb --&#62; &#60;div class="snb"&#62; <span class="readmore"><a href="http://uxcss.com/wp/archives/174">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<p class="hh">HTML 인클루드하기</p>
<p>이 포스팅에서는 제이쿼리를 이용하여 html 파일을 인클루드 해보록 하겠습니다.(웹서버에서 동작)</p>
<p><span class="imageblock"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/237A1A475836BCA627" width="500" height="347" /></span></p>
<p class="tit">HTML</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="html">HTML</div>
</div>
<pre class=" language-markup line-numbers"><code class="language-markup"><span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>wrap<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>#wrap<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
	
	<span class="token tag"><span class="token punctuation">&lt;</span>header <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>header<span class="token punctuation">"</span></span> <span class="token attr-name">data-include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>include/header_inc.html<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token punctuation">&lt;/</span>header<span class="token punctuation">&gt;</span></span>
	
	<span class="token comment" spellcheck="true">&lt;!-- container --&gt;</span>
	<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>container<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>#container<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
		<span class="token comment" spellcheck="true">&lt;!-- snb --&gt;</span>
		<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>snb<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
			<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>.snb<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
		<span class="token comment" spellcheck="true">&lt;!-- //snb --&gt;</span>
		<span class="token comment" spellcheck="true">&lt;!-- content --&gt;</span>
		<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>content<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
			<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>#content<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
		<span class="token comment" spellcheck="true">&lt;!-- //content --&gt;</span>
		<span class="token comment" spellcheck="true">&lt;!-- aside --&gt;</span>
		<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>aside<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
			<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>.aside<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
		<span class="token comment" spellcheck="true">&lt;!-- //aside --&gt;</span>
		<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>clear<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
		<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
	<span class="token comment" spellcheck="true">&lt;!-- //container --&gt;</span>
	
	<span class="token tag"><span class="token punctuation">&lt;</span>footer <span class="token attr-name">role</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>footer<span class="token punctuation">"</span></span> <span class="token attr-name">data-include</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>include/footer_inc.html<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span><span class="token tag"><span class="token punctuation">&lt;/</span>footer<span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span></code></pre>
<p class="subtt">header_inc.html</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="html">HEADER</div>
</div>
<pre class=" language-markup"><code class=" language-markup"><span class="token comment" spellcheck="true">&lt;!-- header --&gt;</span>
<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>header<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>#Header Include<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>헤더 인클루드입니다.<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
<span class="token comment" spellcheck="true">&lt;!-- //header --&gt;</span>
</code></pre>
<p class="subtt">footer_inc.html</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="html">FOOTER</div>
</div>
<pre class=" language-markup"><code class=" language-markup"><span class="token comment" spellcheck="true">&lt;!-- footer --&gt;</span>
<span class="token tag"><span class="token punctuation">&lt;</span>div <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>footer<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>#Footer Include<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
	<span class="token tag"><span class="token punctuation">&lt;</span>p<span class="token punctuation">&gt;</span></span>푸터 인클루드입니다.<span class="token tag"><span class="token punctuation">&lt;/</span>p<span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;/</span>div<span class="token punctuation">&gt;</span></span>
<span class="token comment" spellcheck="true">&lt;!-- //footer --&gt;</span>
</code></pre>
<p class="tit">Script</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="html">JAVASCRIPT</div>
</div>
<pre class=" language-javascript line-numbers"><code class="language-javascript"><span class="token operator">&lt;</span>script src<span class="token operator">=</span><span class="token string">"http://code.jquery.com/jquery.min.js"</span><span class="token operator">&gt;</span><span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span>
<span class="token operator">&lt;</span>script<span class="token operator">&gt;</span>
	<span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token function">includeLayout</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

	<span class="token keyword">function</span> <span class="token function">includeLayout</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
		<span class="token keyword">var</span> includeArea <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">'[data-include]'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token keyword">var</span> self<span class="token punctuation">,</span> url<span class="token punctuation">;</span>
		$<span class="token punctuation">.</span><span class="token function">each</span><span class="token punctuation">(</span>includeArea<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
			self <span class="token operator">=</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			url <span class="token operator">=</span> self<span class="token punctuation">.</span><span class="token function">data</span><span class="token punctuation">(</span><span class="token string">"include"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			self<span class="token punctuation">.</span><span class="token function">load</span><span class="token punctuation">(</span>url<span class="token punctuation">,</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
				self<span class="token punctuation">.</span><span class="token function">removeAttr</span><span class="token punctuation">(</span><span class="token string">"data-include"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
			<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
		<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
	<span class="token punctuation">}</span>
<span class="token operator">&lt;</span><span class="token operator">/</span>script<span class="token operator">&gt;</span></code></pre>
<p>스크립트는 body 하단에 위치시키는 것을 권장합니다.</p>
<p class="tit">test CSS</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="css">CSS</div>
</div>
<pre class=" language-css"><code class=" language-css"><span class="token comment" spellcheck="true">/* Common */</span>
<span class="token selector">p,div </span><span class="token punctuation">{</span>
	<span class="token property">margin</span><span class="token punctuation">:</span><span class="token number">0</span><span class="token punctuation">;</span>
	<span class="token property">padding</span><span class="token punctuation">:</span><span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment" spellcheck="true">/* 임시 비주얼 스타일 정의 */</span>
<span class="token selector">div</span><span class="token punctuation">{</span><span class="token property">margin-bottom</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">padding</span><span class="token punctuation">:</span><span class="token number">10</span>px <span class="token number">0</span><span class="token punctuation">;</span><span class="token property">color</span><span class="token punctuation">:</span><span class="token hexcode">#2d2c2d</span><span class="token punctuation">;</span><span class="token property">font-family</span><span class="token punctuation">:</span>Tahoma<span class="token punctuation">;</span><span class="token property">font-size</span><span class="token punctuation">:</span><span class="token number">14</span>px<span class="token punctuation">;</span><span class="token property">font-weight</span><span class="token punctuation">:</span>bold<span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#wrap</span></span><span class="token punctuation">{</span><span class="token property">padding</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">1</span>px solid <span class="token hexcode">#bdbdbd</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#f7f7f7</span><span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#header</span></span><span class="token punctuation">{</span><span class="token property">margin-top</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">padding</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">2</span>px solid <span class="token hexcode">#bfbfbf</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#e5e5e5</span><span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#container</span></span><span class="token punctuation">{</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">2</span>px solid <span class="token hexcode">#bfbfbf</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#e5e5e5</span><span class="token punctuation">}</span>
<span class="token selector"><span class="token class">.snb</span></span><span class="token punctuation">{</span><span class="token property">margin-top</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">1</span>px solid <span class="token hexcode">#bdbdbd</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#fff</span><span class="token punctuation">;</span><span class="token property">text-align</span><span class="token punctuation">:</span>center<span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#content</span></span><span class="token punctuation">{</span><span class="token property">height</span><span class="token punctuation">:</span><span class="token number">200</span>px<span class="token punctuation">;</span><span class="token property">margin-top</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">1</span>px solid <span class="token hexcode">#bdbdbd</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#fff</span><span class="token punctuation">;</span><span class="token property">text-align</span><span class="token punctuation">:</span>center<span class="token punctuation">}</span>
<span class="token selector"><span class="token class">.aside</span></span><span class="token punctuation">{</span><span class="token property">margin-top</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">1</span>px solid <span class="token hexcode">#bdbdbd</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#fff</span><span class="token punctuation">;</span><span class="token property">text-align</span><span class="token punctuation">:</span>center<span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#footer</span></span><span class="token punctuation">{</span><span class="token property">padding</span><span class="token punctuation">:</span><span class="token number">10</span>px<span class="token punctuation">;</span><span class="token property">border</span><span class="token punctuation">:</span><span class="token number">2</span>px solid <span class="token hexcode">#bfbfbf</span><span class="token punctuation">;</span><span class="token property">background</span><span class="token punctuation">:</span><span class="token hexcode">#e5e5e5</span><span class="token punctuation">}</span>


<span class="token comment" spellcheck="true">/* Layout */</span>
<span class="token selector"><span class="token id">#container</span></span><span class="token punctuation">{</span>
	<span class="token property">zoom</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">;</span>
	<span class="token property">padding</span><span class="token punctuation">:</span><span class="token number">0</span> <span class="token number">200</span>px<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#container</span><span class="token pseudo-element">:after</span></span><span class="token punctuation">{</span>
	<span class="token property">display</span><span class="token punctuation">:</span>block<span class="token punctuation">;</span>
	<span class="token property">clear</span><span class="token punctuation">:</span>both<span class="token punctuation">;</span>
	<span class="token property">content</span><span class="token punctuation">:</span><span class="token string">''</span>
<span class="token punctuation">}</span>
<span class="token selector"><span class="token class">.snb</span></span><span class="token punctuation">{</span>
	<span class="token property">float</span><span class="token punctuation">:</span>left<span class="token punctuation">;</span>
	<span class="token property">margin-right</span><span class="token punctuation">:</span>-<span class="token number">180</span>px<span class="token punctuation">;</span>
	<span class="token property">position</span><span class="token punctuation">:</span>relative<span class="token punctuation">;</span>
	<span class="token property">left</span><span class="token punctuation">:</span>-<span class="token number">190</span>px<span class="token punctuation">;</span>
	<span class="token property">width</span><span class="token punctuation">:</span><span class="token number">178</span>px<span class="token punctuation">;</span>
	
<span class="token punctuation">}</span>
<span class="token selector"><span class="token id">#content</span></span><span class="token punctuation">{</span>
	<span class="token property">float</span><span class="token punctuation">:</span>left<span class="token punctuation">;</span>
	<span class="token property">width</span><span class="token punctuation">:</span><span class="token number">100%</span>
<span class="token punctuation">}</span>
<span class="token selector"><span class="token class">.aside</span></span><span class="token punctuation">{</span>
	<span class="token property">float</span><span class="token punctuation">:</span>left<span class="token punctuation">;</span>
	<span class="token property">margin-left</span><span class="token punctuation">:</span>-<span class="token number">182</span>px<span class="token punctuation">;</span>
	<span class="token property">position</span><span class="token punctuation">:</span>relative<span class="token punctuation">;</span>
	<span class="token property">left</span><span class="token punctuation">:</span><span class="token number">190</span>px<span class="token punctuation">;</span>
	<span class="token property">width</span><span class="token punctuation">:</span><span class="token number">178</span>px<span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre>
<p>출처: <a href="http://webclub.tistory.com/548?category=500543">http://webclub.tistory.com/548?category=500543</a> [Web Club]</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/174/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">174</post-id>	</item>
		<item>
		<title>jQuery API: Manipulation, Events, Effects, Utilities</title>
		<link>http://uxcss.com/wp/archives/172</link>
					<comments>http://uxcss.com/wp/archives/172#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Sun, 30 Sep 2018 09:01:51 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=172</guid>

					<description><![CDATA[관련 문서 http://api.jquery.com/category/manipulation/ http://api.jquery.com/category/events/ http://api.jquery.com/category/effects/ http://api.jquery.com/category/utilities/ 목차 Manipulation Events Effects Utilities Manipulation DOM의 제어, 갱신 조작 .append() .append( content [, content ] ) 매치되어진 요소에 주어진 내용을 추가로 삽입한 후 <span class="readmore"><a href="http://uxcss.com/wp/archives/172">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<p><span class="imageblock"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/227D4A455285869A32" width="296" height="99" /></span></p>
<p><b>관</b><b>련 문서</b></p>
<ul>
<li><a class="tx-link" href="http://api.jquery.com/category/manipulation/" target="_blank" rel="noopener">http://api.jquery.com/category/manipulation/</a></li>
<li><a class="tx-link" href="http://api.jquery.com/category/events/" target="_blank" rel="noopener">http://api.jquery.com/category/events/</a></li>
<li><a class="tx-link" href="http://api.jquery.com/category/effects/" target="_blank" rel="noopener">http://api.jquery.com/category/effects/</a></li>
<li><a class="tx-link" href="http://api.jquery.com/category/utilities/" target="_blank" rel="noopener">http://api.jquery.com/category/utilities/</a></li>
</ul>
<p><b>목차</b></p>
<ul>
<li><a href="http://noritersand.tistory.com/215#Manipulation">Manipulation</a></li>
<li><a href="http://noritersand.tistory.com/215#Events">Events</a></li>
<li><a href="http://noritersand.tistory.com/215#Effects">Effects</a></li>
<li><a href="http://noritersand.tistory.com/215#Utilities">Utilities</a></li>
</ul>
<h2 id="Manipulation">Manipulation</h2>
<p>DOM의 제어, 갱신 조작</p>
<p><b>.append()</b></p>
<div class="txc-textbox">
<p>.append( content [, content ] )</p>
</div>
<p>매치되어진 요소에 주어진 내용을 추가로 삽입한 후 객체 반환</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    // p 태그에 내용 추가 -&gt; 결과 : 『중요과목 : 프레임워크』</div>
<div>    $(&#8220;p&#8221;).append(&#8220;&lt;b&gt;프레임워크&lt;/b&gt;&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;p&gt;중요과목: &lt;/p&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.appendTo()</b></p>
<div class="txc-textbox">
<p>.appendTo( target )</p>
</div>
<p>매치되어진 요소들의 내용들을 주어진 조건에 맞는 요소에 추가로 삽입한 후 객체 반환</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    // body 마지막 부분에 제이쿼리 추가</div>
<div>    $(&#8220;&lt;div&gt;&lt;p&gt;제이쿼리&lt;/p&gt;&lt;/div&gt;&#8221;).appendTo(&#8220;body&#8221;);</div>
<div></div>
<div>    // id가 a인 태그의 뒷 부분에 span 태그의 내용을 추가 -&gt;  결과 : 『중요과목 : 프레임워크』</div>
<div>    $(&#8220;span&#8221;).appendTo(&#8220;#a&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;span&gt;프레임워크&lt;/span&gt;</div>
<div>&lt;div id=&#8221;a&#8221;&gt;중요과목 :  &lt;/div&gt;</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.prepend()</b></p>
<div class="txc-textbox">
<p>.prepend( content [, content ] )</p>
</div>
<p>매치되어진 요소들에 맨앞에 주어진 내용을 삽입한후 객체를 반환</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>   $(&#8220;p&#8221;).prepend(&#8220;&lt;b&gt;Hello &lt;/b&gt;&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;p&gt;&lt;!&#8211;삽입위치&#8211;&gt;there friend!&lt;/p&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.prependTo()</b></p>
<div class="txc-textbox">
<p>.prependTo( target )</p>
</div>
<p>매치되어진 요소의 내용을 주어진 것에 매치되는 요소의 맨앞에 추가 삽입한후 객체를 반환</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    $(&#8220;span&#8221;).prependTo(&#8220;#foo&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;div id=&#8221;foo&#8221;&gt; &lt;!&#8211;삽입위치&#8211;&gt;FOO!&lt;/div&gt;</div>
<div>&lt;span&gt;I have something to say&#8230;&lt;/span&gt; //span element는 기존 위치에서 사라짐</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.after()</b></p>
<div class="txc-textbox">
<p>.after( content [, content ] )</p>
</div>
<p>매치되는 모든 요소의 뒤에 주어진 내용을 삽입</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    $(&#8220;p&#8221;).after(&#8220;&lt;b&gt;Hello&lt;/b&gt;&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;p&gt;I would like to say: &lt;/p&gt;</div>
<div>&lt;!&#8211;삽입위치&#8211;&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.before()</b></p>
<div class="txc-textbox">
<p>.before( content [, content ] )</p>
</div>
<p>매치되는 모는 요소의 앞에 주어진 내용 삽입</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    $(&#8220;p&#8221;).before(&#8220;&lt;b&gt;Hello&lt;/b&gt;&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;!&#8211;삽입위치&#8211;&gt;</div>
<div>&lt;p&gt; is what I said&#8230;&lt;/p&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.insertAfter()</b></p>
<div class="txc-textbox">
<p>.insertAfter( target )</p>
</div>
<p>매치되어진 요소들을 주어진 것에 매치되는 요소의 뒤에 삽입한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    // &lt;p&gt;태그 객체가 #foo 뒤로 이동한다.</div>
<div>    $(&#8220;p&#8221;).insertAfter(&#8220;#foo&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;p&gt; is what I said&#8230; &lt;/p&gt;&lt;div id=&#8221;foo&#8221;&gt;FOO!&lt;/div&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.insertBefore()</b></p>
<div class="txc-textbox">
<p>.insertBefore( target )</p>
</div>
<p>매치되어진 요소앞에 주어진 것에 매치된 요소를 삽입한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    //&lt;p&gt;태그 객체가 #foo 앞으로 이동한다.</div>
<div>   $(&#8220;p&#8221;).insertBefore(&#8220;#foo&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;div id=&#8221;foo&#8221;&gt;FOO!&lt;/div&gt;&lt;p&gt;I would like to say: &lt;/p&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.wrap()</b></p>
<div class="txc-textbox">
<p>.wrap( wrappingElement )</p>
</div>
<p>매치되어진 요소를 주어진 wrappingElement로 각각 감싼다. 선택된 요소가 n개일 때 감싸는 요소도 n개가 된다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    // p요소를 지정 div로 둘러싼다.</div>
<div>    $(&#8220;p&#8221;).wrap(&#8220;&lt;div class=&#8217;wrap&#8217;&gt;&lt;b&gt;&lt;/b&gt;&lt;/div&gt;&#8221;);</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;p&gt;Test Paragraph.&lt;/p&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.wrapAll()</b></p>
<div class="txc-textbox">
<p>.wrapAll( wrappingElement )</p>
</div>
<p>매치되는 요소들을 주어진 wrappingElement로 모두 감싼다. 선택된 요소가 다수여도 감싸는 요소는 하나다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    $(document).ready(function(){</div>
<div>       $(&#8220;p&#8221;).wrapAll(document.createElement(&#8220;div&#8221;));</div>
<div>    });</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;style type=&#8221;text/css&#8221;&gt;</div>
<div>div { border: 2px solid blue; }</div>
<div>p { background:yellow; margin:4px; }</div>
<div>&lt;/style&gt;</div>
<div></div>
<div>&lt;p&gt;Hello&lt;/p&gt;</div>
<div>&lt;p&gt;cruel&lt;/p&gt;</div>
<div>&lt;p&gt;World&lt;/p&gt;</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.wrapInner()</b></p>
<div class="txc-textbox">
<p>.wrapInner( wrappingElement )</p>
</div>
<p>매치되어진 요소 내부의 요소를 주어진 wrappingElement로 각각 감싼다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;body&#8221;).wrapInner(&#8220;&lt;div&gt;&lt;div&gt;&lt;p&gt;&lt;em&gt;&lt;b&gt;&lt;/b&gt;&lt;/em&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&#8221;);</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.unwrap()</b></p>
<p>감싸고 있는 요소(즉 부모)를 제거한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    // &lt;p&gt;태그를 감싸고 있는 &lt;div&gt; 요소를 제거</div>
<div>    $(&#8216;p&#8217;).unwrap();</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;div&gt;</div>
<div>    &lt;p&gt;Foo&lt;/p&gt;</div>
<div>&lt;/div&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.replaceWith()</b></p>
<div class="txc-textbox">
<p>.replaceWith( newContent )</p>
</div>
<p>매치되어진 요소를 주어진 내용과 치환한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;button&#8221;).click(function () {</div>
<div>    $(this).replaceWith(&#8220;&lt;div&gt;&#8221; + $(this).text() + &#8220;&lt;/div&gt;&#8221;);</div>
<div>});</div>
<div>//버튼을 클릭하면 해당객체의 텍스트만 가져와 &lt;div&gt;객체로 치환한다.</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.replaceAll()</b></p>
<div class="txc-textbox">
<p>.replaceAll( target )</p>
</div>
<p>매치되어진 것들을 주어진 것에 매치되는 것에 모두 바꾼다. replaceWith()와 비슷하지만 source/target의 위치가 반전되어 있다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;&lt;b&gt;Paragraph. &lt;/b&gt;&#8221;).replaceAll(&#8220;p&#8221;);</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.empty()</b></p>
<p>선택된 요소의 자식에 해당되는 노드를 모두 제거한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>//&lt;p&gt; element의 자식 element, 텍스트, html이 사라진다.</div>
<div>$(&#8220;button&#8221;).click(function() {</div>
<div>    $(&#8220;p&#8221;).empty();</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.remove()</b></p>
<div class="txc-textbox">
<p>.remove( [selector ] )</p>
</div>
<p>empty()가 선택된 요소의 자식 노드만 제거한다면 remove()는 선택된 요소도 같이 제거한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;button&#8221;).click(function () {</div>
<div>    $(&#8220;p&#8221;).remove();</div>
<div>});</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.detach()</b></p>
<div class="txc-textbox">
<p>.detach( [selector ] )</p>
</div>
<p>동적인 조작을 돕기 위해서 detach() 라는 새로운 메서드가 추가되었다. 특정한 요소를 제거한다는 것은 remove()와 기능적으로 동일하지만 해당 요소의 데이터(이벤트 등)를 제거하지 않는다는 주요한 차이가 있다. 쉽게 말해 document에서 잠시 때낸다고 보면 된다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>p = $( &#8220;p&#8221; ).detach();</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>재사용 될 만한 요소에만 사용하는 것이 중요하다. DOM에서 요소를 제거하거나 추가하는 일이 빈번하게 발생할 때 매우 유용하게 사용할 수 있다.</p>
<p><b><a class="tx-link" href="http://api.jquery.com/clone/" target="_blank" rel="noopener">.clone()</a></b></p>
<div class="txc-textbox">
<p>.clone( [withDataAndEvents ] )</p>
<ul>
<li>withDataAndEvents: 요소에 바인드된 이벤트와 data를 복사에 포함할지 여부</li>
</ul>
</div>
<p>선택된 요소를 복제한 새로운 객체를 반환한다. withDataAndEvents가 true일 땐 이벤트 핸들러와 data(value가 아니라 data 프로퍼티)도 함께 복제한다.</p>
<h2 id="Events">Events</h2>
<p>이벤트 관련 메서드. Ajax 이벤트는 작성하지 않았음.</p>
<p><b>.ready()</b></p>
<div class="txc-textbox">
<p>.ready( handler )</p>
</div>
<p>DOM 로드가 완료되면 handler를 실행한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>window.onload = function(){ alert(&#8220;onload1&#8221;); }</div>
<div>window.onload = function(){ alert(&#8220;onload2&#8221;); } // 마지막것 한번만 실행</div>
<div></div>
<div>$(document).ready(function(){</div>
<div>  alert(&#8220;ready1&#8221;);</div>
<div>})</div>
<div>$(function() { // $(document).ready와 같음</div>
<div>  alert(&#8220;ready2&#8221;);</div>
<div>})</div>
<div></div>
<div>// 실행결과</div>
<div>// ready1</div>
<div>// ready2</div>
<div>// onload2</div>
<div>// 브라우저에 따라 항상 실행순서가 바뀔 수 있다.</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b><span style="text-decoration: line-through;">.load()</span></b></p>
<p><b><span style="text-decoration: line-through;">.unload()</span></b></p>
<div class="txc-textbox">
<p>.load(), .unload()는 jQuery 1.8에서 deprecated 되었음</p>
</div>
<p><b>.bind()</b></p>
<div class="txc-textbox">
<p>.bind( eventType [, eventData ], handler )</p>
<ul>
<li>eventType: 핸들러를 할당할 이벤트 타입의 이름</li>
<li>eventData: 핸들러 함수에서 사용하도록 Event 인스턴스에 data라는 프로퍼티로 제공되는 데이터. 생략 가능</li>
<li>handler: 이벤트가 발생했을 때 실행할 함수</li>
</ul>
</div>
<p>선택된 요소에 이벤트 핸들러를 설정한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// 프로퍼티 접근제어자(.)를 통해 메서트 호출을 연속으로 정의한다. (method chaining)</div>
<div>$(&#8216;img&#8217;).bind(&#8216;click&#8217;, function(event) {</div>
<div>    alert(&#8216;안녕1!&#8217;);</div>
<div>}).bind(&#8216;click&#8217;, function(event) {</div>
<div>    alert(&#8216;안녕2!&#8217;);</div>
<div>}).bind(&#8216;click&#8217;, function(event){</div>
<div>    alert(&#8216;안녕3!&#8217;);</div>
<div>});</div>
<div></div>
<div>// a 라는 id를 가지고 있는 요소를 마우스 클릭 시 body에 test_class라는 CSS class를 추가한다.</div>
<div>$(function(){</div>
<div>    $(&#8216;#a&#8217;).bind(&#8216;click&#8217;, function(){</div>
<div>        $(&#8216;body&#8217;).addClass(&#8216;test_class&#8217;);</div>
<div>    });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a 라는 id를 가지고 있는 요소를 마우스 오버시 &#8216;마우스오버&#8217;라는 경고 문구가 나타나고</div>
<div>마우스 클릭시 &#8216;클릭&#8217;이라는 경고 문구가 나타난다.</div>
<div>$(function() {</div>
<div>    $(&#8220;#a&#8221;).bind({</div>
<div>        click : function() {</div>
<div>            alert(&#8220;클릭&#8221;);</div>
<div>        },</div>
<div>        mouseover : function() {</div>
<div>            alert(&#8220;마우스오버&#8221;);</div>
<div>        }</div>
<div>    });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.unbind()</b></p>
<p>선택된 요소의 이벤트 핸들러를 제거한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a 라는 id를 가지고 있는 요소를 마우스 클릭시 test의 기능인 body에 test_class라는</div>
<div>// CSS class를 추가하는 기능을 만든후 unbind 메서드를 이용하여 다시 그 기능을 제거하고 있다.</div>
<div>$(function(){</div>
<div>    var test = function(){</div>
<div>        $(&#8216;body&#8217;).addClass(&#8216;test_class&#8217;);</div>
<div>    };</div>
<div>    $(&#8216;#a&#8217;).click(test);</div>
<div>    $(&#8216;#a&#8217;).unbind(&#8216;click&#8217;, test);</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.one()</b></p>
<div class="txc-textbox">
<p>.one( events [, data ], handler )</p>
<ul>
<li>eventType: 핸들러를 할당할 이벤트 타입의 이름</li>
<li>eventData: 핸들러 함수에서 사용하도록 Event 인스턴스에 data라는 프로퍼티로 제공되는 데이터. 생략 가능</li>
<li>handler: 이벤트가 발생하면 실행할 함수</li>
</ul>
</div>
<p>선택된 요소에 이벤트 핸들러를 설정한다. 이 핸들러는 단 한 번만 실행되고 사라진다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a 라는 id를 가지고 있는 요소를 클릭 하면</div>
<div>//one CSS class를 추가하고 바로 click 이벤트가 해제된다.</div>
<div>$(function(){</div>
<div>    $(&#8216;#a&#8217;).one(&#8216;click&#8217;, function(){</div>
<div>        $(&#8216;body&#8217;).addClass(&#8216;one&#8217;);</div>
<div>    });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.trigger()</b></p>
<div class="txc-textbox">
<p>.trigger( eventType [, extraParameters ] )</p>
</div>
<p>선택된 요소에 인수로 전달한 이벤트를 발생시킨다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a라는 id를 가진 요소의 click 이벤트를 발생시킨다.</div>
<div>$(function(){</div>
<div>    $(&#8216;#a&#8217;).trigger(&#8216;click&#8217;);</div>
<div>});</div>
<div></div>
<div>// trigger() 메서드 기능을 간소화하여 사용하였다.</div>
<div>$(function(){</div>
<div>    $(&#8216;#a&#8217;).click();</div>
<div>});</div>
<div></div>
<div>$(function(){</div>
<div>$(&#8220;#div1&#8221;).click(function(){</div>
<div>    alert(&#8220;엣헴&#8221;);</div>
<div>});</div>
<div></div>
<div>$(&#8220;#div2&#8221;).one(&#8220;click&#8221;, function(){</div>
<div>    alert(&#8220;난 한번만 실행한다&#8221;);</div>
<div>});</div>
<div></div>
<div>$(&#8220;#div1&#8221;).trigger(&#8220;click&#8221;);</div>
<div>    //#div1.click 이벤트를 페이지 로드시에 발생시킨다.</div>
<div>    //위에서 정의한 이벤트함수를 강제로 실행하는 용도로 쓰인다.</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.triggerHandler()</b></p>
<div class="txc-textbox">
<p>.triggerHandler( eventType [, extraParameters ] )</p>
</div>
<p>선택된 요소에 인수로 전달한 이벤트를 발생시킨다. 단 이때 핸들러로 전달한 함수만 실행하며 브라우저가 기본으로 갖는 작동은 수행하지 않는다.</p>
<p><b>.on()</b></p>
<p><a class="tx-link" href="http://noritersand.tistory.com/218" target="_blank" rel="noopener">http://noritersand.tistory.com/218</a></p>
<p><b><a class="tx-link" href="http://api.jquery.com/off/" target="_blank" rel="noopener">.off()</a></b></p>
<div class="txc-textbox">
<p>.off( events [, selector ] [, handler ] )</p>
<p>.off( events [, selector ] )</p>
<p>.off( event )</p>
<p>.off()</p>
</div>
<p>요소에 설정된 이벤트 핸들러를 제거한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;#btn&#8221;).click(function(){</div>
<div>    $(document).off(&#8220;click&#8221;, &#8220;div&#8221;);</div>
<div>});</div>
<div>//div click 이벤트에 해당하는 함수를 제거해 더 이상 해당 함수가 실행되지 않는다.</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.click()</b></p>
<div class="txc-textbox">
<p>.click( handler )</p>
<p>.click( [eventData ], handler )</p>
<p>.click()</p>
</div>
<p>핸들러를 이벤트에 연결하는 것은 흔한 작업이기 때문에, jQuery는 보다 더 간단하고 명료한 방식의 간소화된 이벤트 메서드를 제공하고 있다.</p>
<p>인수가 있냐 없냐에 따라 작동이 달라지는데 인수가 있으면 .bind(&#8216;click&#8217;)과 같으며 인수가 없을땐 클릭 이벤트를 발생시킨다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;script&gt;</div>
<div>    $(function(){</div>
<div>        // a 라는 id를 가지고 있는 요소를 클릭시 body에 test_class라는 CSS class를 추가시킨다.</div>
<div>        // 1&#8230;</div>
<div>        $(&#8216;#a&#8217;).click(function(){</div>
<div>            $(&#8216;body&#8217;).addClass(&#8216;test_class&#8217;);</div>
<div>        });</div>
<div></div>
<div>        // 2&#8230;</div>
<div>        $(&#8216;table tr:gt(0) td&#8217;).click(</div>
<div>               alert($(this).text());</div>
<div>          );</div>
<div></div>
<div>        $(&#8216;table&#8217;).append(&#8220;&lt;tr&gt;&lt;td&gt;테스트&lt;/td&gt;&lt;/tr&gt;&#8221;);  // click 이벤트 적용되지 않음</div>
<div>    });</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;table border=&#8221;1&#8243;&gt;</div>
<div>  &lt;tr&gt;&lt;td&gt;제목&lt;/td&gt;&lt;/tr&gt;</div>
<div>  &lt;tr&gt;&lt;td&gt;자바&lt;/td&gt;&lt;/tr&gt;</div>
<div>  &lt;tr&gt;&lt;td&gt;프레임워크&lt;/td&gt;&lt;/tr&gt;</div>
<div>&lt;/table&gt;</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a 라는 id를 가지고 있는 요소의 click 이벤트를 실행시킨다.</div>
<div>$(function(){</div>
<div>    $(&#8216;#a&#8217;).click();</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.hover()</b></p>
<div class="txc-textbox">
<p>.hover( handlerIn, handlerOut )</p>
</div>
<p>요소에 마우스 커서가 올라가거나 벗어났을때의 핸들러를 설정한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a 라는 id 가지고 있는 요소에 마우스 커서가 들어가면 hover CSS class 를 추가하고 마우스가</div>
<div>// 떠나면 hover CSS class를 제거 한다.</div>
<div>$(function(){</div>
<div>      $(&#8216;#a&#8217;).hover(function(){</div>
<div>        $(&#8216;body&#8217;).addClass(&#8216;hover&#8217;);</div>
<div>      }, function(){</div>
<div>          $(&#8216;body&#8217;).removeClass(&#8216;hover&#8217;);</div>
<div>      });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.change()</b>: 요소의 change 이벤트를 발생시키거나 핸들러를 설정한다. input과 textarea의 경우 포커스를 잃을 때 change 이벤트도 같이 발생한다.</p>
<p><b>.dblclick()</b>: 요소의 더블클릭 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b><span style="text-decoration: line-through;">.error()</span></b></p>
<div class="txc-textbox">
<p>.error()는 1.8에서 deprecated 되었음</p>
</div>
<p><b>.focus()</b>: 요소의 focus 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.blur()</b>: 요소의 blur 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.focusin()</b>: 요소의 focusin 이벤트를 발생시키거나 핸들러를 설정한다. focus()와 다른점은 이벤트 버블이 일어나지 않는다. (이것은 부모 요소가 선택된 요소보다 먼저 트리거되는 것을 의미한다.)</p>
<p><b>.focusout()</b>: 요소의 focusout 이벤트를 발생시키거나 핸들러를 설정한다. focusin()과 같이 이벤트 버블이 일어나지 않는다.</p>
<p><b>.keydown()</b>: 요소의 keydown 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.keypress()</b>: 요소의 keypress 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.keyup()</b>: 요소의 keyup 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.mousedown()</b>: 요소의 mousedown 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.mousemove()</b>: 요소의 mousemove 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.mouseout()</b>: 요소의 mouseout 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.mouseover()</b>: 요소의 mouseover 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.mouseup()</b>: 요소의 mouseup 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.resize()</b>: 요소의 resize 이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.scroll()</b>: 요소의 scroll이벤트를 발생시키거나 핸들러를 설정한다.</p>
<p><b>.select()</b>: 요소의 select이벤트를 발생시키거나 핸들러를 설정한다. input과 textarea의 문자열을 선택하거나 선택 범위를 변경했을 때에 발생한다.</p>
<p><b>.submit()</b>: 요소의 submit이벤트를 발생시키거나 핸들러를 설정한다.</p>
<h2 id="Effects">Effects</h2>
<p>이펙트 관련. 애니메이션을 다루는 메서드가 많다.</p>
<p><b><a class="tx-link" href="http://api.jquery.com/show/" target="_blank" rel="noopener">.show()</a></b></p>
<div class="txc-textbox">
<p>.show( [duration ] [, complete ] )</p>
<p>.show( options )</p>
</div>
<p>선택된 요소를 보이게 한다. CSS의 display 속성을 block으로 지정하는 것과 같다. 숨겨져 있다가 다시 나타날 때의 속도를 설정할 수 있다. 또 완전히 나타난 이후 실행될 콜백 함수를 할당 할 수 있다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>//a의 id를 가진 요소를 클릭하면 b라는 id를 가진 요소가 나타난다. speed를 사용시 정한 시간동안</div>
<div>//요소의 높이를 맨 위로부터 바닥까지, 너비는 왼쪽에서 오른쪽까지, 불투명도는 0에서 1까지 증가시킨다.</div>
<div>$(&#8220;button&#8221;).click(function () {</div>
<div>    $(&#8220;p&#8221;).show(&#8220;slow&#8221;);</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.hide()</b></p>
<div class="txc-textbox">
<p>.hide( [duration ] [, complete ] )</p>
<p>.hide( options )</p>
</div>
<p>선택된 요소를 보이지 않게 한다. CSS의 display 속성을 none으로 지정하는 것과 같다. .show()와 같이 사라지는 속도를 설정하거나 완전히 사라진 후 실행될 함수를 할당 할 수 있다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a라는 id를 가진 요소를 클릭하면 b라는 id를 가진 요소가 사라진다. speed를 사용시 요소의</div>
<div>//높이, 너비, 불투명도를 정한 시간동안 0까지 감소시키고 display:none 상태를 적용시킨다.</div>
<div>$(&#8220;button&#8221;).click(function () {</div>
<div>    $(&#8220;p&#8221;).hide(&#8220;slow&#8221;);</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.toggle()</b></p>
<div class="txc-textbox">
<p>.toggle( [duration ] [, complete ] )</p>
<p>.toggle( options )</p>
<p><span style="text-decoration: line-through;">.toggle( handler, handler [, handler ] )</span></p>
</div>
<p>선택된 요소의 가시성을 반전시킨다. 숨겨져 있을 땐 보이게 하고 반대로 보이는 상태일 땐 숨기는 것.</p>
<div class="txc-textbox">
<p>.toggle() 중 핸들러를 세 개까지 할당하던 방식은 1.8에 deprecated 되었고 1.9에서 완전히 제거되었다.</p>
</div>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;button&#8221;).click(function () {</div>
<div>    $(&#8220;p&#8221;).toggle(); //show(), hide() 함수가 토글 시 매번 교차호출</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b><a class="tx-link" href="http://api.jquery.com/delay/" target="_blank" rel="noopener">.delay()</a></b></p>
<div class="txc-textbox">
<p>.delay( duration [, queueName ] )</p>
</div>
<p>콜백과 애니메이션 사이이의 혼란을 방지하고 &#8220;setTimeout&#8221; 함수를 호출하지 않고도 지연시키고 싶은 만큼 애니메이션을 지연시킬수 있다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>jQuery(&#8216;#foo&#8217;)</div>
<div>    .slideDown() // Slide down</div>
<div>    .delay(200) // Do nothing for 200 ms</div>
<div>    .fadeIn(); // Fade in</div>
<div></div>
<div>//&#8221;.delay()&#8221;의 첫 번째 인자로 밀리세컨즈 단위의 지연 시간값을 기입한다. 만약 다른 애니메이션</div>
<div>//대기열을 사용하려면 두번째 인자로 대기열 이름을 전달할 수 있다.(기본: &#8220;fx&#8221;)</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.slideUp()</b>: 요소를 높이가 제로가 될 때까지 서서히 보이지 않게 한다.</p>
<p><b>.slideDown()</b>: 비표시 상태인 요소를 그 요소의 높이가 될 때까지 서서히 표시해 간다.</p>
<p><b>.slideToggle()</b>: 이 함수가 호출될 때마다 각 요소에 slideDown/slideUp(을)를 교대로 실행한다.</p>
<p><b>.fadeIn()</b>: 지정한 시간동안 투명도를 0에서 1로 증가시키고 style의 display를 none의 이전상태 (block 또는 liline)로 적용시킨다. 해당 요소가 서서히 나타나게 표현된다.</p>
<p><b>.fadeOut()</b>: 지정한 시간동안 투명도를 1에서 0으로 감소시키고 style의 display:none 상태로 적용시킨다. 해당 요소가 서서히 사라지게 표현된다.</p>
<p><b>.fadeTo()</b>: 지정한 시간동안 투명도를 opacity만큼 증가 또는 감소시킨다.(opacity 만큼 fade 시킨다.)</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// a 라는 id를 가진 요소를 클릭하면 b라는 id를 가진 요소가 0.5초간 투명도를 0.33으로 변경되면서 페이딩(To) 효과를 나타낸다.</div>
<div>$(function(){</div>
<div>    $(&#8220;#a&#8221;).click(function(){</div>
<div>        $(&#8220;#b&#8221;).fadeTo(500, 0.33);</div>
<div>    });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b><a class="tx-link" href="http://api.jquery.com/animate/" target="_blank" rel="noopener">.animate()</a></b></p>
<div class="txc-textbox">
<p>.animate( properties [, duration ] [, easing ] [, complete ] )</p>
<p>.animate( properties, options )</p>
</div>
<p>애니메이션을 작성해 실행한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>$(&#8220;#left&#8221;).click(function(){</div>
<div>    $(&#8220;.block&#8221;).animate({&#8220;left&#8221;: &#8220;-=50px&#8221;}, &#8220;slow&#8221;);</div>
<div>});</div>
<div></div>
<div>// test_id1이라는 id를 가진 요소를 클릭하면 a라는 요소의 width값을 90%, height값을</div>
<div>// 270px로 0.5초동안 변화 후 fontSize를 10px로 변경한다.</div>
<div>// test_id2라는 id를 가진 요소를 클릭하면 a라는 요소의 width값을 50%, height값을</div>
<div>// 500px로 3초동안 변경 과 동시에 queue:false 설정으로 대기 없이 바로 fontSize 24px로 변경한다.</div>
<div>$(function(){</div>
<div>    $(&#8220;#test_id1&#8221;).click(function() {</div>
<div>     $(&#8220;#a&#8221;).animate({</div>
<div>         width : &#8220;90%&#8221;, height : &#8220;270px&#8221;</div>
<div>        }, 500).animate({</div>
<div>            fontSize : &#8220;10px&#8221;</div>
<div>        });</div>
<div>    });</div>
<div>    $(&#8220;#test_id2&#8221;).click(function() {</div>
<div>        $(&#8220;#a&#8221;).animate({</div>
<div>            width: &#8220;50%&#8221;, height : &#8220;500px&#8221;</div>
<div>        }, {</div>
<div>            queue : false, duration : 3000</div>
<div>        }).animate({</div>
<div>            fontSize : &#8220;24px&#8221;</div>
<div>        });</div>
<div>   });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.stop()</b></p>
<div class="txc-textbox">
<p>.stop( [clearQueue ] [, jumpToEnd ] )</p>
<p>.stop( [queue ] [, clearQueue ] [, jumpToEnd ] )</p>
</div>
<p>실행중인 애니메이션을 정지시킨다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// test_id라는 id를 가진 요소를 클릭하면 a라는 요소의 애니메이션을 정지</div>
<div>$(function(){</div>
<div>    $(&#8220;#test_id&#8221;).click(function(){</div>
<div>        $(&#8220;#a&#8221;).stop();</div>
<div>    });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b><a class="tx-link" href="http://api.jquery.com/queue/" target="_blank" rel="noopener">.queue()</a></b></p>
<div class="txc-textbox">
<p>.queue( [queueName ] )</p>
</div>
<p>요소가 갖는 애니메이션 큐를 배열로 돌려준다. 해당 요소에 남아있는(실행 예정인) 애니메이션을 알 수 있다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>&lt;!doctype html&gt;</div>
<div>&lt;html lang=&#8221;en&#8221;&gt;</div>
<div>&lt;head&gt;</div>
<div>  &lt;meta charset=&#8221;utf-8&#8243;&gt;</div>
<div>  &lt;title&gt;queue demo&lt;/title&gt;</div>
<div>  &lt;style&gt;</div>
<div>  div {</div>
<div>    margin: 3px;</div>
<div>    width: 40px;</div>
<div>    height: 40px;</div>
<div>    position: absolute;</div>
<div>    left: 0px;</div>
<div>    top: 60px;</div>
<div>    background: green;</div>
<div>    display: none;</div>
<div>  }</div>
<div>  div.newcolor {</div>
<div>    background: blue;</div>
<div>  }</div>
<div>  p {</div>
<div>    color: red;</div>
<div>  }</div>
<div>  &lt;/style&gt;</div>
<div>  &lt;script src=&#8221;https://code.jquery.com/jquery-1.10.2.js&#8221;&gt;&lt;/script&gt;</div>
<div>&lt;/head&gt;</div>
<div>&lt;body&gt;</div>
<div></div>
<div>&lt;p&gt;The queue length is: &lt;span&gt;&lt;/span&gt;&lt;/p&gt;</div>
<div>&lt;div&gt;&lt;/div&gt;</div>
<div></div>
<div>&lt;script&gt;</div>
<div>var div = $( &#8220;div&#8221; );</div>
<div></div>
<div>function runIt() {</div>
<div>  div</div>
<div>    .show( &#8220;slow&#8221; )</div>
<div>    .animate({ left: &#8220;+=200&#8221; }, 2000 )</div>
<div>    .slideToggle( 1000 )</div>
<div>    .slideToggle( &#8220;fast&#8221; )</div>
<div>    .animate({ left: &#8220;-=200&#8221; }, 1500 )</div>
<div>    .hide( &#8220;slow&#8221; )</div>
<div>    .show( 1200 )</div>
<div>    .slideUp( &#8220;normal&#8221;, runIt );</div>
<div>}</div>
<div></div>
<div>function showIt() {</div>
<div>  var n = div.queue( &#8220;fx&#8221; );</div>
<div>  $( &#8220;span&#8221; ).text( n.length );</div>
<div>  setTimeout( showIt, 100 );</div>
<div>}</div>
<div></div>
<div>runIt();</div>
<div>showIt();</div>
<div>&lt;/script&gt;</div>
<div></div>
<div>&lt;/body&gt;</div>
<div>&lt;/html&gt;</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>위 예시에서 &#8216;fx&#8217;는 큐의 이름으로 지정하지 않았을 때 기본값으로 설정되는 값이다. <span style="text-decoration: line-through;">없어도된다고</span></p>
<p><b>jQuery.queue()</b></p>
<div class="txc-textbox">
<p>jQuery.queue( element [, queueName ] )</p>
</div>
<p>element와 일치하는 요소가 갖는 애니메이션 큐를 배열로 돌려준다. 해당 요소에 남아있는(실행 예정인) 애니메이션을 알 수 있다. .queue()랑 다른 점은 문법정도&#8230;</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>jQuery.queue($(&#8216;div&#8217;)[0], &#8216;fx&#8217;); // $(&#8216;div&#8217;)[0]와 일치하는 요소를 찾아 queue를 리턴</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p><b>.dequeue()</b>: 대기 중인 애니메이션, 즉 큐에 대기중인 애니메이션 하나를 꺼내 실행한다.</p>
<p><b>.clearQueue()</b>: 큐의 모든 애니메이션을 초기화한다. 큐의 이름을 지정하지 않으면 &#8216;fx&#8217;를 기본값으로 한다.</p>
<p><b>jQuery.fx.off</b>: effects를 활성화/비활성화 한다. 전역으로 동작한다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>// test_id라는 id를 가진 요소를 클릭 시 a가 0.5초동안 서서히 사라지지 않고 바로 사라져 버린다.</div>
<div>$(function(){</div>
<div>    jQuery.fx.off = false;</div>
<div>    $(&#8220;#test_id&#8221;).click(function(){</div>
<div>        $(&#8220;#a&#8221;).hide(500);</div>
<div>    });</div>
<div>});</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<h2 id="Utilities">Utilities</h2>
<p>잡다한 메서드 모음집. extend를 제외하곤 자주 사용되지 않는다.</p>
<p>jQuery.each()도 utilities에 포함되지만 여기에 작성하지 않음.</p>
<p><b><span style="text-decoration: line-through;">jQuery.support</span></b></p>
<p><b><span style="text-decoration: line-through;">jQuery.browser</span></b></p>
<p><span style="text-decoration: line-through;"><b>jQuery.boxModel</b></span></p>
<div class="txc-textbox">
<p>support는 1.9에서 deprecated,</p>
<p>browse, boxmodel은 1.3에서 deprecated 되었고 현재 완전히 제거되었음</p>
</div>
<p><b>jQuery.trim( string )</b>: 문자열 trim</p>
<p><b>jQuery.extend( target, object1 [, objectN ] )</b>: 오브젝트를 확장</p>
<p><b>jQuery.grep( array, callback[, invert ] )</b>: 배열로부터, 함수를 이용해 특정의 값을 제거</p>
<p><b>jQuery.makeArray( object )</b>: 배열과 같이 이용하고 있는 오브젝트를, 실제로 배열로 변환</p>
<p><b>jQuery.map( array, callback )</b>: 배열의 각 수치를 함수로 처리하고, 새로운 배열을 작성</p>
<p><b>jQuery.inArray( value, array )</b>: 지정한 값이 배열중에 있으면, 그 인덱스를 리턴</p>
<p><b>jQuery.unique( array )</b>: 배열의 중복된 값을 제거</p>
<p><b>jQuery.isArray( object )</b>: object가 배열인지 판단</p>
<p><b>jQuery.isFunction( object )</b>: object가 함수인지 판단</p>
<p><b>함수의 컨텍스트 조작하기</b></p>
<p>jQuery 1.4부터 새롭게 제공되는 jQuery.proxy는 jQuery의 네임스페이스를 관리할 수 있게한다. 이 함수는 &#8220;scope&#8221;와 메서드 이름을 받는 두개의 인자를 가지며 자바스크립트의 &#8220;this&#8221; 키워드를 통하여 다른 개체를 유지할 수 있게 한다.</p>
<p>예를 들어 &#8220;app&#8221; 는 &#8220;config&#8221; 와 &#8220;clickHandler&#8221; 메서드로 구성된 두개의 속성을 가지고 있다면,</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>var app = {</div>
<div>    config: {</div>
<div>       clickMessage: &#8216;Hi!&#8217;</div>
<div>    },</div>
<div>    clickHandler: function() {</div>
<div>        alert(this.config.clickMessage);</div>
<div>    }</div>
<div>};</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>&#8220;clickHandler&#8221; 메서드를 실행하면 &#8220;this&#8221; 키워드를 통하여 &#8220;app&#8221; 개체에 접근하고 &#8220;config&#8221; 개체를 호출하여 값을 취득할 수 있음을 확인할 수 있다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>app.clickHandler(); // &#8220;Hi!&#8221; is alerted</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>이 메서드를 이벤트 핸들러로 바인딩하면:</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>jQuery(&#8216;a&#8217;).bind(&#8216;click&#8217;, app.clickHandler);</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>이렇게 바인딩된 메서드는 정상적으로 작동하지 않는다. jQuery(정확히 말하면 event model)에 의해서 &#8220;this&#8221;가 재정의 되어 버리기 때문이다. 이러한 문제들을 해결하기 위해서 제공하는 함수가 바로 jQuery.proxy다:</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>jQuery(&#8216;a&#8217;).bind(&#8216;click&#8217;,</div>
<div>    jQuery.proxy(app, &#8216;clickHandler&#8217;)</div>
<div>);</div>
</div>
<div><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">Colored by Color Scripter</a></div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>이제 앵커를 클릭하면 &#8220;Hi!&#8221;라는 문구가 나타난다.</p>
<p>jQuery.proxy가 리턴하는 것은 &#8220;wrapped&#8221;된 함수이다. 여기에는 이벤트가 되돌려준 개체와 &#8220;app&#8221;가 들고있는 두 속성을 &#8220;this&#8221;로 확장해서 돌려준 것이다. 이것은 이벤트를 바인딩 할 때 뿐만아니라 플러그인을 만들거나 콜백을 호출하는 데에도 유용하게 사용될 수 있다.</p>
<p><b>jQuery.contains()</b></p>
<div class="txc-textbox">
<p>jQuery.contains( container, contained )</p>
</div>
<p>jQuery 1.4에서는 jQuery 네임스페이스에 &#8220;contains&#8221; 함수를 제공한다. 이 함수는 낮은 수준의 함수로써 두개의 DOM 노드를 인자로 받아 수용여부를 구분한다. 첫 번째 요소가 두번째 요소를 포함하고 있는지에 대한 여부를 boolean 타입으로 리턴된다.</p>
<div class="colorscripter-code">
<table class="colorscripter-code-table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div>
<div>jQuery.contains(document.documentElement, document.body);</div>
<div>// Returns true &#8211; &lt;body&gt; is within &lt;html&gt;</div>
</div>
</td>
<td><a href="http://colorscripter.com/info#e" target="_blank" rel="noopener">cs</a></td>
</tr>
</tbody>
</table>
</div>
<p>[출처]http://noritersand.tistory.com/215</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/172/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">172</post-id>	</item>
		<item>
		<title>페럴렉스 관련 포스팅</title>
		<link>http://uxcss.com/wp/archives/169</link>
					<comments>http://uxcss.com/wp/archives/169#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Sun, 30 Sep 2018 08:15:15 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=169</guid>

					<description><![CDATA[페럴랙스 스크롤(Parallax scrolling) 은 원래 게임이나 애니메이션과 같은 곳에서 사용하는 기법으로 오브젝트 간 시간 차이를 통해서 조금 더 역동적으로 화면을 표현하던 기법입니다. 이러한 기법이 CSS3와 HTML5 가 등장하면서 2011년부터 웹에 적용되어 점차 확대 <span class="readmore"><a href="http://uxcss.com/wp/archives/169">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<p>페럴랙스 스크롤(<a class="tx-link" href="http://en.wikipedia.org/wiki/Parallax_scrolling" target="_blank" rel="noopener">Parallax scrolling</a>) 은 원래 게임이나 애니메이션과 같은 곳에서 사용하는 기법으로 오브젝트 간 시간 차이를 통해서 조금 더 역동적으로 화면을 표현하던 기법입니다. 이러한 기법이 CSS3와 HTML5 가 등장하면서 2011년부터 웹에 적용되어 점차 확대 되어 가고 있는 추세입니다.</p>
<p>2013년 Purdue University 의 연구에 따르면 페럴랙스 스크롤 기법은 UX 측면에서 새로운 경험을 제공하여 특정 측면의 향상을 가져오지만 반드시 UX 적인 향상을 가져오지는 않는다고 하였습니다.</p>
<p>이러한 페럴랙스 스크롤 웹사이트의 가장 큰 장점은 UX전문가(기획자 또는 디자이너 등)가 원하는 내용을 사용자에게 주도적으로 이야기 할 수 있다는 점입니다. 이러한 점을 통해서 사용자는 인식하지 못하고 사이트에서 제공하는 콘텐츠를 제공 받게 됩니다&#8230;.</p>
<p>하지만 이러한 페럴랙스 스크롤 웹사이트는 다소 큰 이미지를 사용하고 있어 로딩 시간이 오래 걸린다는 단점이 있습니다. 또한 2011년 이후 활성화된 방식이라 모든 브라우저에서 호환되지 않는 다는 치명적인 단점도 있지요&#8230; 또한 과도한 스크롤로 인해 사용자는 웹사이트 자체에 어려움을 느끼거나 원하는 콘텐츠를 찾지 못하여 불만을 가질 수도 있을 것입니다.</p>
<p>하지만 사용자가 충분히 흥미를 가질 수 있고 잘 엮어진 스토리 형태로 제공을 한다면 사용자는 물 흐르듯 사이트에서 제공하는 콘텐츠를 제공 받을 수 있을 것입니다.</p>
<p>이러한 페럴랙스 스크롤 형태로 만들어진 몇 가지 참고 사이트를 알아보겠습니다.</p>
<p><a class="tx-link" href="http://www.madwellnyc.com/" target="_blank" rel="noopener">http://www.madwellnyc.com/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/25596A355460710F25?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/25596A355460710F25" width="663" height="393" /></span></span></p>
<p><a class="tx-link" href="http://www.iutopi.com/" target="_blank" rel="noopener">http://www.iutopi.com/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/2753D9355460710F2E?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/2753D9355460710F2E" width="663" height="293" /></span></span></p>
<p><a class="tx-link" href="http://www.culturalsolutions.co.uk/" target="_blank" rel="noopener">http://www.culturalsolutions.co.uk/</a></p>
<div><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/22673335546071100F?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/22673335546071100F" width="663" height="410" /></span></span></div>
<p><a class="tx-link" href="http://www.spendeeapp.com/" target="_blank" rel="noopener">http://www.spendeeapp.com/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/215DD235546071101D?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/215DD235546071101D" width="663" height="407" /></span></span></p>
<p><a class="tx-link" href="http://moto.oakley.com/" target="_blank" rel="noopener">http://moto.oakley.com/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/2458CA355460711026?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/2458CA355460711026" width="663" height="361" /></span></span></p>
<p><a class="tx-link" href="http://www.putzengel.at/" target="_blank" rel="noopener">http://www.putzengel.at/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/236E0B355460711103?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/236E0B355460711103" width="663" height="360" /></span></span></p>
<p><a class="tx-link" href="http://everylastdrop.co.uk/" target="_blank" rel="noopener">http://everylastdrop.co.uk/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/255F8A35546071111B?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/255F8A35546071111B" width="663" height="413" /></span></span></p>
<p><a class="tx-link" href="http://www.hanwhafireworks.com/index.do" target="_blank" rel="noopener">http://www.hanwhafireworks.com/index.do</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/235E55365460711230?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/235E55365460711230" width="663" height="351" /></span></span></p>
<p><a class="tx-link" href="http://www.nintendo.com.au/gamesites/mariokartwii/#home" target="_blank" rel="noopener">http://www.nintendo.com.au/gamesites/mariokartwii/#home</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/2174C237546072811A?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/2174C237546072811A" width="663" height="365" /></span></span></p>
<p><a class="tx-link" href="http://www.sony.com/be-moved/" target="_blank" rel="noopener">http://www.sony.com/be-moved/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/250302375460729A04?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/250302375460729A04" width="663" height="367" /></span></span></p>
<p><a class="tx-link" href="http://www.the-bea.st/" target="_blank" rel="noopener">http://www.the-bea.st/</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/236D643D546074171F?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/236D643D546074171F" width="663" height="400" /></span></span></p>
<p><a class="tx-link" href="http://lamoulade.com/#!/home" target="_blank" rel="noopener">http://lamoulade.com/#!/home</a></p>
<p><span class="imageblock"><span data-url="https://t1.daumcdn.net/cfile/tistory/2140EA4A5460749A15?original" data-lightbox="lightbox"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/2140EA4A5460749A15" width="663" height="352" /></span></span></p>
<p>정말 다양한 방식의 페럴랙스 스크롤 사이트가 있는데요. 이러한 사이트들은 간단한 정보를 사용자에게 쉽게 설명하기 위한 사이트들이 대부분 입니다. 이러한 페럴랙스 스크롤 사이트 개발을 위해서 다양한 곳에서 라이브러리와 튜토리얼을 제공하고 있습니다. 간단한 참고 사이트는 아래와 같습니다.</p>
<p>&nbsp;</p>
<p><a class="tx-link" href="http://matthew.wagerfield.com/parallax/" target="_blank" rel="noopener">http://matthew.wagerfield.com/parallax/</a></p>
<p><a class="tx-link" href="http://markdalgleish.com/projects/stellar.js/" target="_blank" rel="noopener">http://markdalgleish.com/projects/stellar.js/</a></p>
<p><a class="tx-link" href="http://www.jarallax.com/" target="_blank" rel="noopener">http://www.jarallax.com/</a></p>
<p><a class="tx-link" href="http://prinzhorn.github.io/skrollr/" target="_blank" rel="noopener">http://prinzhorn.github.io/skrollr/</a></p>
<p><a class="tx-link" href="http://speckyboy.com/2012/07/20/the-parallax-scrolling-effect-40-examples-and-tutorials/" target="_blank" rel="noopener">http://speckyboy.com/2012/07/20/the-parallax-scrolling-effect-40-examples-and-tutorials/</a></p>
<p><a class="tx-link" href="http://www.topdesignmag.com/20-examples-of-one-page-websites-that-are-using-parallax-scrolling/" target="_blank" rel="noopener">http://www.topdesignmag.com/20-examples-of-one-page-websites-that-are-using-parallax-scrolling/</a></p>
<p><a class="tx-link" href="http://www.creativebloq.com/web-design/parallax-scrolling-1131762" target="_blank" rel="noopener">http://www.creativebloq.com/web-design/parallax-scrolling-1131762</a></p>
<p><a class="tx-link" href="http://webdesignledger.com/inspiration/21-examples-of-parallax-scrolling-in-web-design" target="_blank" rel="noopener">http://webdesignledger.com/inspiration/21-examples-of-parallax-scrolling-in-web-design</a></p>
<p><a class="tx-link" href="http://richardshepherd.com/smashing/parallax/" target="_blank" rel="noopener">http://richardshepherd.com/smashing/parallax/</a></p>
<p><a class="tx-link" href="http://designwoop.com/2012/06/parallax-scrolling-tutorials-resources/" target="_blank" rel="noopener">http://designwoop.com/2012/06/parallax-scrolling-tutorials-resources/</a></p>
<p><a class="tx-link" href="http://net.tutsplus.com/tutorials/html-css-techniques/simple-parallax-scrolling-technique/" target="_blank" rel="noopener">http://net.tutsplus.com/tutorials/html-css-techniques/simple-parallax-scrolling-technique/</a></p>
<p><a class="tx-link" href="http://www.designzzz.com/jquery-parallax-plugins/" target="_blank" rel="noopener">http://www.designzzz.com/jquery-parallax-plugins/</a></p>
<p><a class="tx-link" href="http://www.impressivewebs.com/parallax-scrolling-scripts-plugins/" target="_blank" rel="noopener">http://www.impressivewebs.com/parallax-scrolling-scripts-plugins/</a></p>
<p><a class="tx-link" href="http://jalxob.com/cool-kitten/" target="_blank" rel="noopener">http://jalxob.com/cool-kitten/</a></p>
<p><a class="tx-link" href="http://blog.themeforest.net/tutorials/create-a-funky-parallax-background-effect-using-jquery/" target="_blank" rel="noopener">http://blog.themeforest.net/tutorials/create-a-funky-parallax-background-effect-using-jquery/</a></p>
<p>페럴랙스 스토롤 형태의 사이트는 사이트에서 제공하는 콘텐츠를 사용자가 거부감 없이 받아 들이도록 적절한 스토리를 통해서 사용자에게 표현하는 것이 가장 중요한 요소라고 생각합니다. 그러한 전달을 위해서는 사이트에서 가진 콘텐츠를 매끄럽게 연결해가는 기획이 필요하겠죠..또한 이러한 페럴랙스 스크롤 사이트를 기획할때 개발자와 디자이너와 소통할 수 있는 방식 또한 해결해야 될 문제점이라고 생각합니다.</p>
<p>출처: <a href="http://uipac.com/110">http://uipac.com/110</a> [UIpac (Show me the what to do!)]</p>
<p>&nbsp;</p>
<p>======================================================================</p>
<p>&nbsp;</p>
<p>원본 주소</p>
<p><a class="tx-link" href="http://dev.classmethod.jp/etc/html5-x-css3-x-jquery-6-parallax/" target="_blank" rel="noopener">http://dev.classmethod.jp/etc/html5-x-css3-x-jquery-6-parallax/</a></p>
<h2 id="toc--"><span class="">소개 &#8211; 패럴 랙스 효과에 대해</span></h2>
<p><span class="">패럴랙스 (parallax)를 직역하면 </span><span class="bold cybercyan">시차</span><span class=""> 입니다. </span>시차 효과는 시야가 이동할 때 각 물체가 각각 다른 속도로 스크롤하여 깊이 사이를 비롯한 시각 효과를 말합니다.</p>
<p><span class="">애니메이션의 세계에서는 </span><span class="red">디 ○ 니 영화</span><span class=""> 에서 오래전부터 사용되어 있거나, 비디오 게임에서도 횡 스크롤 액션 게임 등에서 옛날부터 사용되고 있습니다.</span></p>
<h2 id="toc-javascriptjquery">JavaScript (jQuery)에서 패럴 랙스 효과</h2>
<h3>1 | 스크롤 값을 취득</h3>
<p>얼마나 스크롤 했는가하는 값을 가져옵니다. 이것만으로는 아직 아무것도 없지만 모든 것은 여기서부터 시작입니다.</p>
<div>
<div id="highlighter_4214" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number3 index2 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">value = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">) .scrollTop ();   </code><code class="jscript comments">// 스크롤 값을 취득</code></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'#scrollValue' </code><code class="jscript plain">) .text (value);</code></div>
<div class="line number5 index4 alt2"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number6 index5 alt1"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/1-getscrollvalue.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/1-getscrollvalue.html</li>
</ul>
<p>스크롤하면 값이 화면 오른쪽 상단에 표시됩니다.</p>
<h3>2 | Position 값을 변경하여 움직임을 찍어 보면</h3>
<p>취득한 스크롤 값을 사용하여 사각형을 움직여 봅니다.</p>
<div>
<div id="highlighter_207874" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">top = $ ( </code><code class="jscript string">'# item1' </code><code class="jscript plain">) .offset (). top; </code><code class="jscript comments">// y 좌표의 초기 값을 취득</code></div>
<div class="line number3 index2 alt2"><code class="jscript spaces">  </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">value = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">) .scrollTop ();   </code><code class="jscript comments">// 스크롤 값을 취득</code></div>
<div class="line number5 index4 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'#scrollValue' </code><code class="jscript plain">) .text (value);</code></div>
<div class="line number6 index5 alt1"></div>
<div class="line number7 index6 alt2"><code class="jscript spaces">    </code><code class="jscript comments">// 취득한 스크롤 값을 사각형의 Y 좌표 값으로 지정</code></div>
<div class="line number8 index7 alt1"><code class="jscript spaces">    </code><code class="jscript comments">// 스크롤 값을 나누어 이동 거리 변주</code></div>
<div class="line number9 index8 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item1' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'top' </code><code class="jscript plain">, top + value / 2);</code></div>
<div class="line number10 index9 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item2' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'top' </code><code class="jscript plain">, top + value / 4);</code></div>
<div class="line number11 index10 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item3' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'top' </code><code class="jscript plain">, top + value / 6);</code></div>
<div class="line number12 index11 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item4' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'top' </code><code class="jscript plain">, top + value / 8);</code></div>
<div class="line number13 index12 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item5' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'top' </code><code class="jscript plain">, top + value / 10);</code></div>
<div class="line number14 index13 alt1"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number15 index14 alt2"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/2-setposition-y.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/2-setposition-y.html</li>
</ul>
<p>취득한 값에 계산을 추가하여 구형의 움직임에 변화를 붙입니다.</p>
<h3><span class="">3 | 구형을 옆에 움직여 본다</span></h3>
<p><span class="bold">top</span> 외에도 <span class="bold">left</span> 값도 변경하려고합니다. 요령은 앞의 예제와 동일합니다.</p>
<div>
<div id="highlighter_418522" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">top = $ ( </code><code class="jscript string">'# item1' </code><code class="jscript plain">) .offset (). top; </code><code class="jscript comments">// y 좌표의 초기 값을 취득</code></div>
<div class="line number3 index2 alt2"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">left1 = $ ( </code><code class="jscript string">'# item1' </code><code class="jscript plain">) .offset (). left;   </code><code class="jscript comments">// item1의 x 좌표의 초기 값</code></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">left2 = $ ( </code><code class="jscript string">'# item2' </code><code class="jscript plain">) .offset (). left;   </code><code class="jscript comments">// item2의 x 좌표의 초기 값</code></div>
<div class="line number5 index4 alt2"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">left3 = $ ( </code><code class="jscript string">'# item3' </code><code class="jscript plain">) .offset (). left;   </code><code class="jscript comments">// item3의 x 좌표의 초기 값</code></div>
<div class="line number6 index5 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">left4 = $ ( </code><code class="jscript string">'# item4' </code><code class="jscript plain">) .offset (). left;   </code><code class="jscript comments">// item4의 x 좌표의 초기 값</code></div>
<div class="line number7 index6 alt2"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">left5 = $ ( </code><code class="jscript string">'# item5' </code><code class="jscript plain">) .offset (). left;   </code><code class="jscript comments">// item5의 x 좌표의 초기 값</code></div>
<div class="line number8 index7 alt1"></div>
<div class="line number9 index8 alt2"><code class="jscript spaces">  </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number10 index9 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">value = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">) .scrollTop ();   </code><code class="jscript comments">// 스크롤 값을 취득</code></div>
<div class="line number11 index10 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'#scrollValue' </code><code class="jscript plain">) .text (value);</code></div>
<div class="line number12 index11 alt1"></div>
<div class="line number13 index12 alt2"><code class="jscript spaces">    </code><code class="jscript comments">// 취득한 스크롤 양을 사각형의 XY 좌표 값으로 지정</code></div>
<div class="line number14 index13 alt1"><code class="jscript spaces">    </code><code class="jscript comments">// 스크롤 값을 나누어 이동 거리 변주</code></div>
<div class="line number15 index14 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item1' </code><code class="jscript plain">) .css ({ </code><code class="jscript string">'top' </code><code class="jscript plain">: top + value / 4});</code></div>
<div class="line number16 index15 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item2' </code><code class="jscript plain">) .css ({ </code><code class="jscript string">'top' </code><code class="jscript plain">: top + value / 5, </code><code class="jscript string">'left' </code><code class="jscript plain">: left2 + value / 8});</code></div>
<div class="line number17 index16 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item3' </code><code class="jscript plain">) .css ({ </code><code class="jscript string">'top' </code><code class="jscript plain">: top + value / 6, </code><code class="jscript string">'left' </code><code class="jscript plain">: left3 + value / 6});</code></div>
<div class="line number18 index17 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item4' </code><code class="jscript plain">) .css ({ </code><code class="jscript string">'top' </code><code class="jscript plain">: top + value / 8 </code><code class="jscript string">'left' </code><code class="jscript plain">: left4 + value / 5});</code></div>
<div class="line number19 index18 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# item5' </code><code class="jscript plain">) .css ({ </code><code class="jscript string">'left' </code><code class="jscript plain">: left5 + value / 4});</code></div>
<div class="line number20 index19 alt1"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number21 index20 alt2"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/3-setposition-xy.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/3-setposition-xy.html</li>
</ul>
<h3><span class="">4 | 배경 이미지를 움직여 본다</span></h3>
<p>컨텐츠 영역의 배경 이미지를 스크롤로 움직여 봅니다.</p>
<div>
<div id="highlighter_638585" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">area2PosTop = $ ( </code><code class="jscript string">'# area2' </code><code class="jscript plain">) .offset (). top;</code></div>
<div class="line number3 index2 alt2"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">area3PosTop = $ ( </code><code class="jscript string">'# area3' </code><code class="jscript plain">) .offset (). top;</code></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">ashPosTop = $ ( </code><code class="jscript string">'#ashColorArea' </code><code class="jscript plain">) .offset (). top;</code></div>
<div class="line number5 index4 alt2"></div>
<div class="line number6 index5 alt1"><code class="jscript spaces">  </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number7 index6 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">value = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">) .scrollTop ();   </code><code class="jscript comments">// 스크롤 값을 취득</code></div>
<div class="line number8 index7 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'#scrollValue' </code><code class="jscript plain">) .text (value);</code></div>
<div class="line number9 index8 alt2"></div>
<div class="line number10 index9 alt1"><code class="jscript spaces">    </code><code class="jscript comments">// Area1</code></div>
<div class="line number11 index10 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area1' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">, value);</code></div>
<div class="line number12 index11 alt1"></div>
<div class="line number13 index12 alt2"><code class="jscript spaces">    </code><code class="jscript comments">// Area2</code></div>
<div class="line number14 index13 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">if </code> <code class="jscript plain">(value&gt; area2PosTop) {</code></div>
<div class="line number15 index14 alt2"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area2' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">, value - area2PosTop);</code></div>
<div class="line number16 index15 alt1"><code class="jscript spaces">      </code><code class="jscript plain">console.log ( </code><code class="jscript string">'area2 variable' </code><code class="jscript plain">);</code></div>
<div class="line number17 index16 alt2"><code class="jscript spaces">    </code><code class="jscript plain">} </code><code class="jscript keyword">else </code> <code class="jscript plain">{</code></div>
<div class="line number18 index17 alt1"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area2' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">, </code><code class="jscript string">'top' </code><code class="jscript plain">);</code></div>
<div class="line number19 index18 alt2"><code class="jscript spaces">      </code><code class="jscript plain">console.log ( </code><code class="jscript string">'area2 top' </code><code class="jscript plain">);</code></div>
<div class="line number20 index19 alt1"><code class="jscript spaces">     </code><code class="jscript plain">}</code></div>
<div class="line number21 index20 alt2"></div>
<div class="line number22 index21 alt1"><code class="jscript spaces">    </code><code class="jscript comments">// Area3</code></div>
<div class="line number23 index22 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">if </code> <code class="jscript plain">(value&gt; area3PosTop) {</code></div>
<div class="line number24 index23 alt1"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area3' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">(value - area3PosTop) * 2);</code></div>
<div class="line number25 index24 alt2"><code class="jscript spaces">      </code><code class="jscript plain">console.log ( </code><code class="jscript string">'area3 variable' </code><code class="jscript plain">);</code></div>
<div class="line number26 index25 alt1"><code class="jscript spaces">    </code><code class="jscript plain">} </code><code class="jscript keyword">else </code> <code class="jscript plain">{</code></div>
<div class="line number27 index26 alt2"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area3' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">, </code><code class="jscript string">'top' </code><code class="jscript plain">);</code></div>
<div class="line number28 index27 alt1"><code class="jscript spaces">      </code><code class="jscript plain">console.log ( </code><code class="jscript string">'area3 top' </code><code class="jscript plain">);</code></div>
<div class="line number29 index28 alt2"><code class="jscript spaces">    </code><code class="jscript plain">}</code></div>
<div class="line number30 index29 alt1"></div>
<div class="line number31 index30 alt2"><code class="jscript spaces">    </code><code class="jscript comments">// Area4</code></div>
<div class="line number32 index31 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">if </code> <code class="jscript plain">(value&gt; ashPosTop) {</code></div>
<div class="line number33 index32 alt2"><code class="jscript spaces">      </code><code class="jscript keyword">var </code> <code class="jscript plain">area4Top = value - ashPosTop - 800;</code></div>
<div class="line number34 index33 alt1"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area4' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">, area4Top);</code></div>
<div class="line number35 index34 alt2"><code class="jscript spaces">    </code><code class="jscript plain">} </code><code class="jscript keyword">else </code> <code class="jscript plain">{</code></div>
<div class="line number36 index35 alt1"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area4' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'background-position-y' </code><code class="jscript plain">-200);</code></div>
<div class="line number37 index36 alt2"><code class="jscript spaces">    </code><code class="jscript plain">}</code></div>
<div class="line number38 index37 alt1"></div>
<div class="line number39 index38 alt2"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number40 index39 alt1"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/4-bgscroll.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/4-bgscroll.html</li>
</ul>
<p><span class="bold">Area1</span> 과 <span class="bold">Area2</span> 은 화면 상단까지 오면 위치가 고정됩니다.<br />
<span class="bold">Area3</span> 는 상단까지 오면 이번에는 아래에 내려가는 움직임을합니다.<br />
<span class="bold">Area4</span> 화면 상단으로 올라가지 않고 중간에 위치가 고정되고, 그 위에 <span class="bold">Red color area</span> 가 통과 같은 움직임을합니다.</p>
<h3>5 | Transform시켜 본다</h3>
<p>스크롤에 의한 화면의 움직임뿐만 아니라 CSS3의 <span class="bold">Transform 속성</span> 도 조작 해보십시오.</p>
<div>
<div id="highlighter_894917" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number3 index2 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">value = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">) .scrollTop ();   </code><code class="jscript comments">// 스크롤 값을 취득</code></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'#scrollValue' </code><code class="jscript plain">) .text (value);</code></div>
<div class="line number5 index4 alt2"></div>
<div class="line number6 index5 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">hoge1 = value * 0.001 + 0.5;</code></div>
<div class="line number7 index6 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">if </code> <code class="jscript plain">(hoge1&gt; 0.5) {</code></div>
<div class="line number8 index7 alt1"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area1' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'transform' </code><code class="jscript plain">, </code><code class="jscript string">'scale (' </code> <code class="jscript plain">+ hoge1 + </code><code class="jscript string">')' </code><code class="jscript plain">);</code></div>
<div class="line number9 index8 alt2"><code class="jscript spaces">    </code><code class="jscript plain">}</code></div>
<div class="line number10 index9 alt1"></div>
<div class="line number11 index10 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">if </code> <code class="jscript plain">(hoge1&gt; 0.1) {</code></div>
<div class="line number12 index11 alt1"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area2' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'transform' </code><code class="jscript plain">, </code><code class="jscript string">'perspective (1000px) rotateY (' </code> <code class="jscript plain">+ value + </code><code class="jscript string">'deg)' </code><code class="jscript plain">);</code></div>
<div class="line number13 index12 alt2"><code class="jscript spaces">    </code><code class="jscript plain">}</code></div>
<div class="line number14 index13 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">hoge3 = 2 - value * 0.0009;</code></div>
<div class="line number15 index14 alt2"><code class="jscript spaces">    </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area3' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'transform' </code><code class="jscript plain">, </code><code class="jscript string">'scale (' </code> <code class="jscript plain">+ hoge3 + </code><code class="jscript string">') rotate (' </code> <code class="jscript plain">+ value + </code><code class="jscript string">'deg)' </code><code class="jscript plain">);</code></div>
<div class="line number16 index15 alt1"></div>
<div class="line number17 index16 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">hoge4 = value * 0.0009;</code></div>
<div class="line number18 index17 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">if </code> <code class="jscript plain">(hoge4 &lt;= 1) {</code></div>
<div class="line number19 index18 alt2"><code class="jscript spaces">      </code><code class="jscript plain">$ ( </code><code class="jscript string">'# area4' </code><code class="jscript plain">) .css ( </code><code class="jscript string">'opacity' </code><code class="jscript plain">, hoge4);</code></div>
<div class="line number20 index19 alt1"><code class="jscript spaces">    </code><code class="jscript plain">}</code></div>
<div class="line number21 index20 alt2"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number22 index21 alt1"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/5-transform.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/5-transform.html</li>
</ul>
<p>Transform은 CSS3의 기능 때문에 <span class="bold cybercyan">IE8 등의 기존 브라우저</span> 에서 작동하지 않지만, 간편하게 화려한 움직임을 실현 할 수 있습니다.</p>
<h2 id="toc-css">CSS에서 패럴 랙스 효과</h2>
<p>아주 간단한 것이지만, jQuery를 일절 사용하지 않고 CSS만으로 패럴 랙스를 실현하는 것도 가능합니다.</p>
<p class="bold">HTML</p>
<div>
<div id="highlighter_918175" class="syntaxhighlighter html">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="html plain">&lt; </code><code class="html keyword">body </code><code class="html plain">&gt;</code></div>
<div class="line number2 index1 alt1"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"first" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">P </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"logo" </code><code class="html plain">&gt; jQUery x HTML5 x CSS3 &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="html spaces">      </code><code class="html plain">&lt; </code><code class="html keyword">h1 </code><code class="html plain">&gt; Parallax sample &lt;/ </code><code class="html keyword">h1 </code><code class="html plain">&gt;</code></div>
<div class="line number6 index5 alt1"><code class="html spaces">      </code><code class="html plain">&lt; </code><code class="html keyword">p </code><code class="html plain">&gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit .... &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number7 index6 alt2"><code class="html spaces">    </code><code class="html plain">&lt;/ </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number8 index7 alt1"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number9 index8 alt2"></div>
<div class="line number10 index9 alt1"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"second" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number12 index11 alt1"><code class="html spaces">      </code><code class="html plain">&lt; </code><code class="html keyword">H2 </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"toc-only-css" </code><code class="html plain">&gt; Only CSS &lt;/ </code><code class="html keyword">h2 </code><code class="html plain">&gt;</code></div>
<div class="line number13 index12 alt2"><code class="html spaces">      </code><code class="html plain">&lt; </code><code class="html keyword">p </code><code class="html plain">&gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit .... &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number14 index13 alt1"><code class="html spaces">    </code><code class="html plain">&lt;/ </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number15 index14 alt2"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number16 index15 alt1"></div>
<div class="line number17 index16 alt2"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"third" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number18 index17 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number19 index18 alt2"><code class="html spaces">      </code><code class="html plain">&lt; </code><code class="html keyword">H2 </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"toc-without-jquery" </code><code class="html plain">&gt; Without jQuery &lt;/ </code><code class="html keyword">h2 </code><code class="html plain">&gt;</code></div>
<div class="line number20 index19 alt1"><code class="html spaces">      </code><code class="html plain">&lt; </code><code class="html keyword">p </code><code class="html plain">&gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit .... &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number21 index20 alt2"><code class="html spaces">    </code><code class="html plain">&lt;/ </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number22 index21 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">img </code> <code class="html color1">src </code><code class="html plain">= </code><code class="html string">"images / guernica.jpg" </code> <code class="html plain">/&gt;</code></div>
<div class="line number23 index22 alt2"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number24 index23 alt1"></div>
<div class="line number25 index24 alt2"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"theend" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number26 index25 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">H2 </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"toc-the-end" </code><code class="html plain">&gt; The End &lt;/ </code><code class="html keyword">h2 </code><code class="html plain">&gt;</code></div>
<div class="line number27 index26 alt2"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number28 index27 alt1"><code class="html plain">&lt;/ </code><code class="html keyword">body </code><code class="html plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span class="bold">CSS </span><span class="ash small">※ 패럴 랙스 관한 부분 만 설명</span></p>
<div>
<div id="highlighter_917202" class="syntaxhighlighter css">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="css plain">.content {</code></div>
<div class="line number2 index1 alt1"><code class="css spaces">  </code><code class="css keyword">position </code><code class="css plain">: </code><code class="css value">relative </code><code class="css plain">;</code></div>
<div class="line number3 index2 alt2"><code class="css plain">}</code></div>
<div class="line number4 index3 alt1"><code class="css plain">#first { </code><code class="css keyword">background </code><code class="css plain">: </code><code class="css value">url </code><code class="css plain">(images / bg-parallaxsample </code><code class="css value">01 </code><code class="css plain">.jpg) </code><code class="css value">50 % </code> <code class="css value">0 </code> <code class="css value">no-repeat </code> <code class="css value">fixed </code><code class="css plain">;}</code></div>
<div class="line number5 index4 alt2"><code class="css plain">#second { </code><code class="css keyword">background </code><code class="css plain">: </code><code class="css value">url </code><code class="css plain">(images / bg-parallaxsample </code><code class="css value">02 </code><code class="css plain">.jpg) </code><code class="css value">50 % </code> <code class="css value">0 </code> <code class="css value">no-repeat </code> <code class="css value">fixed </code> <code class="css value"># 000 </code><code class="css plain">;}</code></div>
<div class="line number6 index5 alt1"><code class="css plain">#third { </code><code class="css keyword">background </code><code class="css plain">: </code><code class="css value">url </code><code class="css plain">(images / bg-parallaxsample </code><code class="css value">03 </code><code class="css plain">.jpg) </code><code class="css value">50 % </code> <code class="css value">0 </code> <code class="css value">no-repeat </code> <code class="css value">fixed </code> <code class="css value"># 000 </code><code class="css plain">;}</code></div>
<div class="line number7 index6 alt2"><code class="css plain">#theend { </code><code class="css keyword">background </code><code class="css plain">: </code><code class="css value">url </code><code class="css plain">(images / bg-parallaxsample </code><code class="css value">04 </code><code class="css plain">.jpg) </code><code class="css value">50 % </code> <code class="css value">0 </code> <code class="css value">no-repeat </code> <code class="css value">fixed </code> <code class="css value"># e6cda4 </code><code class="css plain">;}</code></div>
<div class="line number8 index7 alt1"></div>
<div class="line number9 index8 alt2"><code class="css comments">/ * section first * /</code></div>
<div class="line number10 index9 alt1"><code class="css plain">.logo {</code></div>
<div class="line number11 index10 alt2"><code class="css spaces">  </code><code class="css keyword">position </code><code class="css plain">: </code><code class="css value">fixed </code><code class="css plain">;</code></div>
<div class="line number12 index11 alt1"><code class="css spaces">  </code><code class="css keyword">top </code><code class="css plain">: </code><code class="css value">100px </code><code class="css plain">;</code></div>
<div class="line number13 index12 alt2"><code class="css spaces">  </code><code class="css keyword">left </code><code class="css plain">: </code><code class="css value">50px </code><code class="css plain">;</code></div>
<div class="line number14 index13 alt1"><code class="css plain">}</code></div>
<div class="line number15 index14 alt2"><code class="css plain">#first article {</code></div>
<div class="line number16 index15 alt1"><code class="css spaces">  </code><code class="css keyword">position </code><code class="css plain">: </code><code class="css value">absolute </code><code class="css plain">;</code></div>
<div class="line number17 index16 alt2"><code class="css spaces">  </code><code class="css keyword">top </code><code class="css plain">: </code><code class="css value">200px </code><code class="css plain">;</code></div>
<div class="line number18 index17 alt1"><code class="css spaces">  </code><code class="css keyword">width </code><code class="css plain">: </code><code class="css value">800px </code><code class="css plain">;</code></div>
<div class="line number19 index18 alt2"><code class="css plain">}</code></div>
<div class="line number20 index19 alt1"></div>
<div class="line number21 index20 alt2"><code class="css comments">/ * section third * /</code></div>
<div class="line number22 index21 alt1"><code class="css plain">#third article {</code></div>
<div class="line number23 index22 alt2"><code class="css spaces">  </code><code class="css keyword">position </code><code class="css plain">: </code><code class="css value">absolute </code><code class="css plain">;</code></div>
<div class="line number24 index23 alt1"><code class="css spaces">  </code><code class="css keyword">top </code><code class="css plain">: </code><code class="css value">0 </code><code class="css plain">;</code></div>
<div class="line number25 index24 alt2"><code class="css plain">}</code></div>
<div class="line number26 index25 alt1"><code class="css plain">#third img {</code></div>
<div class="line number27 index26 alt2"><code class="css spaces">  </code><code class="css keyword">position </code><code class="css plain">: </code><code class="css value">absolute </code><code class="css plain">;</code></div>
<div class="line number28 index27 alt1"><code class="css spaces">  </code><code class="css keyword">left </code><code class="css plain">: </code><code class="css value">30px </code><code class="css plain">;</code></div>
<div class="line number29 index28 alt2"><code class="css spaces">  </code><code class="css keyword">top </code><code class="css plain">: </code><code class="css value">600px </code><code class="css plain">;</code></div>
<div class="line number30 index29 alt1"><code class="css plain">}</code></div>
<div class="line number31 index30 alt2"></div>
<div class="line number32 index31 alt1"><code class="css comments">/ * section the end * /</code></div>
<div class="line number33 index32 alt2"><code class="css plain">#theend h </code><code class="css value">2 </code> <code class="css plain">{</code></div>
<div class="line number34 index33 alt1"><code class="css spaces">  </code><code class="css keyword">position </code><code class="css plain">: </code><code class="css value">absolute </code><code class="css plain">;</code></div>
<div class="line number35 index34 alt2"><code class="css plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<dl>
<dt>CSS 구현의 포인트</dt>
<dd>&#8211; 각 섹션의 배경 이미지를 <span class="bold">background-position : fixed;</span> 고정 배치</dd>
<dd>&#8211; 텍스트와 사진 이미지 등의 콘텐츠를 <span class="bold">position : absolute;</span> 절대 배치</dd>
</dl>
<p>이렇게하면 페이지를 스크롤해도 배경 이미지는 움직이지 않고 그대로 다음 섹션에 숨기는 등의 표현이 가능합니다.</p>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/6-onlycss.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/6-onlycss.html</li>
</ul>
<h2 id="toc-jquery-x-css">jQuery x CSS에서 패럴 랙스 효과</h2>
<p>위의 CSS 만의 샘플에 jQuery를 사용하여 더욱 움직임을 더합니다. 우선 jQuery에서 DOM을 조작하기 쉽게하기 위해 HTML의 다음 부분 다음에 추가됩니다.</p>
<p class="bold">HTML</p>
<div>
<div id="highlighter_78955" class="syntaxhighlighter html">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1 highlighted">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2 highlighted">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2 highlighted">25</div>
<div class="line number26 index25 alt1">26</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"first" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number2 index1 alt1 highlighted"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">P </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"logo sprite" </code> <code class="html color1">data-speed </code><code class="html plain">= </code><code class="html string">"-1.5" </code> <code class="html color1">data-offsety </code><code class="html plain">= </code><code class="html string">"100" </code><code class="html plain">&gt; jQUery x HTML5 x CSS3 &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number3 index2 alt2"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number4 index3 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">h1 </code><code class="html plain">&gt; Parallax sample &lt;/ </code><code class="html keyword">h1 </code><code class="html plain">&gt;</code></div>
<div class="line number5 index4 alt2"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">p </code><code class="html plain">&gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number6 index5 alt1"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number7 index6 alt2"><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number8 index7 alt1"></div>
<div class="line number9 index8 alt2"><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"second" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number10 index9 alt1"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number11 index10 alt2"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">H2 </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"toc-only-css1" </code><code class="html plain">&gt; Only CSS &lt;/ </code><code class="html keyword">h2 </code><code class="html plain">&gt;</code></div>
<div class="line number12 index11 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">p </code><code class="html plain">&gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number13 index12 alt2"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number14 index13 alt1"><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number15 index14 alt2"></div>
<div class="line number16 index15 alt1"><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"third" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number17 index16 alt2"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number18 index17 alt1"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">H2 </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"toc-without-jquery1" </code><code class="html plain">&gt; Without jQuery &lt;/ </code><code class="html keyword">h2 </code><code class="html plain">&gt;</code></div>
<div class="line number19 index18 alt2"><code class="html spaces">    </code><code class="html plain">&lt; </code><code class="html keyword">p </code><code class="html plain">&gt; Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
<div class="line number20 index19 alt1"><code class="html spaces">  </code><code class="html plain">&lt;/ </code><code class="html keyword">article </code><code class="html plain">&gt;</code></div>
<div class="line number21 index20 alt2 highlighted"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">img </code> <code class="html color1">src </code><code class="html plain">= </code><code class="html string">"images / img-parallaxsample01.jpg" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"sprite" </code> <code class="html color1">data-speed </code><code class="html plain">= </code><code class="html string">"2" </code> <code class="html color1">data-offsety </code><code class="html plain">= </code><code class="html string">"1600" </code> <code class="html plain">/&gt;</code></div>
<div class="line number22 index21 alt1"><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
<div class="line number23 index22 alt2"></div>
<div class="line number24 index23 alt1"><code class="html plain">&lt; </code><code class="html keyword">section </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"theend" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"content" </code><code class="html plain">&gt;</code></div>
<div class="line number25 index24 alt2 highlighted"><code class="html spaces">  </code><code class="html plain">&lt; </code><code class="html keyword">H2 </code> <code class="html color1">ID </code><code class="html plain">= </code><code class="html string">"toc-the-end1" </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"sprite" </code> <code class="html color1">data-speed </code><code class="html plain">= </code><code class="html string">"0.8" </code> <code class="html color1">data-offsety </code><code class="html plain">= </code><code class="html string">"4180" </code><code class="html plain">&gt; The End &lt;/ </code><code class="html keyword">h2 </code><code class="html plain">&gt;</code></div>
<div class="line number26 index25 alt1"><code class="html plain">&lt;/ </code><code class="html keyword">section </code><code class="html plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span class="">jQuery에서 액션을 지정할 때 매개 변수를 </span><span class="bold cybercyan">HTML5의 기능인 자체 데이터 속성</span><span class=""> 을 사용하여 지정합니다.</span></p>
<ul>
<li>data-speed</li>
<li>data-offsety</li>
</ul>
<p>자체 데이터 속성은 HTML 네임 스페이스에 속하지 않는 특성을 말하며, 코더가 독자적으로 정의 할 수 있습니다. <a class="bold" href="http://jquerymobile.com/" target="_blank" rel="noopener">jQuery Mobile</a> (http://jquerymobile.com/)을 한번이라도 만진 적이있는 사람이라면 그 용도는 이해할 수 있을겁니다.</p>
<p>더 자세히 알고 싶은 분은 <a href="http://www.html5.jp/tag/attributes/data.html" target="_blank" rel="noopener">이 페이지</a>(http://www.html5.jp/tag/attributes/data.html) 를 참조하십시오.</p>
<p>다음 JavaScript의 구현입니다. 우선 <span class="bold">배경 이미지가 천천히 위로 움직여가는 처리</span> 만을 구현합니다.</p>
<p class="bold">JavaScript</p>
<div>
<div id="highlighter_890351" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">$ window = $ (window);</code></div>
<div class="line number3 index2 alt2"></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">  </code><code class="jscript plain">$ ( </code><code class="jscript string">'.content' </code><code class="jscript plain">) .each ( </code><code class="jscript keyword">function </code><code class="jscript plain">(index) {</code></div>
<div class="line number5 index4 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">$ self = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">);</code></div>
<div class="line number6 index5 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">offsetCoords = $ self.offset ();</code></div>
<div class="line number7 index6 alt2"></div>
<div class="line number8 index7 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number9 index8 alt2"><code class="jscript spaces">      </code><code class="jscript comments">// If this section is in view</code></div>
<div class="line number10 index9 alt1"><code class="jscript spaces">      </code><code class="jscript keyword">if </code> <code class="jscript plain">(($ window.scrollTop () + $ window.height ())&gt; offsetCoords.top &amp;&amp; ((offsetCoords.top + $ self.height ())&gt; $ window.scrollTop ())) {</code></div>
<div class="line number11 index10 alt2"><code class="jscript spaces">        </code><code class="jscript keyword">var </code> <code class="jscript plain">yPos = - ($ window.scrollTop () / 8);</code></div>
<div class="line number12 index11 alt1"><code class="jscript spaces">        </code><code class="jscript keyword">if </code> <code class="jscript plain">($ self.attr ( </code><code class="jscript string">'id' </code><code class="jscript plain">)! = </code><code class="jscript string">'first' </code><code class="jscript plain">) {</code></div>
<div class="line number13 index12 alt2"><code class="jscript spaces">          </code><code class="jscript plain">yPos + = 126;</code></div>
<div class="line number14 index13 alt1"><code class="jscript spaces">        </code><code class="jscript plain">}</code></div>
<div class="line number15 index14 alt2"><code class="jscript spaces">        </code><code class="jscript keyword">var </code> <code class="jscript plain">coords = </code><code class="jscript string">'50 % ' </code> <code class="jscript plain">+ yPos + </code><code class="jscript string">'px' </code><code class="jscript plain">;</code></div>
<div class="line number16 index15 alt1"><code class="jscript spaces">        </code><code class="jscript plain">$ self.css ( </code><code class="jscript string">'backgroundPosition' </code><code class="jscript plain">, coords);</code></div>
<div class="line number17 index16 alt2"><code class="jscript spaces">      </code><code class="jscript plain">}</code></div>
<div class="line number18 index17 alt1"><code class="jscript spaces">    </code><code class="jscript plain">});</code></div>
<div class="line number19 index18 alt2"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number20 index19 alt1"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>여기까지 구현되면 일단 브라우저에서 확인해보십시오. 스크롤 할 것으로 각 섹션의 배경 이미지가 천천히 위로 움직이고있는 것이 알 수 있을까 생각합니다.</p>
<p>다음 스프라이트의 움직임을 구현합니다. 다음과 같이 코드를 추가 기입합니다.</p>
<div>
<div id="highlighter_393806" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1 highlighted">18</div>
<div class="line number19 index18 alt2 highlighted">19</div>
<div class="line number20 index19 alt1 highlighted">20</div>
<div class="line number21 index20 alt2 highlighted">21</div>
<div class="line number22 index21 alt1 highlighted">22</div>
<div class="line number23 index22 alt2 highlighted">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number2 index1 alt1"><code class="jscript spaces">  </code><code class="jscript keyword">var </code> <code class="jscript plain">$ window = $ (window);</code></div>
<div class="line number3 index2 alt2"></div>
<div class="line number4 index3 alt1"><code class="jscript spaces">  </code><code class="jscript plain">$ ( </code><code class="jscript string">'.content' </code><code class="jscript plain">) .each ( </code><code class="jscript keyword">function </code><code class="jscript plain">(index) {</code></div>
<div class="line number5 index4 alt2"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">$ self = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">);</code></div>
<div class="line number6 index5 alt1"><code class="jscript spaces">    </code><code class="jscript keyword">var </code> <code class="jscript plain">offsetCoords = $ self.offset ();</code></div>
<div class="line number7 index6 alt2"></div>
<div class="line number8 index7 alt1"><code class="jscript spaces">    </code><code class="jscript plain">$ (window) .scroll ( </code><code class="jscript keyword">function </code><code class="jscript plain">() {</code></div>
<div class="line number9 index8 alt2"><code class="jscript spaces">      </code><code class="jscript comments">// If this section is in view</code></div>
<div class="line number10 index9 alt1"><code class="jscript spaces">      </code><code class="jscript keyword">if </code> <code class="jscript plain">(($ window.scrollTop () + $ window.height ())&gt; offsetCoords.top &amp;&amp; ((offsetCoords.top + $ self.height ())&gt; $ window.scrollTop ())) {</code></div>
<div class="line number11 index10 alt2"><code class="jscript spaces">        </code><code class="jscript keyword">var </code> <code class="jscript plain">yPos = - ($ window.scrollTop () / 8);</code></div>
<div class="line number12 index11 alt1"><code class="jscript spaces">        </code><code class="jscript keyword">if </code> <code class="jscript plain">($ self.attr ( </code><code class="jscript string">'id' </code><code class="jscript plain">)! = </code><code class="jscript string">'first' </code><code class="jscript plain">) {</code></div>
<div class="line number13 index12 alt2"><code class="jscript spaces">          </code><code class="jscript plain">yPos + = 126;</code></div>
<div class="line number14 index13 alt1"><code class="jscript spaces">        </code><code class="jscript plain">}</code></div>
<div class="line number15 index14 alt2"><code class="jscript spaces">        </code><code class="jscript keyword">var </code> <code class="jscript plain">coords = </code><code class="jscript string">'50 % ' </code> <code class="jscript plain">+ yPos + </code><code class="jscript string">'px' </code><code class="jscript plain">;</code></div>
<div class="line number16 index15 alt1"><code class="jscript spaces">        </code><code class="jscript plain">$ self.css ( </code><code class="jscript string">'backgroundPosition' </code><code class="jscript plain">, coords);</code></div>
<div class="line number17 index16 alt2"></div>
<div class="line number18 index17 alt1 highlighted"><code class="jscript spaces">        </code><code class="jscript comments">// Check for other sprites in this section</code></div>
<div class="line number19 index18 alt2 highlighted"><code class="jscript spaces">        </code><code class="jscript plain">$ ( </code><code class="jscript string">'.sprite' </code><code class="jscript plain">$ self) .each ( </code><code class="jscript keyword">function </code><code class="jscript plain">(index) {</code></div>
<div class="line number20 index19 alt1 highlighted"><code class="jscript spaces">          </code><code class="jscript keyword">var </code> <code class="jscript plain">$ sprite = $ ( </code><code class="jscript keyword">this </code><code class="jscript plain">);</code></div>
<div class="line number21 index20 alt2 highlighted"><code class="jscript spaces">          </code><code class="jscript keyword">var </code> <code class="jscript plain">yPos = - ($ window.scrollTop () / $ sprite.data ( </code><code class="jscript string">'speed' </code><code class="jscript plain">)) + $ sprite.data ( </code><code class="jscript string">'offsety' </code><code class="jscript plain">);</code></div>
<div class="line number22 index21 alt1 highlighted"><code class="jscript spaces">          </code><code class="jscript plain">$ sprite.css ( </code><code class="jscript string">'top' </code><code class="jscript plain">, yPos);</code></div>
<div class="line number23 index22 alt2 highlighted"><code class="jscript spaces">        </code><code class="jscript plain">});</code></div>
<div class="line number24 index23 alt1"><code class="jscript spaces">      </code><code class="jscript plain">}</code></div>
<div class="line number25 index24 alt2"><code class="jscript spaces">    </code><code class="jscript plain">});</code></div>
<div class="line number26 index25 alt1"><code class="jscript spaces">  </code><code class="jscript plain">});</code></div>
<div class="line number27 index26 alt2"><code class="jscript plain">});</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>HTML 측에서 지정한 데이터 속성 값은 다음과 같이 JavaScript 측에서 참조 할 수 있습니다.</p>
<div>
<div id="highlighter_134239" class="syntaxhighlighter html">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="html plain">&lt; </code><code class="html keyword">P </code> <code class="html color1">class </code><code class="html plain">= </code><code class="html string">"logo sprite" </code> <code class="html color1">data-speed </code><code class="html plain">= </code><code class="html string">"-1.5" </code> <code class="html color1">data-offsety </code><code class="html plain">= </code><code class="html string">"100" </code><code class="html plain">&gt; jQUery x HTML5 x CSS3 &lt;/ </code><code class="html keyword">p </code><code class="html plain">&gt;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div id="highlighter_923244" class="syntaxhighlighter jscript">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="jscript plain">$ ( </code><code class="jscript string">'.logo' </code><code class="jscript plain">) .data ( </code><code class="jscript string">'speed' </code><code class="jscript plain">); </code><code class="jscript comments">// -1.5</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<ul>
<li><a href="http://wakamsha.github.com/dev.cm/jhc-study/06/7-jqueryxcss.html" target="_blank" rel="noopener">View demo</a> : http://wakamsha.github.io/dev.cm/jhc-study/06/7-jqueryxcss.html</li>
</ul>
<p>&nbsp;</p>
<h2 id="toc-1">참고 사이트</h2>
<ul class="links">
<li><a href="http://matome.naver.jp/odai/2133464270676788701" target="_blank" rel="noopener">패럴 랙스 효과 jQuery 플러그인 정리</a></li>
<li><a href="http://www.awwwards.com/20-great-websites-with-parallax-scrolling.html" target="_blank" rel="noopener">30 great websites with parallax scrolling</a></li>
<li><a href="http://www.silverbackapp.com/" target="_blank" rel="noopener">SilverBack </a><span class="ash small">※ 상당히 이전 사이트이지만, 창 폭을 이동함으로써 얻을 수있는 패럴 랙스 효과는 당시로서는 참신한 물건이었습니다.</span></li>
</ul>
<p>출처: <a href="http://bienmm.tistory.com/45">http://bienmm.tistory.com/45</a> [비앤개발메모]</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/169/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">169</post-id>	</item>
		<item>
		<title>DOCTYPE 선언의 중요성과 참고자료</title>
		<link>http://uxcss.com/wp/archives/167</link>
					<comments>http://uxcss.com/wp/archives/167#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Sun, 30 Sep 2018 07:27:22 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=167</guid>

					<description><![CDATA[Document Type Definition 는 브라우저 랜더링 모드를 지정해주고 유효성 검증기의 기준이 되므로 XHTML 문서의 상단에 반드시 선언해 주어야 한다. 만일 DTD 를 생략 하거나 형식이 잘못된 문서일 경우에는 웹 브라우저마다 코드의 <span class="readmore"><a href="http://uxcss.com/wp/archives/167">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<div>
<p><strong><span style="color: #ffffff;">Document Type Definition 는 브라우저 랜더링 모드를 지정해주고 유효성 검증기의 기준이 </span>되므로 XHTML 문서의 상단에 반드시 선언해 주어야 한다. 만일 DTD 를 생략 하거나 형식이 잘못된 문서일 경우에는 웹 브라우저마다 코드의 해석방식이 다른 Quirks mode 로 렌더링이 되기 때문에 엉뚱한 결과물로 출력되는 문제에 직면하게 된다.</p>
<p>DTD 기본형식.<br />
&lt;!DOCTYPE<br />
<span style="color: #e31600;">이 문서는</span><br />
html<br />
① <span style="color: #e31600;">HTML 문서로서</span><br />
PUBLIC<br />
① <span style="color: #e31600;">국제적이며</span><br />
&#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; </strong><strong><span style="color: #e31600;"><br />
<span style="color: #717171;">② </span>비공인인증인 W3C기관에 의해 XHTML 1.0을 Transitional 방식으로 영어공용어로 출력하며</span><br />
&#8220;</strong><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</strong></a><strong>&#8221;<br />
③ <span style="color: #e31600;">참조할 DTD 문서는&#8221;</span></strong><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank" rel="noopener"><span style="color: #e31600;"><strong>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</strong></span></a><strong><span style="color: #e31600;">&#8221; 이거다 </span></p>
<p>이런 식으로 되있으며<br />
① 최상위 엘리먼트네임<br />
② 국제적,공용 or 내부적 제한용<br />
<span style="color: #717171;">③ </span>ISO공인인증기관 또는 비공인인증기관 등 본문서가 어디에서 만든 DTD를 사용하는 가에 대한 내용이다. 공인 인증기관 일경우 &#8220;+&#8221;를 비공인인증기관일경우엔 &#8220;-&#8220;를 사용한다. 참고로 W3C는 비공인 인증기관이다.</p>
<p>DOCTYPE 정의</p>
<p></strong></p>
<div class="txc-textbox"><strong>  &#8211; DOCTYPE은 브라우저에게 웹페이지의 <u>문서 종류를 알려주는 선언문</u>이다.<br />
&#8211; DOCTYPE은 HTML 태그가 아닌, DTD로 정의되어 있다.<br />
&#8211; DOCTYPE은 웹페이지에서 <u>제일 처음에 선언</u>되어야 한다.<br />
&#8211; DOCTYPE은 브라우저가 올바른 화면표시(rendering)를 하기 위해 필요하다.<br />
&#8211; DOCTYPE을 선언하지 않는다면, <u>브라우저는 호환모드(quirks mode)로 웹페이지를 해석</u>해서 화면표시를 한다.<br />
하지만 </strong><u><strong>호환모드일 경우, 브라우저별로 정확한 화면표시를 보장할 수 없다.<br />
</strong></u></div>
<p><strong><br />
XHTML 1.0  Doctypes</p>
<p></strong></p>
<div class="txc-textbox"><strong>  &#8211; strict : 선언된 XHTML 버전의 문법과 구조를 정확하게 사용한다. frameset(iframe, frame)이나 지원하지 않는<br />
태그를 사용해서는 안된다.<br />
</strong><strong>  </strong><strong><br />
&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Strict//EN&#8221;<br />
&#8220;</strong><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/xhtml1/DTD/xhtml1-</strong></a><strong>strict.dtd&#8221;&gt;</p>
<p>&#8211; Transitional : 단어의 뜻 그대로 과도기적으로 사용하기 위한 선언이다. 호환성을 위해서 strict보다 유연하다.<br />
선언된 XHTML 버전 이외의  문법과 구조를 허용한다.</p>
<p>&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221;<br />
&#8220;</strong><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</strong></a><strong>&#8220;&gt;</p>
<p>&#8211; Frameset : Transitional속성과 더불어, frameset(iframe, frame)을 지원한다.</p>
<p>&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.0 Frameset//EN&#8221;<br />
&#8220;</strong><a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd</strong></a><strong>&#8220;&gt;<br />
</strong></div>
<p><strong>* Transitional에서 frameset을 사용해도 화면표시가 일어난다. frameset은 문서의 구조에 관한 태그이기 때문이<br />
다. 사실 Frameset은 Transitional과 동일하게 취급된다.</p>
<p>XHTML 1.1</p>
<p></strong></p>
<div class="txc-textbox"><strong>  &#8211; strict : 선언된 XHTML 버전의 문법과 구조를 정확하게 사용한다. frameset(iframe, frame)이나 지원하지 않는<br />
태그를 사용해서는 안된다.</p>
<p>&lt;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD XHTML 1.1//EN&#8221;<br />
&#8220;</strong><a href="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd</strong></a><strong>&#8220;&gt;<br />
</strong></div>
<p><strong>* XHTML 1.1에서는 Transitional과 Frameset이 없어지고, strict만 남았다. 사실 XHTML의 특성상 모호한 것들<br />
을 지원하는 것은 사리에 맞지 않는다. XHTML의 문법은 엄격한게 정의되어 있기 때문이다.</p>
<p>HTML</p>
<p></strong></p>
<div class="txc-textbox"><strong>  &#8211; strict : 선언된 HTML 버전의 문법과 구조를 정확하게 사용한다. 지원하지 않는 태그를 사용해서는 안된다.</p>
<p>&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01//EN&#8221; &#8220;</strong><a href="http://www.w3.org/TR/html4/strict.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/html4/strict.dtd</strong></a><strong>&#8220;&gt;</p>
<p>&#8211; Transitional : 단어의 뜻 그대로 과도기적으로 사용하기 위한 선언이다. 호환성을 위해서 strict보다 유연하다.<br />
선언된 HTML 버전 이외의  문법과 구조를 허용한다.</p>
<p>&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;<br />
&#8220;</strong><a href="http://www.w3.org/TR/html4/loose.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/html4/loose.dtd</strong></a><strong>&#8220;&gt;</p>
<p>&#8211; Frameset : Transitional속성과 더불어, frameset(iframe, frame)을 지원한다.</p>
<p>&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Frameset//EN&#8221;<br />
&#8220;</strong><a href="http://www.w3.org/TR/html4/frameset.dtd" target="_blank" rel="noopener"><strong>http://www.w3.org/TR/html4/frameset.dtd</strong></a><strong>&#8220;&gt;<br />
</strong></div>
<p><strong><br />
* Transitional에서 frameset은 위의 XHTML 1.0과 같은 관계이다.</p>
<p>strict DOCTYPE의 필요성</p>
<p>현재 우리나라 대부분의 웹사이트는 Transitional DOCTYPE을 사용하고 있다. 웹사이트가 완전히 새롭게 제작되지 않는한 기존에 사용하고 있던 태그들을 지원해야 하기 때문이다. 사실 이론상으로는 strict DOCTYPE의 해석이 다른 DOCTYPE보다 브라우저상에서 빠르다고 한다. 하지만 PC나 브라우저의 발전속도를 볼때 그것이 뛰어난 장점이라고는 생각하지 않는다. 그렇다면 strict DOCTYPE은 의미가 없다고 생각될지 모른다.</p>
<p>하지만 그렇지 않다. 오히려 앞으로 strict DOCTYPE의 중요성이 더욱 커질 것이다. 왜냐하면 빠른 속도로 웹페이지로의 접근 디바이스가<u> 모바일 디바이스</u>로 바뀌고 있기 때문이다. PC보다 제한된 환경에서 웹페이지를 표현해야 하는 모바일환경에서는 strict의 엄격한 제한은 많은 리소스를 투입하지 않고도 화면표시(랜더링)를 할 수 있게 해줄것이다.</p>
<p>또한 <u>웹봇</u>(일종의 자동화된 크롤러, 특정 목적을 가진 크롤러)이 웹페이지를 분석할 경우에도 strict DOCTYPE일 경우, 정해진 문법과 구조상에서 훨씬 정확하게 내용분석이 가능해 질것이다.</p>
<p>* 참조 : 브라우저별 DOCTYPE 해석표</p>
<p>원본 : </strong><a href="http://meyerweb.com/eric/dom/dtype/dtype-grid.html" target="_blank" rel="noopener"><strong>http://meyerweb.com/eric/dom/dtype/dtype-grid.html</strong></a></p>
<table id="legend">
<thead>
<tr>
<th>Entry</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td class="entry qrks"><strong>Q</strong></td>
<td class="meaning"><strong>Quirks mode</strong></td>
</tr>
<tr>
<td class="entry alst"><strong>A</strong></td>
<td class="meaning"><strong>Almost-standards mode</strong></td>
</tr>
<tr>
<td class="entry stnd">S</td>
<td class="meaning"><strong>Standards mode</strong></td>
</tr>
<tr>
<td class="entry"><strong>&#8211;</strong></td>
<td class="meaning"><strong>Status unknown</strong></td>
</tr>
</tbody>
</table>
<p id="updated">
<table id="dtypeGrid">
<thead>
<tr>
<th>DOCTYPE given</th>
<th class="nn60">NN6.x</th>
<th class="nn70">NN7.0</th>
<th>Moz1.0</th>
<th class="ie5mac">IE5/Mac</th>
<th class="ie6win">IE6/Win</th>
<th class="ie7win">IE7/Win</th>
</tr>
</thead>
<tbody>
<tr>
<th>No DOCTYPE given</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>Unrecognized DOCTYPE</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>Unrecognized DOCTYPE + URI</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 2.0</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 3.0</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 3.2</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 3.2 + URI</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 4.0 Strict</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.0 Strict + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.0 Transitional</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 4.0 Transitional + URI</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.0 Frameset</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 4.0 Frameset + URI</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.01 Strict</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.01 Strict + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.01 Transitional</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 4.01 Transitional + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>HTML 4.01 Frameset</th>
<td class="nn6x qrks"><strong>Q</strong></td>
<td class="nn70 qrks"><strong>Q</strong></td>
<td class="moz1 qrks"><strong>Q</strong></td>
<td class="ie5mac qrks"><strong>Q</strong></td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win qrks"><strong>Q</strong></td>
</tr>
<tr>
<th>HTML 4.01 Frameset + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Strict</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Strict + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Transitional</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Transitional + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Frameset</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Frameset + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win stnd">S</td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Strict w/XML</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Strict w/XML + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Transitional w/XML</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Transitional w/XML + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Frameset w/XML</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>XHTML 1.0 Frameset w/XML + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 alst"><strong>A</strong></td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win qrks"><strong>Q</strong></td>
<td class="ie7win stnd">S</td>
</tr>
<tr>
<th>Any XML</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win"><strong>&#8211;</strong></td>
<td class="ie7win"><strong>&#8211;</strong></td>
</tr>
<tr>
<th>Any XML + URI</th>
<td class="nn6x stnd">S</td>
<td class="nn70 stnd">S</td>
<td class="moz1 stnd">S</td>
<td class="ie5mac stnd">S</td>
<td class="ie6win"><strong>&#8211;</strong></td>
<td class="ie7win"><strong>&#8211;</strong></td>
</tr>
</tbody>
</table>
</div>
<div class="plus_area">
<div class="view"><strong> </strong></div>
</div>
<p>출처: <a href="http://maen2001.tistory.com/2">http://maen2001.tistory.com/2</a> [감성 퍼블리셔 html,css]</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/167/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">167</post-id>	</item>
		<item>
		<title>CSS: 선택자(Selector) 이해</title>
		<link>http://uxcss.com/wp/archives/165</link>
					<comments>http://uxcss.com/wp/archives/165#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Fri, 28 Sep 2018 00:37:17 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=165</guid>

					<description><![CDATA[1. CSS 선택자(Selector)란? 선택자란 말 그대로 선택을 해주는 요소입니다. 이를 통해 특정 요소들을 선택하여 스타일을 적용할 수 있게 됩니다. 먼저 CSS에서 스타일이 어떤 방식으로 정의되는지 알아봅시다. 1.1 Rule Set Rule <span class="readmore"><a href="http://uxcss.com/wp/archives/165">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<h2 id="1cssselector">1. CSS 선택자(Selector)란?</h2>
<p>선택자란 말 그대로 선택을 해주는 요소입니다. 이를 통해 특정 요소들을 선택하여 스타일을 적용할 수 있게 됩니다. 먼저 CSS에서 스타일이 어떤 방식으로 정의되는지 알아봅시다.</p>
<h3 id="11ruleset">1.1 Rule Set</h3>
<p>Rule Set(Rule)은 HTML페이지 안의 특정 요소들을 어떻게 렌더링(Rendering) 할 것인지 브라우저에게 알려주는 CSS 문장입니다. 스타일 규칙이라고도 불리는 이 문장은 스타일에 관한 규칙들을 집합처럼 나타냅니다.</p>
<figure><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140327-selector-04.png?w=840" alt="" data-recalc-dims="1" /><figcaption>[그림 1] Rule Set</figcaption></figure>
<p>이런 문장들을 한군데에 모으면 스타일 시트(Style Sheet)를 이루게 되어, 많은 수의 스타일 규칙들을 관리하기 쉬워집니다.</p>
<p>1.2 선택자(Selector)</p>
<p>위쪽 [그림 1]을 다시 보시면, Rule Set 제일 앞 부분의 선택자 요소를 볼 수 있는데요. 왼쪽 중괄호 &#8220;{&#8220;가 나오기 전의 부분 모두가 선택자입니다. 선택자는 Rule Set의 영향을 받는 HTML페이지 안의 특정 element들을 선택해서 선언 블록(Declaration Block)의 내용을 적용시켜 줍니다.</p>
<p>참고)<br />
@media print { background-color: transparent; } “@”키워드로 시작하는 문장은 Rule Set이 아닌 At-Rule이기 때문에 위 문장에서의 중괄호 전 부분은 선택자가 아닙니다.</p>
<h2 id="2selector">2. 선택자(Selector)의 종류</h2>
<p>디자인 요소를 의도에 알맞게 적용하기 위해서는 많은 종류의 선택자를 잘 혼합해서 사용하는 것이 중요합니다. 그 종류와 CSS 레벨, 지원하지 않는 브라우저 버전을 함께 알아봅니다.</p>
<h3 id="21universalselector">2.1 전체 선택자(Universal Selector)</h3>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>*</td>
<td>HTML페이지 내부의 모든 태그를 선택합니다.</td>
<td>2</td>
<td>&#8211;</td>
</tr>
</tbody>
</table>
<pre><code>/* CSS */
* { margin: 0; text-decoration: none; }
</code></pre>
<p><em>[예제 1] 전체 선택자</em></p>
<p>전체 선택자는 HTML페이지 내부의 모든 요소(태그)에 같은 CSS속성을 적용합니다. 그렇기 때문에 보통 [예제 1]처럼 margin이나 padding값을 초기화하는 등 기본값을 정해둘 때 사용합니다. 하지만 이를 사용하면 문서안의 모든 요소를 읽어내려야 하기 때문에 페이지 로딩의 속도가 느려질 수 있습니다. 따라서 자주 사용하지 않는 것이 좋습니다.</p>
<h3 id="22typeselector">2.2 태그 선택자(Type Selector)</h3>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E</td>
<td>태그명이 E인 특정 태그를 선택합니다.</td>
<td>2</td>
<td>&#8211;</td>
</tr>
</tbody>
</table>
<pre><code>/* CSS */
p { background: yellowgreen; color: darkgreen; }

&lt;!-- HTML --&gt;  
&lt;p&gt;태그 선택자(Type Selector)&lt;/p&gt;  
&lt;div&gt;태그 선택자(Type Selector)&lt;/div&gt;  
</code></pre>
<p><em>[예제 2] 태그 선택자</em></p>
<p>태그 선택자는 HTML요소를 직접 지칭하는 가장 간단한 선택자입니다. [예제 2]를 보시면 CSS에서</p>
<p>태그에 대한 스타일만 지정이 되어있으므로,</p>
<div>태그에는 개발자가 지정해주는 스타일이 적용되지 않습니다.</p>
<h3 id="23classselector">2.3 클래스 선택자(Class Selector)</h3>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>.myClass</td>
<td>클래스 속성값이 myClass으로 지정된 요소를 선택합니다.</td>
<td>1</td>
<td>&#8211;</td>
</tr>
</tbody>
</table>
<pre><code>/* CSS */
.class1 { background: yellowgreen; color: darkgreen; }
div.class2 { background: darkgreen; color: yellowgreen; }

&lt;!-- HTML --&gt;  
&lt;p class="class1"&gt;클래스 선택자(Class Selector)&lt;/p&gt;  
&lt;p class="class2"&gt;클래스 선택자(Class Selector)&lt;/p&gt;  
&lt;div class="class2"&gt;클래스 선택자(Class Selector)&lt;/div&gt;  
</code></pre>
<p><em>[예제 3] 클래스 선택자</em></p>
<p>클래스 선택자는 주어진 값을 class속성값으로 가진 HTML요소를 찾아 선택합니다. 이때 선택하려는 속성값 앞에 마침표를 추가해서 작성합니다. [예제 3] CSS 코드의 첫번째 스타일 규칙은 class1이라는 class 속성값을 가진 모든 태그를 선택합니다. 하지만 두번째 스타일 규칙처럼 마침표 앞에 태그를 붙여주면 범위를 그 특정 태그에 한합니다. 결국 HTML 코드의 두번째</p>
<p>태그 부분은 class 속성값이 class2임에도 선택되지 않습니다.</p>
<p><strong>클래스 선택자를 사용하기 전에 생각해야 할 부분</strong></p>
<ol>
<li>class요소 대신 사용할 수 있는 HTML 태그가 있는지 확인합니다.<br />
한가지 예를 들어보겠습니다. heading처리한 글씨처럼 보이기 위하여 <code>&lt;h1&gt;</code>과 같은 태그 대신 class선택자를 사용하여 스타일 속성을 줄 수 있습니다. 하지만 이렇게 사용하면 스타일 시트를 적용하지 못하는 (극히 일부일지라도) 브라우저에서는 제목의 기능을 하지 못할 수 있습니다. 그래서, 가능한 올바른 HTML요소를 사용하고 스타일은 따로 적용해야 합니다. 결국 클래스는 HTML태그. 즉 구조를 대신할 수 없습니다.</li>
<li>DOM트리 상단에 사용되는 클래스나 ID가 있는지 확인합니다.<br />
불필요하게 많은 class선택자를 사용할 필요는 없습니다. DOM트리 상단에 같은 스타일을 공유하는 클래스나 ID가 있다면, 새로 클래스 선택자를 사용할 필요없이 함께 사용하면 됩니다.</li>
</ol>
<h3 id="24ididselector">2.4 ID 선택자(ID Selector)</h3>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>#myId</td>
<td>id 속성값이 myId로 지정된 요소를 선택합니다.</td>
<td>1</td>
<td>&#8211;</td>
</tr>
</tbody>
</table>
<pre><code>/* CSS */
#id1 { background: yellowgreen; color: darkgreen; }
div#id2 { background: darkgreen; color: yellowgreen; }

&lt;!-- HTML --&gt;  
&lt;p id="id1"&gt;ID 선택자(ID Selector)&lt;/p&gt;  
&lt;p id="id2"&gt;ID 선택자(ID Selector)&lt;/p&gt;  
&lt;div id="id2"&gt;ID 선택자(ID Selector)&lt;/div&gt;  
</code></pre>
<p><em>[예제 4] ID 선택자</em></p>
<p>ID선택자는 마침표 대신 #를 사용하고, class속성이 아닌 id속성을 사용하는 것을 제외하곤 클래스 선택자와 매우 유사합니다. 따라서 [예제4] 역시 [예제3]과 같은 결과가 나옵니다. 하지만 이 둘 사이엔 어떤 문자를 사용하느냐보다 더 중요한 차이점이 있습니다.</p>
<p><strong>클래스 선택자를 써야 할까요? ID선택자를 써야 할까요?</strong></p>
<p>비슷하게 사용되는 두 선택자 중 어떤 것을 사용해야 할지 고민에 빠지는 경우가 생길 수 있습니다. 그럴땐 다음 네 가지를 고려해보면 됩니다.</p>
<ol>
<li>한 페이지 내에서 여러 번 반복될 필요가 있는 스타일은 클래스 선택자를 사용하고, 단 한번 유일하게 적용될 스타일은 ID선택자를 사용하는 것이 좋습니다. 이는 다음과 같은 두 속성의 차이 때문입니다.
<ul>
<li>class속성은 어떤 분류 안에 포함된 요소의 특성을 정의하는 데 사용됩니다.</li>
<li>id속성은 어떤 요소에 대해 유일한 특성을 정의합니다. (HTML 문서에서 특정 id속성값은 오직 하나만 있어야 합니다.)</li>
</ul>
</li>
<li>클래스 선택자는 글자색이나 글자 굵기 등 나중에 다른 곳에도 적용할 수 있는 스타일을 지정하고, ID선택자는 웹 문서 안에서 요소의 배치 방법을 지정할 때 자주 사용합니다.</li>
<li>class 속성은 속성값을 두 개 이상 가질 수 있습니다. 그래서 클래스 선택자를 사용하면 한 태그 내에서도 여러종류의 스타일 규칙을 적용할 수 있습니다.</li>
<li>ID선택자의 우선순위가 클래스 선택자의 우선순위보다 높습니다. 우선으로 적용되어야 할 스타일을 ID선택자를 사용하여 정의하는 것이 좋습니다. (선택자 우선순위는 뒤에서 다시 언급합니다.)</li>
</ol>
<h3 id="25combinator">2.5 복합 선택자(Combinator)</h3>
<p>복합 선택자는 두 개 이상의 선택자 요소가 모인 선택자입니다. (이는 꼭 태그 선택자 간의 결합이 아니어도 됩니다.)</p>
<p><strong>하위 선택자(Descendant Combinator)와 자식 선택자(Child Combinator)</strong></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E F</td>
<td>E 요소의 자손인 F 요소를 선택합니다.</td>
<td>1</td>
<td>&#8211;</td>
</tr>
<tr>
<td>E&gt;F</td>
<td>E 요소의 자식인 F 요소를 선택합니다.</td>
<td>2</td>
<td>IE6</td>
</tr>
</tbody>
</table>
<pre><code class="language-            ">/* CSS */
/* 하위 선택자 */
section ul { border: 1px dotted black; }

/* 자식 선택자 */
section&gt;ul { border: 1px dotted black; }  
</code></pre>
<p><em>[예제 5] 하위 선택자와 자식 선택자</em></p>
<p>태그들이 포함 관계를 가질 때 포함하는 요소를 부모 요소, 포함되는 요소를 자식 요소라고 합니다. 하위 선택자는 부모 요소에 포함된 &#8216;모든&#8217; 하위 요소에 스타일을 적용합니다. 하지만, 자식 선택자는 부모의 바로 아래 자식 요소에만 적용합니다. [예제 5]를 통해 선택되는 요소는 다음과 같습니다.</p>
<table border="0">
<colgroup>
<col width="50%" />
<col width="50%" /></colgroup>
<tbody>
<tr>
<td>
<figure><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140331-selector-06.png?w=840" alt="" data-recalc-dims="1" /><figcaption>[그림 2] 하위 선택자</figcaption></figure>
</td>
<td>
<figure><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140331-selector-06-2.png?w=840" alt="" data-recalc-dims="1" /><figcaption>[그림 3] 자식 선택자</figcaption></figure>
</td>
</tr>
</tbody>
</table>
<p><em>인접 형제 선택자(Adjacent Sibling Combinator)와 일반 형제 선택자(General Sibling Combinator)</em></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E+F</td>
<td>E 요소를 뒤따르는 F 요소를 선택합니다.<br />
(E와 F 사이에 다른 요소가 존재하면 선택하지 않습니다.)</td>
<td>2</td>
<td>IE6</td>
</tr>
<tr>
<td>E~F</td>
<td>E 요소가 앞에 존재하면 F를 선택합니다.<br />
(E가 F보다 먼저 등장하지 않으면 선택하지 않습니다.)</td>
<td>3</td>
<td>IE6</td>
</tr>
</tbody>
</table>
<pre><code class="language-            ">/* CSS */
/* 인접 형제 선택자 */
h1+ul { background: yellowgreen; color: darkgreen; }

/* 일반 형제 선택자 */
h1~ul { background: darkgreen; color: yellowgreen; }  
</code></pre>
<p><em>[예제 6] 인접 형제 선택자와 일반 형제 선택자</em></p>
<p>같은 부모 요소를 가지는 요소들을 형제 관계라고 부릅니다. 이 때 먼저 나오는 요소를 &#8216;형 요소&#8217;, 나중에 나오는 요소를 &#8216;동생 요소&#8217;라고 합니다. 먼저 나온다는 것은 html문서에 먼저 쓰여지는 것을 말합니다.</p>
<p>인접 형제 선택자는 형제 중 첫번째 동생 요소가 조건을 충족시킬 때에만 스타일을 적용합니다. 하지만 일반 형제 선택자는 조건을 충족하는 모든 동생 요소에 스타일을 적용합니다. 두 선택자 모두 형 요소에는 적용되지 않습니다. [예제 6]을 통해 선택되는 요소는 다음과 같습니다.</p>
<figure><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140331-selector-07.png?w=840" alt="" data-recalc-dims="1" /><figcaption>[그림 4] 인접 형제 선택자</figcaption></figure>
<figure><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140331-selector-08.png?w=840" alt="" data-recalc-dims="1" /><figcaption>[그림 5] 일반 형제 선택자</figcaption></figure>
<h3 id="26attributeselectors">2.6 속성 선택자(Attribute Selectors)</h3>
<p>위에서 살펴본 선택자들은 태그나 클래스 이름, ID이름만 알면 그대로 스타일을 적용할 수 있습니다. 하지만 이제 살펴볼 속성 선택자는 클래스 속성이나 ID속성과 같이 대표적인 속성이 아닌 태그 안의 특정 속성들에 따라 스타일을 지정합니다. 속성 값의 조건에 따라 다양한 스타일을 지정할 수 있기 때문에 활용도가 높은 스타일 지정 방식입니다.</p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E[attr]</td>
<td>&#8216;attr&#8217; 속성이 포함된 요소 E를 선택합니다.</td>
<td>2</td>
<td>IE6</td>
</tr>
<tr>
<td>E[attr=&#8221;val&#8221;]</td>
<td>&#8216;attr&#8217; 속성의 값이 정확하게 &#8216;val&#8217;과 일치하는 요소 E를 선택합니다.</td>
<td>2</td>
<td>IE6</td>
</tr>
<tr>
<td>E[attr~=&#8221;val&#8221;]</td>
<td>&#8216;attr&#8217; 속성의 값에 &#8216;val&#8217;이 포함되는 요소를 선택합니다.<br />
(공백으로 분리된 값이 일치해야 합니다.)</td>
<td>2</td>
<td>IE6</td>
</tr>
<tr>
<td>E[attr^=&#8221;val&#8221;]</td>
<td>&#8216;attr&#8217; 속성의 값이 &#8216;val&#8217;으로 시작하는 요소를 선택합니다.</td>
<td>3</td>
<td>IE6</td>
</tr>
<tr>
<td>E[attr$=&#8221;val&#8221;]</td>
<td>&#8216;attr&#8217; 속성의 값이 &#8216;val&#8217;으로 끝나는 요소를 선택합니다.</td>
<td>3</td>
<td>IE6</td>
</tr>
<tr>
<td>E[attr*=&#8221;val&#8221;]</td>
<td>&#8216;attr&#8217; 속성의 값에 &#8216;val&#8217;이 포함되는 요소를 선택합니다.</td>
<td>3</td>
<td>IE6</td>
</tr>
<tr>
<td>E[attr|=&#8221;val&#8221;]</td>
<td>&#8216;attr&#8217; 속성의 값이 정확하게 &#8216;val&#8217; 이거나<br />
&#8216;val-&#8216; 으로 시작되는 요소 E를 선택합니다.</td>
<td>2</td>
<td>IE6</td>
</tr>
</tbody>
</table>
<pre><code>/* CSS */
/* E[attr]형식 */
a[href] { background: yellowgreen; color: black; }

/* E[attr="val"]형식 */
input[type="text"] { width: 150px; border: 1px solid #000; }

/* E[attr$="val"]형식 */
a[href$=".xls"] { background: darkgreen; }

&lt;!-- HTML --&gt;  
&lt;a href="one.html"&gt;E[attr]형식&lt;/a&gt;  
&lt;input type="text" name="name"&gt;  
&lt;a href="one.xls"&gt;E[attr$="val"]형식&lt;/a&gt;  
</code></pre>
<p><em>[예제 7] 속성 선택자</em></p>
<p>속성 선택자는 모두 앞쪽에 태그명과 대괄호 &#8220;[]&#8221;사이에 속성에 관련된 내용을 넣어서 선택합니다. E[attr=&#8221;val&#8221;]형식은 속성과 속성값이 완벽하게 일치하는 경우에 선택됩니다. 하지만 E[attr~=&#8221;val&#8221;]선택자는 띄어쓰기를 통해 여러개 올 수 있는 속성값 중 하나만 일치해도 선택합니다.</p>
<p>또한 E[attr^=&#8221;val&#8221;]형식은 &#8220;val&#8221;으로 시작하는 속성값을 선택합니다. 예를 들어 웹 문서에서 외부로 연결되는 링크가 있을 경우 <a href="http://xn--2o2b/">http://로</a> 시작하는지 확인하기 위해 이 선택자를 쓸 수 있습니다. 반대로 E[attr$=&#8221;val&#8221;]형식은 &#8220;val&#8221;으로 끝나는 속성값을 선택합니다. 이 선택자는 예제6에 나온 것 처럼 어떤 파일이 링크될 경우, 그 파일의 확장자를 확인하기 위해 쓸 수 있습니다.</p>
<h3 id="27pseudoclasses">2.7 가상 클래스 선택자(Pseudo-Classes)</h3>
<p>가상 클래스는 웹 문서의 소스에는 실제로 존재하지 않지만 필요에 의해 임의로 가상의 선택자를 지정하여 사용하는 것을 말합니다.</p>
<p><strong>링크 선택자(The link pseudo-classes)와 동적 선택자(The user action pseudo-classes)</strong></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::link</td>
<td>방문하지 않은 링크 E를 선택합니다.</td>
<td>1</td>
<td>&#8211;</td>
</tr>
<tr>
<td>E::visited</td>
<td>방문한 링크 E를 선택합니다.</td>
<td>1</td>
<td>&#8211;</td>
</tr>
<tr>
<td>E::active</td>
<td>E 요소에 마우스 클릭 또는 키보드 엔터가 눌린 동안 E를 선택합니다.</td>
<td>1, 2</td>
<td>&#8211;</td>
</tr>
<tr>
<td>E::hover</td>
<td>E 요소에 마우스가 올라가 있는 동안 E를 선택합니다.</td>
<td>1, 2</td>
<td>&#8211;</td>
</tr>
<tr>
<td>E::focus</td>
<td>E 요소에 포커스가 머물러 있는 동안 E를 선택합니다.</td>
<td>1, 2</td>
<td>&#8211;</td>
</tr>
</tbody>
</table>
<p>:link와 :visited는 문서 안의 링크와 관련된 선택자입니다. 나머지 세가지 선택자는 링크 요소뿐만 아니라 다른 요소에도 적용할 수 있습니다. :active선택자는 해당 요소가 활성화된 상태를 선택합니다. 링크요소가 선택된 경우를 예로 들 수 있습니다. :hover선택자는 마우스 포인터가 해당 요소위에 올라가 있는 상태를 선택합니다. 흔히 말하는 롤오버 효과(rollover)를 만드는 선택자입니다. 마지막 :focus선택자는 해당 요소에 초점이 맞춰있는 상태를 선택합니다. 초점이 맞춰졌다는 것은 텍스트 필드 안에 커서가 놓여진 것과 같은 상태를 말합니다.</p>
<p><strong>구조적 가상 클래스 선택자(Structural pseudo-classes)</strong></p>
<p>구조적 가상 클래스 선택자는 위치를 기준으로 삼습니다. 그래서 요소가 몇번째에 있느냐에 따라 스타일을 다르게 지정할 수 있게 해줍니다. 순차적으로 같은 태그의 여러 항목이 있을 경우, 메뉴 간의 스타일을 변경하거나 할 때 이 선택자들이 유용하게 쓰입니다.</p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::root</td>
<td>문서의 최상위 요소(html)를 선택합니다.</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::nth-child(n)</td>
<td>앞으로부터 지정된 순서와 일치하는 요소가 E 라면 선택합니다.<br />
(E 아닌 요소의 순서가 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::nth-last-child(n)</td>
<td>뒤로부터 지정된 순서와 일치하는 요소가 E 라면 선택합니다.<br />
(E 아닌 요소의 순서가 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::nth-of-type(n)</td>
<td>E 요소 중 앞으로부터 순서가 일치하는 E 요소를 선택합니다.<br />
(E 요소의 순서만 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::nth-last-of-type(n)</td>
<td>E 요소 중 끝으로부터 순서가 일치하는 E 요소를 선택합니다.<br />
(E 요소의 순서만 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::first-child</td>
<td>첫 번째 등장하는 요소가 E 라면 선택합니다.<br />
(E 아닌 요소의 순서가 계산에 포함)</td>
<td>2</td>
<td>IE6</td>
</tr>
<tr>
<td>E::last-child</td>
<td>마지막에 등장하는 요소가 E 라면 선택합니다.<br />
(E 아닌 요소의 순서가 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::first-of-type</td>
<td>E 요소 중 첫 번째 E를 선택합니다.(E 요소의 순서만 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::last-of-type</td>
<td>E 요소 중 마지막 E를 선택합니다.(E 요소의 순서만 계산에 포함)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::only-child</td>
<td>E 요소가 유일한 자식이면 선택합니다.<br />
(E 아닌 요소가 하나라도 포함되면 선택하지 않습니다.)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::only-of-type</td>
<td>E 요소가 유일한 타입이면 선택합니다.<br />
(E 아닌 요소가 포함되어도 E 타입이 유일하면 선택합니다.)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::empty</td>
<td>텍스트 및 공백을 포함하여 자식 요소가 없는 E를 선택합니다.</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
</tbody>
</table>
<p><strong>그 외의 선택자</strong></p>
<p><em>언어 선택자(language pseudo-classes)</em></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::lang(ko)</td>
<td>HTML lang 속성의 값이 &#8216;ko&#8217;으로 지정된 요소를 선택합니다.</td>
<td>2</td>
<td>IE6, 7</td>
</tr>
</tbody>
</table>
<p><em>부정 선택자(Negation pseudo-class)</em></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::not(S)</td>
<td>S가 아닌 E 요소를 선택합니다.</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
</tbody>
</table>
<p><em>목적 선택자(The target pseudo-class)</em></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::target</td>
<td>E의 URI가 요청되면 선택합니다.<br />
(따라서 E는 ID가 지정되어 있어야 합니다.)</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
</tbody>
</table>
<p><em>UI요소 상태 선택자(The UI element states pseudo-classes)</em></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::enabled</td>
<td>사용 가능한 폼 콘트롤(input, textarea, select, button) E를 선택합니다.</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::disabled</td>
<td>사용 불가능한 폼 콘트롤(input, textarea, select, button) E를 선택합니다.</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
<tr>
<td>E::checked</td>
<td>선택된 폼 콘트롤(input checked=&#8221;checked&#8221;)을 선택합니다.</td>
<td>3</td>
<td>IE6, 7, 8</td>
</tr>
</tbody>
</table>
<p><em>가상 엘리먼트 선택자(Pseudo-Elements)</em></p>
<table border="1">
<colgroup>
<col width="20%" />
<col width="55%" />
<col width="10%" />
<col width="15%" /></colgroup>
<thead>
<tr>
<th>패턴</th>
<th>의미</th>
<th>CSS Level</th>
<th>지원하지 않는<br />
브라우저</th>
</tr>
</thead>
<tbody>
<tr>
<td>E::first-line</td>
<td>E 요소의 첫 번째 라인을 선택합니다.</td>
<td>1</td>
<td>IE6</td>
</tr>
<tr>
<td>E::first-letter</td>
<td>E 요소의 첫 번째 문자를 선택합니다.</td>
<td>1</td>
<td>IE6</td>
</tr>
<tr>
<td>E::before</td>
<td>E 요소의 시작 지점에 생성된 요소를 선택합니다.</td>
<td>2</td>
<td>IE6, 7</td>
</tr>
<tr>
<td>E::after</td>
<td>E 요소의 끝 지점에 생성된 요소를 선택합니다.</td>
<td>2</td>
<td>IE6, 7</td>
</tr>
</tbody>
</table>
<h2 id="3selector">3. 선택자(Selector) 우선순위</h2>
<p>스타일 시트는 다음과 같은 3개의 CSS원천 소스(Original Source)를 가질 수 있습니다.</p>
<ul>
<li>제작자(author) 원천 소스 : 웹 사이트 제작자가 지정하는 자신의 페이지 스타일</li>
<li>사용자(user) 원천 소스 : 사용자가 직접 정하는 자신이 사용할 스타일</li>
<li>사용자 도구(user agent) 원천 소스 : 웹 브라우저 자체에 지정된 기본 스타일</li>
</ul>
<p>스타일을 적용하는데는 다양한 방법이 있으며 동시에 여러가지 방법을 사용하게 되면 스타일이 충돌할 수 있습니다. 그렇기 때문에 각 원천 소스간은 물론, 선택자 간의 우선순위를 알아야 합니다. 다음의 우선순위 규칙을 통해 원하는 스타일을 정확히 적용할 수 있습니다.</p>
<h3 id="1">1) 원천 소스 우선 순위</h3>
<p>!important 선언을 한 사용자 스타일 &gt; !important 선언을 한 제작자 스타일 &gt; 제작자 스타일 &gt; 사용자 스타일 &gt; 사용자 도구 선언 (브라우저 자체의 선언)</p>
<h3 id="2cssspecificity">2) CSS 명시도(Specificity) 계산법</h3>
<pre><code>!important &gt; id [ 100 ] &gt; class [ 10 ] &gt; tag [ 1 ] &gt; * [ 0 ]
</code></pre>
<p>!important선언을 사용한 형식이 가장 우선 순위가 높습니다. 그래서 다른 선언들을 덮어버릴 수 있기 때문에 꼭 필요한 곳에만 사용해야 합니다.</p>
<p>이를 제외한 나머지 선택자는 대괄호 &#8220;[]&#8221;안에 있는 숫자를 각각의 점수로 부여하여 우선순위를 계산합니다.</p>
<ul>
<li>ID 선택자의 갯수를 세어서 개당 100 으로 계산합니다. (= a)</li>
<li>클래스 선택자의 갯수를 세어서 개당 10 으로 계산합니다. (= b)</li>
<li>태그 선택자의 갯수를 세어서 개당 1 로 계산합니다. (= c)</li>
<li>공용 선택자는 모두 0으로 계산합니다. (= d)</li>
<li>가상 엘리먼트는 무시합니다.</li>
</ul>
<p>→ a + b + c + d의 값이 높은 순서대로 스타일을 적용하는 우선순위를 가지게 됩니다. 다음의 예를 봅시다.</p>
<p><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140331-selector-09--1-.png?w=840" alt="" data-recalc-dims="1" /></p>
<p>초록색으로 표시된 태그 선택자 3개와 빨간색으로 표시된 클래스 선택자 1개로 이루어진 스타일 규칙입니다. 우선순위 규칙에 따라 b의 값은 10×1=10이 되고, c의 값은 1×3=3이 됩니다. 따라서 이 스타일 규칙의 우선순위 값은 13입니다.</p>
<p><img decoding="async" src="https://i0.wp.com/www.nextree.co.kr/content/images/2016/09/yrkim-140331-selector-11.png?w=840" alt="" data-recalc-dims="1" /></p>
<p>초록색으로 표시된 태그 선택자 1개와 파란색으로 표시된 ID 선택자 1개로 이루어진 스타일 규칙입니다. 우선순위 규칙에 따라 a의 값이 100×1=100이 되고, c의 값은 1×1=1이 됩니다. 따라서 이 스타일 규칙의 우선순위 값은 101입니다.</p>
<p>이 두 스타일 규칙이 하나의 html태그에 겹치는 가능한 다음과 같은 경우가 있다고 하면, 우선순위 값이 101인 아래쪽의 스타일 규칙이 적용됩니다.</p>
<pre><code>&lt;ul&gt;  
....
&lt;/ul&gt;  
&lt;ol&gt;  
    &lt;li class="num" id="selector1"&gt;&lt;/li&gt;  /* 아래쪽 스타일 규칙이 적용되는 부분 */
&lt;/ol&gt;  
</code></pre>
<h3 id="3">3) 마지막에 지정된 스타일을 우선 적용합니다.</h3>
<p>스타일 우선순위가 같거나, 계산 방법이 없는 경우 마지막에 지정된 스타일이 우선으로 적용됩니다. 예를 들어 자손 선택자와 자식 선택자가 부딪힐 경우, 우선순위 계산법이 없으므로 두 선택자 중 마지막에 지정된 스타일이 적용됩니다.</p>
</div>
<p>[출처] http://www.nextree.co.kr/p8468/</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/165/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">165</post-id>	</item>
		<item>
		<title>jQuery 효율적 작성</title>
		<link>http://uxcss.com/wp/archives/163</link>
					<comments>http://uxcss.com/wp/archives/163#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Fri, 28 Sep 2018 00:31:45 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=163</guid>

					<description><![CDATA[제이쿼리를 사용함에 있어 성능 최적화(performance)에 간단히 알아봅니다. &#160; DOM 을 캐싱(Caching)하라 한번 탐색한 DOM을 다시 탐색하는 것은 비효율적이다. Bad Code $('button.confirm').on('click', function() { // DOM 한번 탐색 $('.modal').modal(); // DOM 다시 <span class="readmore"><a href="http://uxcss.com/wp/archives/163">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<p>제이쿼리를 사용함에 있어 성능 최적화(performance)에 간단히 알아봅니다.</p>
<p>&nbsp;</p>
<p class="tit">DOM 을 캐싱(Caching)하라</p>
<p>한번 탐색한 DOM을 다시 탐색하는 것은 비효율적이다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$('button.confirm').on('click', function() {

    // DOM 한번 탐색
    $('.modal').modal();

    // DOM 다시 한번 탐색
    $('.modal').addClass('active');

    // DOM 또 다시 한번 탐색
    $('modal').css(...);
});</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$('button.confirm').on('click', function() {

    // DOM 한번만 탐색 (체이닝)
    $('.modal')
            .modal()
            .addClass('active')
            .css(...);
});

$('button.confirm').on('click', function() {
    // DOM 한번만 탐색 (캐시)
    var modal = $('.modal');

    modal.modal();
    modal.addClass('active');
    modal.css(...);
});</pre>
</div>
<p class="tit">가급적 전역(Global)을 오염시키지 말 것</p>
<p>전역변수를 무분별하게 사용할 경우, 코드 충돌이 발생할 위험이 커진다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$element = $('.element');
h = $element.height();
$element.css('height',h-20);</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>var $element = $('.element');
var h = $element.height();
$element.css('height',h-20);</pre>
</div>
<p class="tit">명시적인 &#8216;$&#8217; 를 식별자를 사용하자. (Hungarian Notation)</p>
<p>jQuery 객체를 참조한 변수 이름 앞에 $ 를 붙여 jQuery 를 사용 가능한 객체임을 식별하도록 하여 혼란을 감소시키자.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>var first = $('.first');
var second = $('.second');
var value = $first.val();</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>var $first = $('.first');
var $second = $('.second');
var value = $first.val();</pre>
</div>
<p class="tit">var 체이닝을 사용하라</p>
<p>싱글 var 를 활용하면  var 중복사용을 줄일 수 있다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>var first  = $('.first');
var second = $('.second');
var value  = $first.val();</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>var $first = $('.first'),
    $second = $('.second'),
    value = $first.val();</pre>
</div>
<p class="tit">&#8216;on&#8217; 메서드 사용을 선호하라</p>
<p>단, jQuery 1.7 이상 버전부터 on 을 지원한다는 사실을 잊지 말자.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
});

$first.hover(function(){
    $first.css('border','1px solid red');
});</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$first.on('click', function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
});

$first.on('hover', function(){
    $first.css('border','1px solid red');
});</pre>
</div>
<p class="tit">묶을 수 있다면 최대한 묶어서 사용하라 (간결화)</p>
<p>하나의 요소에 각각의 프로세스를 진행하는 것 보다 하나의 요소에 연결된 프로세스를 진행하는 것이 훨씬 빠르다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$first.click(function(){
    $first.css('border','1px solid red');
    $first.css('color','blue');
});</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$first.on('click',function(){
    $first.css({
        'border':'1px solid red',
        'color':'blue'
    });
});</pre>
</div>
<p class="tit">문장을 연결(Chainning)되도록 묶어서 가독성이 뛰어난 코드를 만들어라.</p>
<p>하나의 객체에 메소드를 묶으면 진행될 프로세스를 이해하기 쉬워진다.</p>
<p>또한 읽기 쉬운(가독성) 코드는 수정이 용이하다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$second.html(value);
$second.on('click',function(){
    alert('hello everybody');
}).fadeIn('slow').animate({height:'120px'},500);</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$second
    .html(value)
    .on('click',function(){alert('hello everybody');})
    .fadeIn('slow')
    .animate({height:'120px'}, 500);</pre>
</div>
<p class="tit">코드의 양을 줄여라.</p>
<p>무엇이든지 티끌모아 태산이듯이 코드의 양을 줄이면 용량을 줄임으로써 성능 최적화에도 도움이 된다.</p>
<p>&amp;&amp;, || 를 활용하자.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>function initVar($myVar) {
    if(!$myVar) {
        $myVar = $('.selector');
    }
}

if ( collection.length &gt; 0 ) {}</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>function initVar($myVar) {
    $myVar = $myVar || $('.selector');
}

if ( collection.length ) {}</pre>
</div>
<p class="tit">DOM 조작이 많을 경우, 분리(Detach)하여 적용하자.</p>
<p>문서에 붙여진 상태에서 다수의 DOM 조작은 비효율적이기 때문에 조작(manupuration)하고 다시 붙이는게 좋다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>var $container   = $(".container"),
    $containerLi = $(".container li"),
    $element     = null;

$element = $containerLi.first();
// $element에 다수의 조작(Manipulation)이 수행</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>var $container = $(".container"),
    $containerLi = $container.find("li"),
    $element = null;

$element = $containerLi.first().detach();
// $element에 다수의 조작(Manipulation)이 수행

$container.append($element);</pre>
</div>
<p class="tit">jQuery 유틸리티 메소드를 사용하라</p>
<p>인스턴스 메소드보다 유틸리티 메소드가 훨씬 빠르다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$('#id').data(key,value);</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>// var idEl = document.querySelector('#id');

var idEl = $('#id')[0];
$.data(idEl, key, value);</pre>
</div>
<p class="tit">jQuery 객체를 참조한 변수를 통해 요소를 탐색하라</p>
<p>DOM 캐시와 같은 이유로 한번 참조한 대상을 통해 내부를 탐색하는 것이 보다 빠르다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>var $container       = $('.container'),
    $containerLi     = $('.container li'),
    $containerLiSpan = $('.container li span');</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>var $container = $('.container '),
    $containerLi = $container.find('li'),
    $containerLiSpan = $containerLi.find('span')</pre>
</div>
<p class="tit">전체 선택자 ( * ) 사용을 가급적 피하라</p>
<p>* 의 사용은 속도를 느리게 만드는 주범이다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$('.container &gt; *');</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$('.container').children();</pre>
</div>
<p class="tit">암묵적 선택자보다는 명시적인 선택자를 활용하라</p>
<p>암묵적 선택자를 사용하는 것은 결국 *(전체 선택자)를 사용하는 것과 다름없다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$('.someclass :radio');</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$('.someclass input:radio');</pre>
</div>
<p class="tit">ID 선택자 사용 시에는 앞에 요소 이름을 제거하라</p>
<p>문서에는 단 하나의 ID 를 사용해야 하기 때문에 중복될리 만무하므로 불필요한 요소를 사용하여 탐색을 하게 할 필요가 없다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$('div#myid');
$('div#footer a.myLink');</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$('#myid');
$('#footer a.myLink');</pre>
</div>
<p class="tit">ID 내부의 ID 를 찾는 것은 어리석은 일이다</p>
<p>고유한 ID 영역 내부에서 탐색을 하는데 있어서 굳이 상위 영역의 식별자까지 사용하여 탐색을 하게할 필요가 없다.</p>
<p class="subtt">Bad Code</p>
<div class="code">
<pre>$('#outer #inner');</pre>
</div>
<p class="subtt">Good Code</p>
<div class="code">
<pre>$('#inner');</pre>
</div>
<p class="tit">가급적 최신 버전의 jQuery 를 사용하라</p>
<p>업그레이드된 최신 jQuery 버전이 속도, 기능면에서 좋다.</p>
<p>단, 2.x 버전부터는 IE 6,7,8 이 지원되지 않음에 주의( 해외는 우아한 기능 저하 철학을 추구한다. )</p>
<p class="tit">프로젝트의 최종단계에서는 jQuery CDN 을 사용하라</p>
<p>CDN(Content Delivery Network) 사용시 사용자의 가장 가까운 곳에서 데이터를 가져오기 때문에 속도 향상에 도움이 된다.</p>
<p class="tit">jQuery 만 사용하기 보다는 JS 와 함께 사용하라</p>
<p>jQuery 는 결국 JavaScript 일 뿐더러 jQuery 보다 JS 가 보다 빠르다.</p>
<p>출처: <a href="http://webclub.tistory.com/142?category=500543">http://webclub.tistory.com/142?category=500543</a> [Web Club]</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/163/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">163</post-id>	</item>
		<item>
		<title>미리보기의 정체, 페이스북의 오픈그래프 프로토콜</title>
		<link>http://uxcss.com/wp/archives/155</link>
					<comments>http://uxcss.com/wp/archives/155#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Sun, 23 Sep 2018 04:08:12 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=155</guid>

					<description><![CDATA[들어가기 전에 이 글은 링크의 미리보기 제목, 설명, 이미지의 정체에 대해서 알고 싶은 마케터들을 위해 유용한 내용을 담고 있습니다. 오늘날 페이스북이나, 네이버 블로그, 카카오톡 등에서 어떤 링크에 대한 미리보기 제목, <span class="readmore"><a href="http://uxcss.com/wp/archives/155">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<h3 id="">들어가기 전에</h3>
<p>이 글은 링크의 미리보기 제목, 설명, 이미지의 정체에 대해서 알고 싶은 마케터들을 위해 유용한 내용을 담고 있습니다.</p>
<p>오늘날 페이스북이나, 네이버 블로그, 카카오톡 등에서 어떤 링크에 대한 미리보기 제목, 설명, 이미지를 제공하고 있습니다. <mark>링크를 붙여넣을 때 생기는 미리보기 제목, 설명, 이미지는 도대체 어디에서 오는 것일까요?</mark></p>
<p>&nbsp;</p>
<h3 id="메타태그란-무엇인가">메타태그란 무엇인가?</h3>
<blockquote><p>메타태그란 data에 대한 정보를 나타내는 태그이다.<br />
물론 일부는 아니겠지만 우리는 서비스를 만들고 그 서비스를 최대한 노출 시키고 싶을 것이다.<br />
그럼 그 페이지에서 어떤 내용이 중요한 줄 알고 노출을 시키지?</p></blockquote>
<h4 id="메타태그에는-어떤게-있을까">메타태그 사용예시</h4>
<div class="language-html highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"description"</span> <span class="na">content=</span><span class="s">"지금 이 페이지에 관한 설명. 검색해서 나오는 설명에 해당하는 부분"</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"keywords"</span> <span class="na">content=</span><span class="s">"페이지와 관련된 키워드, 한정, 블로그, HTML"</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"author"</span> <span class="na">content=</span><span class="s">"작성자"</span><span class="nt">&gt;</span>
</code></pre>
</div>
</div>
<h4 id="여기-까지는-기본적인-내용이다-그럼-조금-더-나아가서는">여기 까지는 기본적인 내용이다. 그럼 조금 더 나아가서는?</h4>
<blockquote><p>open-graph tag, twitter tag 들을 써보는건 어떤가?</p></blockquote>
<ul>
<li>요즘은 페이스북, 카카오톡, 트위터 등에 링크를 공유하게 되면 그 링크대신 사진과 글귀가 나온다.</li>
</ul>
<h3 id="htmlhead">HTML 문서의 head와 메타정보</h3>
<p>우리가 보고 있는 웹사이트는 기본적으로 HTML문서라는 사실을 모두 알고 계실겁니다. 이 HTML 문서는 크게는 head와 body라는 두 부분으로 구성되어 있습니다. 이 중 head에는 그 웹페이지를 구성하는 여러 가지 CSS, JavaScript 코드 조각들이나 참조 링크 등이 들어있고, <strong>가장 중요하게는 오늘 다룰 메타 데이터들이 HTML 태그를 통해 담겨있습니다.</strong></p>
<p>여기서 말하는 메타 데이터란 쉽게 말하면 해당 웹페이지를 구성하는 여러 구조화된 정보들 예컨대 제목, 설명, 이미지 등을 아예 명시적으로 웹페이지쪽에서 직접 정해서 표기해준 것을 말합니다. 예를 들어서 아래와 같습니다.</p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-11-16-50-PM-1.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-11-16-50-PM-1.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<p>왜 이렇게 직접 표기해줘야 하는가? 크롤러도 하나의 소프트웨어 프로그램인지라 HTML 문서를 보면 자동으로 무엇이 제목인지, 무엇이 내용에 대한 3줄 요약인지, 무엇이 대표 이미지인지 <strong>100% 자동으로 판별하기 아주 어렵습니다.</strong> <mark>따라서 웹사이트가 직접 저렇게 적어서 알려줘야 하는 것입니다.</mark> (아무리 머신러닝, 딥러닝, 자연어처리 기술이 발전해도 웹문서와 같이 비정형적인 정보에 대한 100% 정확도의 의미 인식은 불가합니다.)</p>
<p>그리고 이런 메타 데이터를 표기하는 방법에 대한 기본 방법(기본 HTML5 title, description 태그 등)을 제외한 제 3의 방법 중 비교적 통일되고 인정된 방법으로서 우리가 알아보고자 하는 페이스북의 오픈그래프(Open Graph) 프로토콜이 있고, <mark>이 오픈그래프 프로토콜이 우리가 보는 미리보기 화면의 실체를 구성하는 메타 데이터 표기방법입니다.</mark></p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Open-Graph------------.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Open-Graph------------.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<p>결론적으로 우리가 미리보기를 통해 보는 제목, 설명, 이미지는 이렇게 HTML 문서의 head에 표기된 오픈그래프 프로토콜에 의해서 나타나고 있습니다. 그 구체적인 작동 원래는 아래와 같습니다.</p>
<ol>
<li>사용자가 링크를 입력창에 입력합니다.</li>
<li>페이스북, 네이버 블로그, 카카오톡은 입력창의 문자열이 &#8220;링크&#8221;라는 것을 파악합니다. (흔히 말하는 <a href="https://namu.wiki/w/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D">정규표현식</a>으로 해당 문자열이 링크라는 것을 알아냅니다.)</li>
<li>링크라는 것이 파악되면 페이스북, 네이버 블로그, 카카오톡의 크롤러는 <mark>미리 그 웹사이트를 방문해서 HTML head의 오픈그래프(Open Graph) 메타 데이터를 긁어옵니다.</mark></li>
<li>이중에서도 og:title, og:description, og:image가 각각 제목, 설명, 이미지의 정보를 나타냅니다.</li>
<li>그리고 그 정보를 바탕으로 미리보기 화면을 생성해주게 됩니다.</li>
</ol>
<h3 id="">미리보기의 정체, 페이스북의 오픈그래프 프로토콜</h3>
<p><a href="http://ogp.me/">오픈그래프</a> 웹사이트에 가면 아래와 같이 오픈그래프에 대한 간단한 설명이 나와있습니다.<a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-9-01-15-PM.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-9-01-15-PM.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<blockquote><p>오픈그래프 프로토콜은 페이스북에서 처음 만들어졌으며, Dublin Core, link-rel canonical, Microformats, 그리고 RDFa로부터 영감을 받았습니다. 이 페이지의 설계서는 버전 0.9의 Open Web Foundation Agreement 아래에서 사용 가능합니다. 이 웹사이트는 오픈소스이며, 2014년 10월 20일에 최종 업데이트 되었습니다.</p></blockquote>
<p><a href="http://ogp.me/">오픈그래프</a>는 어떤 HTML 문서의 메타정보를 쉽게 표시하기 위해서 메타정보에 해당하는 제목, 설명, 문서의 타입, 대표 URL 등 다양한 요소들에 대해서 사람들이 통일해서 쓸 수 있도록 정의해놓은 프로토콜이며 페이스북에 의하여 기존의 다양한 메타 데이터 표기 방법을 참조하여 만들어졌습니다.</p>
<p>그 간편함으로 인하여 현재는 그 창시자인 페이스북은 물론이고, 네이버 블로그, 카카오톡 등에서도 널리 사용하고 있습니다.</p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-11-54-26-PM.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-11-54-26-PM.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<p>위에서 보듯이 기본적인 메타 데이터로는 제목(title), 설명(description), 대표 이미지(image), 표준 링크(url) 등이 있습니다. (여기서 canonicanl link, 즉 표준 링크란 같은 콘텐츠를 가리키는 여러 개의 URL 중에서 대표 하나의 URL을 말합니다. 이는 현실에 있는 실제 대상들을 가상의 그래프 기반 데이터베이스로 표현하려는 페이스북의 거대한 계획에서 중요한 요소입니다. 왜냐하면 하나의 대상은 원칙적으로 단 하나의 링크만으로 참조되어야 하기 때문입니다.)</p>
<p>이외에도 그 대상에 대한 구조화된(Structure) 데이터를 표현할 수 있는 여러 메타 데이터 표기용 태그들이 지원되고 있습니다. 자세한 것은 <a href="http://ogp.me/">오픈그래프</a> 웹사이트에서 확인할 수 있습니다.</p>
<h3 id="">웹의 세계에서 오픈그래프가 가지는 위상</h3>
<p>오픈그래프는 웹의 세계에서 아주 높은 위상을 가지고 있습니다. 오늘날 웹페이지들이 어떤 기술을 가지고 만들어졌는지를 분석해주는 사이트 <a href="http://trends.builtwith.com/docinfo">builtwith</a>의 통계에 따르면 오픈그래프는 웹문서를 이루고 있는 여러 기술들 중에서 상당히 상위권에 포진하고 있습니다.</p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-9-20-29-PM-1.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-03-at-9-20-29-PM-1.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<p>정말 기본적이고, 보편적인 JavaScript, CSS까지 포함해도 전체 기술 중 7번째에 올라와 있습니다. 숫자를 보면 대략적으로 상위권 10,000개의 웹사이트 중 약 4,200여 개의 사이트들이 오픈그래프를 사용하고 있는 것을 알 수 있습니다. <strong>온갖 다양한 웹사이트 만드는 기술이 포진하고 있는 웹의 생태계에서 이 정도라면 아주 대단한 유행으로 볼 수 있을 것입니다.</strong></p>
<h3 id="">좀 더 풍부한 메타데이터를 지원하는 트위터</h3>
<p>그러나 모두가 &#8220;페이스북&#8221;의 제목, 설명, 이미지 식의 오픈그래프 사용법에 동의하는 것은 아닙니다. 비록 우리가 크게 많이 사용하는 페이스북, 네이버 블로그, 카카오톡 등 대다수의 서비스에서는 오픈그래프 프로토콜에만 준하여 미리보기를 보여주지만 트위터는 이에 더하여 자체적인 메타데이터 표기법을 가지고 있습니다.</p>
<p>만약 트위터에서 제공하는 메타데이터만 있을 경우 자사의 것을 먼저 참조하지만, 오픈그래프만 있을 경우 오픈그래프도 참조하고 있습니다. <strong>그럼에도 불구하고 트위터의 메타 데이터 표기법도 결국에 오픈그래프를 참조한 것입니다.</strong></p>
<p>자세한 내용은 트위터의 <a href="https://dev.twitter.com/cards/getting-started">개발자 문서</a>를 참조해주세요.</p>
<h3 id="">우리 웹사이트의 오픈그래프 적용 여부, 어떻게 알아보나?</h3>
<p>페이스북은 오픈그래프에 대한 개발자들과 마케터들의 디버깅을 지원하기 위해 <a href="https://developers.facebook.com/tools/debug/sharing/">&#8220;Sharing Debugger&#8221;</a>를 지원하고 있습니다. 사용 방법은 간단합니다.</p>
<p>사이트에 들어가서 검사하고 싶은 링크를 입력하면 됩니다. 그럼 아래와 같이 해당 링크에 대한 분석결과를 받아볼 수 있습니다.</p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-04-at-12-21-04-AM.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-04-at-12-21-04-AM.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<h3 id="">개발자는 고쳤다는데, 왜 미리보기가 바뀌지 않았을까?</h3>
<p>프로그래밍의 세계에서 캐싱(Caching)은 반복적으로 호출되는 특정한 데이터를 캐시 메모리에 일종의 &#8220;임시&#8221;로 저장하여 다음 번에 호출될 때 더 빨리 해당 데이터를 공급해주는 것을 말합니다.</p>
<p>구체적으로는 데이터베이스에 저장된 어떤 정보를 한 번 불러온 후 캐시 메모리에 저장해놓거나, 어떤 HTML, CSS, JavaScript로 이뤄진 웹문서 전체 혹은 이미지 전체를 캐싱하기도 합니다. (전자에는 Memcached, Redis와 같은 시스템들이, 후자는 흔히들 &#8220;CDN&#8221;이라고 부르는 시스템들이 속할 것입니다.)</p>
<p>우리가 보는 모든 현대적인 웹서비스들, 앱들에는 이러한 캐싱 시스템이 구축되어 있습니다. 페이스북이나 네이버 블로그, 카카오톡 또한 예외가 아닙니다. 사용자들 입장에서는 더 빨리 웹사이트나 이미지가 로딩되서 좋고, 서비스측에서는 데이터베이스 구동에 들어가는 막대한 서버 자원을 절약할 수 있어서 좋습니다.</p>
<p>일반적으로 이런 캐싱에는 TTL(Time-to-Live)라는 소멸시효가 걸려있는데, <strong>이 소멸시효가 지나지 않은 경우 계속적으로 이미 캐싱된 데이터를 참조해서 불러올 수 있습니다.</strong></p>
<p><mark>따라서 실제로 서버에서 내려주는 HTML 웹문서 상의 오픈그래프는 바꼈을지라도, 이미 캐시된 웹문서가 내려지고 있는 상황일 수 있습니다. 즉, 저 TTL이 만료되기 전까지는 아무리 본 서버에서 개발자가 다시 개발해줘도, 미리보기는 바뀌지 않을 것입니다.</mark></p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-04-at-12-21-52-AM.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-04-at-12-21-52-AM.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<p>이 경우 페이스북은 다행히 캐싱을 리로드할 수 있는 버튼을 <a href="https://developers.facebook.com/tools/debug/sharing/">&#8220;Sharing Debugger&#8221;</a>를 통해서 지원하고 있습니다.</p>
<p><a class="image" title="" href="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-04-at-12-23-53-AM.png"><img decoding="async" src="https://i0.wp.com/blog.ab180.co/content/images/2016/05/Screen-Shot-2016-05-04-at-12-23-53-AM.png?w=840" alt="" data-recalc-dims="1" /></a></p>
<p>카카오스토리의 경우 <a href="https://developers.kakao.com/docs/restapi/tool">내부 개발자 도구</a>를 통해서 <code>카카오스토리 링크 정보 얻기 (/v1/api/story/linkinfo)</code> API 호출을 통해 (외부 호출은 캐싱 번복 안됨) 캐싱을 리로드할 수 있도록 지원하고 있습니다.</p>
<p>이외의 서비스들은 향후 정보 습득하는대로 정리하여 업데이트하도록 하겠습니다.</p>
<h3 id="2">클릭 2의 미스터리</h3>
<p>미리보기 제목, 설명, 이미지와 관련된 사소한 현상입니다. 가끔 내가 바로 쓴 글을 페이스북에 올리면 바로 조회수가 2로 올라가는 현상을 볼 수 있습니다. 앞서서 말씀드린 것과 같이 크롤러가 우리 사이트를 한 번 &#8220;미리&#8221; 방문하는 현상 때문에 조회수가 1 올라갑니다.</p>
<p>구글과 같이 방금 방문한 사람이 크롤러라는 것을 명시해주는 경우도 있지만, 페이스북처럼 크롤러라는 것을 전혀 알 수 없게 해놓는 경우도 있습니다. 즉, 미리보기 화면이 로딩되는 것은 곧 나의 웹사이트를 페이스북에서 익명 유저가 1번 방문하는 것과 동일하다는 것을 인지해야 합니다.</p>
<h3 id="">결론</h3>
<p>최근 카카오톡, 네이버 블로그 등 기존에 오픈그래프를 통한 미리보기를 지원하지 않았던 서비스들이 대거 오픈그래프를 지원하기 시작하면서 점점 더 이 미리보기 페이지에 들어가는 og:title, og:description, og:image를 넣는 것이 중요해지고 있습니다. (<a href="http://nter.naver.com/naverletter/80667">네이버 스마트 에디터 3.0</a> 출시 이후부터 오픈그래프 더욱 강조하기 시작)</p>
<p><strong>특히 설치링크라면 더더욱 사소한 문구 하나의 차이가 큰 설치율의 증감을 초래할 수도 있습니다.</strong></p>
<p>따라서 반드시 아래와 같이 하시길 바랍니다.</p>
<ol>
<li><mark>og:title, og:description, og:image를 HTML의 head에 반드시 넣고, 제대로 반영되었는지를 <a href="https://developers.facebook.com/tools/debug/sharing/">&#8220;Sharing Debugger&#8221;</a>를 통해서 확인한다.</mark></li>
<li>실제로 카카오톡, 페이스북, 네이버 블로그 등 사용하고자 하는 마케팅 채널에 링크를 넣고 미리보기 화면을 확인한다. (실제 보여지는 이미지가 사이즈가 각 서비스마다 다르기 때문에 반드시 주의할 것)</li>
<li>가능하다면 A/B 테스팅을 통해서 어떤 문구나 이미지가 가장 좋은 효과를 보이는지 확인한다.</li>
</ol>
<ul>
<li>각 회사마다 이를 이용하기 위해 meta tag를 정의했다.</li>
<li>open graph는 카카오톡, 페이스북 등이 이를 사용한다.</li>
</ul>
<div class="language-html highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:title"</span> <span class="na">content=</span><span class="s">"test"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:type"</span> <span class="na">content=</span><span class="s">"article"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:url"</span> <span class="na">content=</span><span class="s">"<a class="vglnk" href="https://hanjungv.github.io/" rel="nofollow">https://hanjungv.github.io/</a>"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:description"</span> <span class="na">content=</span><span class="s">"설명을 적어보자!"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:image"</span> <span class="na">content=</span><span class="s">"/post_img/201702/16/1.png"</span><span class="nt">/&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:image:width"</span> <span class="na">content=</span><span class="s">"1200"</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">property=</span><span class="s">"og:image:height"</span> <span class="na">content=</span><span class="s">"627"</span> <span class="nt">/&gt;</span>
</code></pre>
</div>
</div>
<ul>
<li>그럼 트위터는 어떻게 할까? <a href="https://dev.twitter.com/cards/markup">링크</a></li>
</ul>
<div class="language-html highlighter-rouge">
<div class="highlight">
<pre class="highlight"><code><span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"twitter:card"</span> <span class="na">content=</span><span class="s">"summary"</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"twitter:url"</span> <span class="na">content=</span><span class="s">"<a class="vglnk" href="https://hanjungv.github.io/" rel="nofollow">https://hanjungv.github.io/</a>"</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"twitter:title"</span> <span class="na">content=</span><span class="s">"test"</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"twitter:description"</span> <span class="na">content=</span><span class="s">"설명을 적어보자!"</span><span class="nt">&gt;</span>
<span class="nt">&lt;meta</span> <span class="na">name=</span><span class="s">"twitter:image"</span> <span class="na">content=</span><span class="s">"/post_img/201702/16/1.png"</span><span class="nt">&gt;</span>
</code></pre>
</div>
</div>
<p>이런 태그들을 이용하면 원하는 정보를 뽑아 그대로 출력시킬 수 있다.</p>
<h4 id="조금-더-나아가서는">조금 더~ 나아가서는???</h4>
<ul>
<li>설명(description)은 간결하고 그 페이지를 명확하게 나타내주는 글로(1~2줄)</li>
<li>가능하다면 페이지마다 다르게하자. 그게 정체성을 더 나타낼 것</li>
<li>description을 수정한다면 바로 웹페이지에 반영되지 않는다. 주기적으로 업데이트가 되는 시점 이후에 반영이 된다고한다.</li>
</ul>
<p>&nbsp;</p>
<h3 id="페이스북-url-디버거">페이스북 URL 디버거</h3>
<div class="google-auto-placed"><ins class="adsbygoogle adsbygoogle-noablate" data-ad-format="auto" data-ad-client="ca-pub-2948714191026958" data-adsbygoogle-status="done"><ins id="aswift_4_expand"><ins id="aswift_4_anchor"></ins></ins></ins>페이스북 크롤러가 우리 페이지를 어떻게 볼 지, 다른 사람들에게 공유할 때 어떻게 보일지 미리보는 사이트가 있습니다. <a href="https://developers.facebook.com/tools/debug/sharing/" target="_blank" rel="external nofollow noopener noreferrer">페이스북 URL 디버거</a> 를 사용하면 개발자 도구로 소스를 열어보는 것보다 오픈 그래프 태그를 쉽게 분석할 수 있습니다.</div>
<p><a class="fancybox" title="https://developers.facebook.com/tools/debug/sharing/" href="https://futurecreator.github.io/2016/06/16/opengraph-social-meta-tag/" rel="article0"><img decoding="async" class="scrollLoading" src="https://i0.wp.com/futurecreator.github.io/images/facebook/opengraph_debug.png?w=840&#038;ssl=1" alt="https://developers.facebook.com/tools/debug/sharing/" data-url="/images/facebook/opengraph_debug.png" data-recalc-dims="1" /></a><span class="caption"><a class="vglnk" href="https://developers.facebook.com/tools/debug/sharing/" rel="nofollow">https://developers.facebook.com/tools/debug/sharing/</a></span></p>
<p>URL을 입력하고 디버깅을 시작하면 해당 페이지의 미리보기도 나오고, 메타 태그만 뽑아서 보여줍니다. 수정해야할 부분이 있다면 경고를 통해 알려주니 참고해서 수정하시면 됩니다.</p>
<h3 id="기본적인-오픈-그래프-태그">기본적인 오픈 그래프 태그</h3>
<p>수정하기 전에 기본적인 오픈 그래프 태그만 간략하게 살펴보겠습니다.</p>
<table style="height: 321px;" width="772">
<thead>
<tr>
<th>Tag</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>og:url</td>
<td>페이지의 표준 URL (데스크탑 URL)</td>
</tr>
<tr>
<td>og:title</td>
<td>콘텐츠 제목</td>
</tr>
<tr>
<td>og:description</td>
<td>콘텐츠 설명. 미리보기에서 제목 아래에 표시</td>
</tr>
<tr>
<td>og:site_name</td>
<td>웹 사이트의 이름 (주소 아님)</td>
</tr>
<tr>
<td>og:image</td>
<td>콘텐츠를 공유 시 표시되는 이미지의 URL</td>
</tr>
<tr>
<td>fb:app_id</td>
<td>페이스북 인사이트를 사용하기 위한 앱 아이디</td>
</tr>
<tr>
<td>fb:admins</td>
<td>웹 사이트용 도메인 인사이트를 사용하기 위한 아이디</td>
</tr>
</tbody>
</table>
<h2 id="hexo-에서-오픈-그래프-태그-추가하기">Hexo 에서 오픈 그래프 태그 추가하기</h2>
<p>다행히 Hexo 와 Hueman 테마에서 웬만한 오픈 그래프 태그는 자동으로 만들어줍니다. 소스를 까보시면 헤더 쪽에 다음과 같은 함수로 오픈 그래프 태그를 생성하고 있습니다.</p>
<figure class="highlight js">
<table>
<tbody>
<tr>
<td class="gutter">
<pre><span class="line">1</span></pre>
</td>
<td class="code">
<pre><span class="line">&lt;%- open_graph([options]) %&gt;</span></pre>
</td>
</tr>
</tbody>
</table>
</figure>
<table style="height: 509px;" width="778">
<thead>
<tr>
<th>Option</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>페이지 제목 (og:title)</td>
<td>page.title</td>
</tr>
<tr>
<td>type</td>
<td>페이지 타입 (og:type)</td>
<td>blog</td>
</tr>
<tr>
<td>url</td>
<td>페이지 URL (og:url)</td>
<td>url</td>
</tr>
<tr>
<td>image</td>
<td>페이지 커버 이미지 (og:image)</td>
<td>첫번째 이미지</td>
</tr>
<tr>
<td>site_name</td>
<td>사이트 이름 (og:site_name)</td>
<td>config.title</td>
</tr>
<tr>
<td>description</td>
<td>페이지 설명 (og:desription)</td>
<td>내용의 200자</td>
</tr>
<tr>
<td>twitter_card</td>
<td>트위터 카드 타입 (twitter:card)</td>
<td>summary</td>
</tr>
<tr>
<td>twitter_id</td>
<td>트위터 아이디 (twitter:creator)</td>
<td></td>
</tr>
<tr>
<td>twitter_site</td>
<td>트위터 사이트 (twitter:site)</td>
<td></td>
</tr>
<tr>
<td>google_plus</td>
<td>Google+ 프로필 링크</td>
<td></td>
</tr>
<tr>
<td>fb_admins</td>
<td>Facebook admin ID</td>
<td></td>
</tr>
<tr>
<td>fb_app_id</td>
<td>Facebook App ID</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>출처:</p>
<p>http://blog.ab180.co/open-graph-as-a-website-preview/</p>
<p>https://futurecreator.github.io/2016/06/16/opengraph-social-meta-tag/</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/155/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">155</post-id>	</item>
		<item>
		<title>파비콘(favicon) 소개</title>
		<link>http://uxcss.com/wp/archives/153</link>
					<comments>http://uxcss.com/wp/archives/153#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Sun, 23 Sep 2018 04:01:36 +0000</pubDate>
				<category><![CDATA[IT관련정보]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=153</guid>

					<description><![CDATA[파비콘(favicon) 소개 파비콘은 웹페이지에 접속했을때, 상단 탭에 보여지는 아이콘을 일컫는다. 이 아이콘은 즐겨찾기에 웹페이지를 등록할때도 사용된다. 웹사이트를 대표하는 로고(logo)의 개념과 비슷하며, 사이트의 성격을 드러내기도 한다. 최근에는 터치(touch) 아이콘, 타일(tile) 아이콘의 <span class="readmore"><a href="http://uxcss.com/wp/archives/153">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<h3>파비콘(favicon) 소개</h3>
<p>파비콘은 웹페이지에 접속했을때, 상단 탭에 보여지는 아이콘을 일컫는다. 이 아이콘은 즐겨찾기에 웹페이지를 등록할때도 사용된다. 웹사이트를 대표하는 로고(logo)의 개념과 비슷하며, 사이트의 성격을 드러내기도 한다.</p>
<p>최근에는 터치(touch) 아이콘, 타일(tile) 아이콘의 등장으로 더욱 혼란스러움이 가중되었으며, 각각의 기기에 최적화된 파비콘의 크기를 재설정하여 개발자들에게 어려움을 주고 있다.</p>
<h3>파비콘(favicon) 기본 설정</h3>
<p>1999년에 인터넷 익스플로러(Internet Explorer)에 처음 도입된 후로, 파비콘의 사양은 거의 변경되지 않은 채로 대부분 아이콘(ico) 파일의 형태로 도메인(domain)의 루트(root) 디렉토리에 위치해 왔다.</p>
<p class="border"><span class="imageblock"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/250FC64A5559181E27" width="633" height="273" /></span></p>
<p>크로스브라우징을 염두에 둔다면, 어떠한 HTML 코드도 작성하지 않고, 자신의 웹계정 루트(root) 디렉토리에 <b>16&#215;16</b> 과 <b>32&#215;32</b>의 이미지를 하나에 품은(multiple sizes<sup class="footnote"><a id="footnote_link_337_1" href="http://webdir.tistory.com/337#footnote_337_1">1</a></sup>) <code>favicon.ico</code> 파일을 위치시킴으로써, 설정을 마무리한다.</p>
<p>이 방법은 씨몽키(SeaMonkey) 브라우저를 제외한 모든 데스크톱 브라우저/버전에서(IE6 포함) 작동한다.</p>
<p>CMS의 경우에는 테마(theme) 혹은 이미지(image) 디렉토리를 이용하기도 한다.</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="Html">HTML</div>
</div>
<pre class=" language-html" data-language="Html"><code class=" language-html"><span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>shortcut icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/path/to/favicon.ico<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p id="more337_0" class="moreless_fold">rel 속성과 type 속성 자세히</p>
<p>전통적으로 favicon.ico 파일은 16컬러 24비트 알파 투명도(alpha transparency) 포맷의 16&#215;16 아이콘(ICO) 파일이다. 최근의 파비콘은 32&#215;32를 지원하는데, 모든 주요 인기 있는 브라우저들에서 적절하게 축소되어 이를 표현해준다. IE10의 매트로(Metro)에서는 32&#215;32 아이콘이 주소창에 사용된다.</p>
<p class="border"><span class="imageblock"><img decoding="async" loading="lazy" src="https://t1.daumcdn.net/cfile/tistory/271CDC435559187D26" width="450" height="69" /></span></p>
<p>ICO 파일을 사용할 경우 아래와 같은 크기 정도는 포함하는 것을 추천한다.</p>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>크기</th>
<th>용도</th>
</tr>
</thead>
<tbody>
<tr>
<td>16&#215;16</td>
<td>IE9 주소 표시줄, 고정된(pinned) 사이트의 점프목록/툴바/오버레이</td>
</tr>
<tr>
<td>32&#215;32</td>
<td>IE의 새로운 탭 페이지, 윈도우7 이상에서 작업 표시줄 단추, Safari 나중에 읽기 사이드바</td>
</tr>
<tr>
<td>48&#215;48</td>
<td>윈도우즈 사이트 아이콘</td>
</tr>
</tbody>
</table>
</div>
<p>좀 더 완벽하게 설정하길 원하고 1~3kb 쯤의 여분의 용량증가가 상관없다면 아래의 크기도 포함시켜도 된다.</p>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>크기</th>
<th>용도</th>
</tr>
</thead>
<tbody>
<tr>
<td>24&#215;24</td>
<td>IE9 고정된(pinned) 사이트 브라우저 UI</td>
</tr>
<tr>
<td>64&#215;64</td>
<td>윈도우즈 사이트 아이콘, HiDPI/Retina 에서 Safari 나중에 읽기 사이드바</td>
</tr>
</tbody>
</table>
</div>
<h3>파비콘(favicon) 추가 설정</h3>
<p>iOS 2.0 이상과 Android 2.1 이상에서는 터치(Touch) 아이콘 지정이 가능하다. 고해상도 아이콘(152&#215;152) 하나만 준비하면 저해상도에서는 알아서 아이콘의 크기가 변경된다. 다만, 기기의 홈스크린에 아이콘이 추가되면 성능에 부정적일 수는 있다.</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="Html">HTML</div>
</div>
<pre class=" language-html" data-language="Html"><code class=" language-html"><span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>apple-touch-icon-precomposed<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>path/to/favicon-152.png<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p id="more337_1" class="moreless_fold">apple-touch-icon 세분화 대응</p>
<p>IE10 매트로는 타일(tile) 아이콘이 추가되었는데(apple-touch-icon과 유사한) 방문자가 고정(pins)할 경우, 시작화면에 이를 표시한다. 타일 아이콘의 크기는 144&#215;144 PNG 파일이며, 투명한 배경을 사용해야 최상의 결과를 얻을 수 있다.</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="Html">HTML</div>
</div>
<pre class=" language-html" data-language="Html"><code class=" language-html"><span class="token tag"><span class="token punctuation">&lt;</span>meta <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>msapplication-TileColor<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>#FFFFFF<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;</span>meta <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>msapplication-TileImage<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/path/to/favicon-144.png<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>원하는 타일의 색상으로 <code>content="#ffffff"</code>부분을 수정하면 된다.</p>
<h3>파비콘(favicion) PNG 파일 지원 사항</h3>
<p>Chrome, Firefox, Opera 7+, 그리고 Safari 4+는 모두 PNG 파비콘을 지원하지만 Chrome과 Safari는 ICO 파비콘이 함께 지정되어 있으면 선언된 순서에 상관없이 PNG 파비콘을 무시하고 ICO 파비콘을 사용한다. 즉, PNG 파비콘을 지원하지 않는 IE를 위해 ICO 파일을 사용하게 되는 순간, Chrome과 Safari는 PNG 파비콘을 무시하게 된다는 이야기다.</p>
<p class="alert alert-modern">favicion.ico &gt; favicon.png</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="Html">HTML</div>
</div>
<pre class=" language-html" data-language="Html"><code class=" language-html"><span class="token comment" spellcheck="true">&lt;!-- Chrome, Safari, IE --&gt;</span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>shortcut icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>path/to/favicon.ico<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
 
<span class="token comment" spellcheck="true">&lt;!-- Firefox, Opera (Chrome and Safari say thanks but no thanks) --&gt;</span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>path/to/favicon.png<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>ICO 파비콘은 multiple sizes를 지원하기에 하나의 ICO 파일에 여러 사이즈의 아이콘을 넣어 두고 이를 활용할 수 있지만 PNG 파비콘은 이것이 불가능하다. 그런 이유로 각각의 필요한 사이즈를 아래와 같이 모두 선언해야 한다.</p>
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="Html">HTML</div>
</div>
<pre class=" language-html" data-language="Html"><code class=" language-html"><span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>favicon-16.png<span class="token punctuation">"</span></span> <span class="token attr-name">sizes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>16x16<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>favicon-32.png<span class="token punctuation">"</span></span> <span class="token attr-name">sizes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>32x32<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>favicon-48.png<span class="token punctuation">"</span></span> <span class="token attr-name">sizes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>48x48<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>favicon-64.png<span class="token punctuation">"</span></span> <span class="token attr-name">sizes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>64x64<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>favicon-128.png<span class="token punctuation">"</span></span> <span class="token attr-name">sizes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>128x128<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
</code></pre>
<p>PNG 파비콘을 사용시에 브라우저는 어떠한 파비콘을 사용할지 어떻게 결정하는가?</p>
<ul>
<li>Firefox와 Safari는 마지막에 제공되는 파비콘을 사용한다.</li>
<li>맥(Mac) 용 Chrome은 ICO 포맷의 파비콘이 아니라면 32&#215;32 파비콘을 사용한다.</li>
<li>윈도우즈(Windows) 용 Chrome은 16&#215;16이 먼저 선언되지 않는다면 ICO 파비콘이 사용된다.</li>
<li>상기 옵션 중 아무것도 사용할 수 없는 경우, 양쪽 Chrome은 먼저 선언되는 파비콘을 사용하고 Firefox와 Safari는 마지막에 선언된 것이 사용된다. 사실 맥 용 Chrome은 16&#215;16 파비콘을 무시하고 non-retina 기기에서 16&#215;16으로 크기를 줄일때만 32&#215;32 파비콘을 사용한다.</li>
<li>Opera는 사용가능한 아이콘 중에서 하나를 임의로 선택하게 된다.</li>
</ul>
<h3>파비콘(favicon) 실전 정리</h3>
<p>적어도 아래의 ICO 파일은 준비한다.</p>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>크기</th>
<th>파일명</th>
<th>용도</th>
</tr>
</thead>
<tbody>
<tr>
<td>16&#215;16 &amp; 32&#215;32</td>
<td>favicon.ico</td>
<td>IE를 위해 필요한 기본이다.</td>
</tr>
</tbody>
</table>
</div>
<p>조금 느려지더라도 iOS와 Android를 고려하겠다면 아래와 같은 PNG 파일을 준비한다.</p>
<div class="table-responsive">
<table class="table table-bordered">
<thead>
<tr>
<th>크기</th>
<th>파일명</th>
<th>용도</th>
</tr>
</thead>
<tbody>
<tr>
<td>152&#215;152</td>
<td>favicon-152.png</td>
<td>일반적으로 iOS와 Android에서 사용하는 아이콘, 기기에 따라 자동으로 크기가 줄여진다.</td>
</tr>
</tbody>
</table>
</div>
<p>좀 더 완벽한 파비콘을 설정하기 원한다면 아래의 표를 참고하여 PNG 파일을 준비하도록 하자.</p>
<div class="table-responsive">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>크기</th>
<th>파일명</th>
<th>용도</th>
</tr>
</thead>
<tbody>
<tr>
<td>32&#215;32</td>
<td>favicon-32.png</td>
<td>일부 오래된 하지만 너무 오래된 Chrome은 ICO를 제대로 처리하지 못함.</td>
</tr>
<tr>
<td>57&#215;57</td>
<td>favicon-57.png</td>
<td>표준 iOS 홈스크린(iPad Touch, iPhone 3G의 1세대)</td>
</tr>
<tr>
<td>72&#215;72</td>
<td>favicon-72.png</td>
<td>iPad 홈스크린 아이콘</td>
</tr>
<tr>
<td>96&#215;96</td>
<td>favicon-96.png</td>
<td>구글TV 아이콘</td>
</tr>
<tr>
<td>120&#215;120</td>
<td>favicon-120.png</td>
<td>iPhone 레티나(retina) 터치 아이콘(Change for iOS 7: up from 114&#215;114)</td>
</tr>
<tr>
<td>128&#215;128</td>
<td>favicon-128.png</td>
<td>Chrome 웹스토어 아이콘</td>
</tr>
<tr>
<td>144&#215;144</td>
<td>favicon-144.png</td>
<td>고정(pinned)된 IE10 매트로 타일</td>
</tr>
<tr>
<td>152&#215;152</td>
<td>favicon-152.png</td>
<td>iPad 레티나 터치 아이콘(Change for iOS 7: up from 144&#215;144)</td>
</tr>
<tr>
<td>195&#215;195</td>
<td>favicon-195.png</td>
<td>Opera 스피드 다이얼 아이콘</td>
</tr>
<tr>
<td>228&#215;228</td>
<td>favicon-228.png</td>
<td>Opera Coast 아이콘</td>
</tr>
</tbody>
</table>
</div>
<h3>파비콘(favicon)과 IE 브라우저 유의사항</h3>
<ul>
<li>IE8~10은 페이지의 첫 방문에 바로 파비콘을 표시해준다.</li>
<li>IE7은 첫번째 방문은 무시하고 재방문시에 파비콘을 표시해준다.</li>
<li>IE6은 사이트를 북마크를 한 후 브라우저를 다시 열면 표시해준다. IE6은 브라우저 캐시가 삭제 될 때마다 파비콘을 삭제하며, 사이트가 다시 북마크된다거나 파비콘이 어떻게든 다시 로드 될때까지 파비콘을 표시하지 않는다.</li>
</ul>
<h3>파비콘(favicon) 강제 새로고침</h3>
<p>일반적으로는 필요치 않으나, 개발하는 동안이나 새로고침으로 파비콘이 표시되지 않을때를 고려한 방법이다.</p>
<ul>
<li>브라우저 캐시를 삭제한다(<kbd>Ctrl + F5</kbd> 혹은 <kbd>Ctrl + Shift + R</kbd>).</li>
<li>만일 IE라면 브라우저를 닫고 다시 연다.</li>
<li>만일 여전히 골머리를 썩고 있다면 새로운 탭을 열어보거나 <a href="http://stackoverflow.com/questions/2208933/how-do-i-force-a-favicon-refresh">How do I force a favicon refresh</a>을 참고하라.</li>
<li>일시적으로 명시적인 HTML 태그를 추가하고 쿼리 문자열을 추가한다. 확인이 완료된 후엔 이를 제거하자.
<div class="prism-show-language">
<div class="prism-show-language-label" data-language="Html">HTML</div>
</div>
<pre class=" language-html" data-language="Html"><code class=" language-html"><span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>shortcut icon<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.yoursite.com/favicon.ico?v<span class="token punctuation">=</span>2<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token punctuation">&lt;</span>link <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>icon<span class="token punctuation">"</span></span> <span class="token attr-name">sizes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>16x16 32x32<span class="token punctuation">"</span></span> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>/favicon.ico?v<span class="token punctuation">=</span>2<span class="token punctuation">"</span></span><span class="token punctuation">&gt;</span></span>
</code></pre>
</li>
</ul>
<h3>도움이 되는 도구들</h3>
<ul>
<li><a href="http://optipng.sourceforge.net/">OptiPNG</a> : ICO 파일안에 넣을 PNG 파일들을 최적화 한다.</li>
<li><a href="http://www.xiconeditor.com/">x-icon editor</a> : ICO 파일을 만들수 있는 웹용 도구이다.</li>
<li><a href="http://www.favicon-generator.org/">Favicon &amp; App Icon Generator</a> : PNG 파비콘을 다양하게 생성해준다(위에서 다룬 apple-touch-icon을 크기별로, IE10용 타일 파비콘을 생성).</li>
</ul>
<div class="link-refer">
<h3>참고문헌 및 관련링크.</h3>
<ol>
<li><a href="https://github.com/audreyr/favicon-cheat-sheet">favicon-cheat-sheet</a></li>
<li><a href="http://www.jonathantneal.com/blog/understand-the-favicon/">understand-the-favicon</a></li>
</ol>
</div>
<div class="footnotes"></div>
<p>출처: <a href="http://webdir.tistory.com/337#footnote_link_337_1">http://webdir.tistory.com/337#footnote_link_337_1</a> [WEBDIR]</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/153/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">153</post-id>	</item>
		<item>
		<title>HTML5.2 권고안이 2017년 12월 14일 발표(HTML5.3초안 공개)</title>
		<link>http://uxcss.com/wp/archives/140</link>
					<comments>http://uxcss.com/wp/archives/140#respond</comments>
		
		<dc:creator><![CDATA[uxcss]]></dc:creator>
		<pubDate>Thu, 21 Dec 2017 00:28:31 +0000</pubDate>
				<category><![CDATA[W3C정보]]></category>
		<category><![CDATA[html5.2]]></category>
		<category><![CDATA[html5.3]]></category>
		<category><![CDATA[w3c]]></category>
		<guid isPermaLink="false">http://uxcss.com/wp/?p=140</guid>

					<description><![CDATA[HTML5.2 권고안이 2017년 12월 14일 발표되었습니다. HTML5.1 이후 변경 사항을 간략하게 확인해보고 개발할 때 참고해야겠습니다. 2016년 1월 12일 이후 모든 변경 사항에 대한 자세한 내용은 다양한 편집 및 링크 수정을 <span class="readmore"><a href="http://uxcss.com/wp/archives/140">Read More ...</a></span>]]></description>
										<content:encoded><![CDATA[<p>HTML5.2 권고안이 2017년 12월 14일 발표되었습니다.<br />
HTML5.1 이후 변경 사항을 간략하게 확인해보고 개발할 때 참고해야겠습니다.</p>
<p>2016년 1월 12일 이후 모든 변경 사항에 대한 자세한 내용은 다양한 편집 및 링크 수정을 포함하여 <a href="https://github.com/w3c/html/">w3c/html Github 저장소</a> 의 <a href="https://github.com/w3c/html/commits/master">commit log</a>를 통해 제공됩니다.</p>
<h2 id="새로운-기능new-features">새로운 기능(New features)</h2>
<ul>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/interactive-elements.html#elementdef-dialog"><code>&lt;dialog&gt;</code></a> 요소</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-ecma-262">[ECMA-262]</a>의 JavaScript 모듈 시스템과 통합</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-referrerpolicy">[REFERRERPOLICY]</a> <a href="https://www.w3.org/TR/2017/REC-html52-20171214/dom.html#concept-document-referrer-policy">레퍼러 정책</a></li>
<li>접근성 향상을 위한 새로운 기능을 소개하는 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-wai-aria-11">[Wave-arial-1.2.2]</a> ARIA 참조 업데이트</li>
<li>컨텐츠 보안 정책 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-csp3">[CSP3]</a>에서 사용되는 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/document-metadata.html#elementdef-link"><code>&lt;link&gt;</code></a> 의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/document-metadata.html#element-attrdef-link-nonce"><code>nonce</code></a> 속성</li>
<li>iframe 요소의 <code>allowpaymentrequest</code> 속성이 <code>Payment Request API</code> 와 통합 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-payment-request">[PAYMENT-REQUEST]</a></li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#elementdef-iframe"><code>&lt;iframe&gt;</code></a> 요소의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#element-attrdef-iframe-sandbox"><code>sandbox</code></a> 속성에서 <code>allow-presentation</code> 값이 <code>Presentation API</code> 호 통합 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-presentation-api">[PRESENTATION-API]</a></li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/document-metadata.html#elementdef-link"><code>&lt;link&gt;</code></a> 요소의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/links.html#element-attrdef-a-rel"><code>rel</code></a> 속성이 기본 값이 됨</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/document-metadata.html#elementdef-link"><code>&lt;link&gt;</code></a> 요소에 <code>noreferrer</code> 링크 타입 추가 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-secure-contexts">[SECURE-CONTEXTS]</a></li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/links.html#element-attrdef-a-rel"><code>rel</code></a> 속성에 <code>apple-touch-icon</code> 값으로, <code>link</code> 요소에서 크기 특성을 사용 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/webappapis.html#dom-navigatorcontentutils-registercontenthandler"><code>registerContentHandler()</code></a>, <a href="https://www.w3.org/TR/2017/REC-html52-20171214/webappapis.html#dom-navigatorcontentutils-iscontenthandlerregistered"><code>isContentHandlerRegistered()</code></a>, <a href="https://www.w3.org/TR/2017/REC-html52-20171214/webappapis.html#dom-navigatorcontentutils-isprotocolhandlerregistered"><code>isProtocolHandlerRegistered()</code></a> 메소드 추가</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/dom.html#htmlelement"><code>HTMLElement</code></a> 에 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/dom.html#dom-htmlelement-innertext"><code>innerText IDL</code></a> 속성 추가</li>
<li>MP4 미디어 트랙 통합을 위한 <code>about:html-kind</code> URL 정의</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-csp3">[CSS3]</a>에 <a href="https://w3c.github.io/webappsec-csp/#should-block-inline">콘텐츠 보안 정책에 따라 요소를 통합할 수 있어야 합니까?</a> 내용 통합</li>
</ul>
<p>&nbsp;</p>
<h2 id="삭제된-기능features-removed">삭제된 기능(Features removed)</h2>
<ul>
<li><code>keygen</code>, <code>menu</code>, <code>menuitem</code> 요소</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-input"><code>&lt;input&gt;</code></a> 요소의 텍스트 타입에서 <code>inputmode</code> 와 <code>dropzone</code> 속성</li>
<li><code>showModalDialog</code> 메소드</li>
<li><code>Plugin</code> API</li>
</ul>
<p>&nbsp;</p>
<h2 id="버그-수정-및-개선fixing-bugs-and-matching-reality-better">버그 수정 및 개선(Fixing bugs and matching reality better)</h2>
<ul>
<li><code>load</code> 이벤트 지연 방지를 위해 네트워크 이외의 소스에서 미디어 리소스 요청 중지</li>
<li>새로고침 빈도에 대한 임의의 상한 값을 제거</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#element-attrdef-img-ismap"><code>isMap</code></a> 에서 image border 값을 계산 안함</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/editing.html#element-attrdef-global-accesskey"><code>accesskey</code></a> 정의를 출력 가능한 글자가 필요하도록 업데이트</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/interactive-elements.html#elementdef-summary"><code>&lt;summary&gt;</code></a> 활성화 알고리즘 개선</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/tabular-data.html#elementdef-table"><code>&lt;table&gt;</code></a> 에 대한 행(row)과 열(column) 머리 글을 결정하는 알고리즘 수정</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/interactive-elements.html#elementdef-summary"><code>&lt;summary&gt;</code></a> 렌더링 업데이트</li>
<li>손상된 URL은 파싱되지 않은 값을 반환</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/dom.html#dom-document-currentscript"><code>currentScript</code></a> 는 <a href="https://svgwg.org/svg2-draft/interact.html#InterfaceSVGScriptElement"><code>SVGScriptElement</code></a> 를 반환 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-textarea"><code>&lt;textarea&gt;</code></a> 요소를 재설정하면 dirty value flag 도 재설정</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/webappapis.html#dom-document-_open"><code>document.open()</code></a> 와 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/webappapis.html#dom-document-close"><code>document.close()</code></a> 는 XML 문서 확인</li>
<li><code>HashChangeEvent</code> URL은 <code>DOMString</code> 대신 <code>USVString</code> 사용</li>
<li><a href="https://www.w3.org/TR/selection-api/#dom-selection"><code>selection</code></a> 의 member 타입에 <code>null</code> 사용 가능</li>
<li><code>data:</code> URL은 별도의 출처로 취급</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/editing.html#element-attrdef-global-tabindex"><code>tabindex</code></a> 이벤트로 포커스가 발생하는 요소에는 포인터가 아닌 장치일때 <code>click</code> 이벤트가 발생 안함</li>
<li>샌드박스 컨텍스트에 대한 네비게이션</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/references.html#biblio-html-aria">[html-aria]</a> 에 허용 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/infrastructure.html#element-attrdef-aria-role"><code>role</code></a> 업데이트</li>
</ul>
<p>&nbsp;</p>
<h4 id="지금부터-유효한-html-구문">지금부터 유효한 HTML 구문:</h4>
<ul>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/sections.html#elementdef-body"><code>&lt;body&gt;</code></a> 안에 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/document-metadata.html#elementdef-style"><code>&lt;style&gt;</code></a> 사용 가능</li>
<li>DOM에 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/grouping-content.html#elementdef-main"><code>&lt;main&gt;</code></a>요소가 1개만 표시된다면 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/grouping-content.html#elementdef-main"><code>&lt;main&gt;</code></a> 요소를 여러개 사용 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#elementdef-img"><code>img</code></a> 요소에 <a href="https://www.w3.org/TR/wai-aria-1.1/#presentation"><code>presentation</code></a> <code>role</code> 사용 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/grouping-content.html#elementdef-dl"><code>dl</code></a> 의 자식 요소로 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/grouping-content.html#elementdef-div"><code>div</code></a> 요소 사용 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/grouping-content.html#elementdef-li"><code>li</code></a> 의 자식 요소로 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/textlevel-semantics.html#elementdef-dfn"><code>dfn</code></a> 요소 사용 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-fieldset"><code>fieldset</code></a> 요소 안의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-legend"><code>legend</code></a> 요소 안서 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/sections.html#elementdef-h1"><code>Headings(h1-h6)</code></a> 요소 사용 가능</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-datalist"><code>datalist</code></a> 요소의 자식 요소 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-option"><code>option</code></a> 에서 빈 값 사용 가능</li>
<li>주석에서 2개의 연속된 하이픈 혹은 1개의 하이픈으로 끝나는 구문 사용 가능</li>
<li><a href="https://github.com/w3c/html/commit/a2c91fad226e62419aef4c67581cec267df61b5e">BiDi 알고리즘 섹션</a>의 제한 제거</li>
</ul>
<p>&nbsp;</p>
<h4 id="지금부터-유효하지-않은-html-구문">지금부터 유효하지 않은 HTML 구문:</h4>
<ul>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/tabular-data.html#elementdef-caption"><code>&lt;caption&gt;</code></a> 요소의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/infrastructure.html#element-attrdef-aria-role"><code>role</code></a> 속성 사용 불가</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/grouping-content.html#elementdef-p"><code>&lt;p&gt;</code></a> 요소 하위의 Inline blocks, inline tables, floated, positioned block-level 요소 사용 불가</li>
<li>문서 형식 선언(<a href="https://www.w3.org/TR/html52/syntax.html#the-doctype"><code>&lt;!DOCTYPE&gt;</code></a>)에 HTML4 또는 XHTML1 strict 사용 불가</li>
</ul>
<p>&nbsp;</p>
<h2 id="새로운-개념new-concepts">새로운 개념(New concepts)</h2>
<ul>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/browsers.html#serialized-state">serialized state</a> 와 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/browsers.html#creator-context-security">creator context security</a> 추가</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/dom.html#elementdef-document"><code>Document</code></a> 객체에서 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/browsers.html#browsing-context"><code>browsing context</code></a>의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#allowed-to-use">사용 여부를 확인하는 알고리즘</a> 추가</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/webappapis.html#windoworworkerglobalscope"><code>WindowOrWorkerGlobalScope</code></a> API에 <code>mixin</code> 추가</li>
</ul>
<p>&nbsp;</p>
<h2 id="편집-설명-editorial-clarifications">편집 설명(Editorial clarifications)</h2>
<ul>
<li>Browsers should represent punycode addresses as natural unicode text for the email input type.</li>
<li>브라우저는 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#elementdef-input"><code>&lt;input&gt;</code></a> 요소의 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#attr-valuedef-input-type-email"><code>email</code></a> 타입에 <code>punycode</code> 주소를 유니 코드 문자로 나타내야 한다.</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#dom-htmlmediaelement-seekable"><code>seekable</code></a> IDL 속성에 대한 마지막 프레임 시간 개념을 명확히 한다.</li>
<li><a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#suggestions-source-element">suggestions source element</a> 를 사용하여 제안을 필터링하는 브라우저는 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/sec-forms.html#element-attrdef-option-label"><code>label</code></a> 속성에 부분 문자열 일치를 구현해야 한다.</li>
<li>사용자는 포인팅 장치 사용 여부와 상관 없이 <a href="https://www.w3.org/TR/2017/REC-html52-20171214/semantics-embedded-content.html#elementdef-area"><code>&lt;area&gt;</code></a> 요소와 상호 작용할 수 있어야 한다.</li>
</ul>
<p>[출처]</p>
<p><a href="https://www.w3.org/TR/html52">W3C: HTML 5.2</a></p>
<p><a href="https://www.w3.org/TR/2017/REC-html52-20171214/changes.html#changes">W3C: HTML 5.2 Changes</a></p>
<p><a href="https://www.w3.org/blog/2017/12/html-5-2-is-done-html-5-3-is-coming/">W3C: HTML 5.2 IS DONE, HTML 5.3 IS COMING</a></p>
<p>http://blog.gaerae.com/2017/12/html5-changes.html?m=1</p>
<p>&nbsp;</p>
<p>https://mulder21c.github.io/2017/12/26/understanding-html-52-changes/</p>
]]></content:encoded>
					
					<wfw:commentRss>http://uxcss.com/wp/archives/140/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">140</post-id>	</item>
	</channel>
</rss>
