<?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/"
	>

<channel>
	<title>겨미♡웹 &#187; 마크업</title>
	<atom:link href="http://miya.pe.kr/tag/%eb%a7%88%ed%81%ac%ec%97%85/feed/" rel="self" type="application/rss+xml" />
	<link>http://miya.pe.kr</link>
	<description>웹 클라이언트 사이드 - UI 그리고 마크업.</description>
	<lastBuildDate>Mon, 05 Mar 2012 08:23:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>정보로서가 아닌 정보를 꾸며주기 위해 사용하는 &lt;img&gt; 태그, 그리고 이미지 대치법(Image Replacement)</title>
		<link>http://miya.pe.kr/2008/04/22/%ec%a0%95%eb%b3%b4%eb%a1%9c%ec%84%9c%ea%b0%80-%ec%95%84%eb%8b%8c-%ec%a0%95%eb%b3%b4%eb%a5%bc-%ea%be%b8%eb%a9%b0%ec%a3%bc%ea%b8%b0-%ec%9c%84%ed%95%b4-%ec%82%ac%ec%9a%a9%ed%95%98%eb%8a%94-img/</link>
		<comments>http://miya.pe.kr/2008/04/22/%ec%a0%95%eb%b3%b4%eb%a1%9c%ec%84%9c%ea%b0%80-%ec%95%84%eb%8b%8c-%ec%a0%95%eb%b3%b4%eb%a5%bc-%ea%be%b8%eb%a9%b0%ec%a3%bc%ea%b8%b0-%ec%9c%84%ed%95%b4-%ec%82%ac%ec%9a%a9%ed%95%98%eb%8a%94-img/#comments</comments>
		<pubDate>Mon, 21 Apr 2008 17:34:43 +0000</pubDate>
		<dc:creator>김군우</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[웹 접근성]]></category>
		<category><![CDATA[웹 표준]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Image Replacement]]></category>
		<category><![CDATA[img]]></category>
		<category><![CDATA[마크업]]></category>
		<category><![CDATA[이미지]]></category>
		<category><![CDATA[이미지 대치법]]></category>

		<guid isPermaLink="false">http://miya.pe.kr/?p=77</guid>
		<description><![CDATA[현 시대의 CSS로는 마크업의 무결성을 보장하면서 원하는 표현을 충분히 할 수 없다. 그 대표적인 예가 폰트와 배경이미지이다. 그 중에서도 폰트와 같은 경우는 기본 텍스트만으로는 원하는 결과물을 얻기가 힘들다. 이럴 때 우리가 가장 많이 사용하는 방식이 &#60;img&#62; 태그 혹은 이미지 대치법(Image Replacement)이다. 정보를 꾸며주기 위한 &#60;img&#62; 태그 &#60;img&#62; 태그는 사전적으로는 정보를 지닌 &#8211; 의미 있는 &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>현 시대의 <abbr title="Cascading Style Sheet">CSS</abbr>로는 마크업의 무결성을 보장하면서 원하는 표현을 충분히 할 수 없다. 그 대표적인 예가 <a href="http://miya.pe.kr/archives/74">폰트</a>와 <a href="http://miya.pe.kr/archives/72">배경이미지</a>이다. 그 중에서도 폰트와 같은 경우는 기본 텍스트만으로는 원하는 결과물을 얻기가 힘들다. 이럴 때 우리가 가장 많이 사용하는 방식이 <code class="html">&lt;img&gt;</code> 태그 혹은 이미지 대치법(Image Replacement)이다.</p>

<h3>정보를 꾸며주기 위한 <code class="html">&lt;img&gt;</code> 태그</h3>

<p><code class="html">&lt;img&gt;</code> 태그는 사전적으로는 정보를 지닌 &#8211; 의미 있는 &#8211; 시각 요소를 문서에 삽입하기 위한 태그이지만, 앞서 언급한 표현의 제약으로 인해 폰트 등을 원하는 대로 표현하기 위한 용도로 사용하기도 하다. 예전부터 &#8211; 대다수의 웹 제작자들이 마크업을 표현을 위한 용도로 사용하던 시절부터 &#8211; 국내의 거의 모든 사이트들이 사용하는 방법이기도 하다.</p>

<h4>문제점</h4>

<p>우선 <strong><code class="html">&lt;img&gt;</code> 태그의 남용이 마크업의 의미를 떨어뜨린다</strong>. 단순 텍스트와 <code class="html">&lt;img&gt;</code> 태그는 기본적으로 의미하는 바가 다르다. <strong>이미지 검색엔진의 결과물로 나타나는 수많은 텍스트 꾸밈용 이미지들을 보면 <code class="html">&lt;img&gt;</code> 태그의 남용이 잘못된 마크업이라는 생각을 할 수 있다</strong>.</p>

<p>또, 남용된 <code class="html">&lt;img&gt;</code> 태그는 <strong>구조와 표현의 분리라는 CSS의 목적을 달성하는 데 장애물이 된다</strong>. 마크업에 박혀있는 특정 시각 디자인 결과물을 위한 <code class="html">&lt;img&gt;</code> 태그들은 다양한 표현의 걸림돌이다. <code class="html">&lt;img&gt;</code> 태그가 남용된 사이트에서 프린트를 위한 CSS를 제작한다면 그 결과물은 어쩔 수 없이 스크린의 그것에서 크게 달라질 수 없을 것이다. 스크린 디자인을 위해 사용된 <code class="html">&lt;img&gt;</code> 태그의 모양새는 바꾸기가 어렵기 때문이다.</p>

<h3>CSS를 이용한 이미지 대치법(Image Replacement)</h3>

<h4>문제점</h4>

<p>앞서 언급한것처럼 <code class="html">&lt;img&gt;</code> 태그는 많은 문제점이 있지만 CSS를 이용한 이미지 대치법 역시 많은 문제를 가지고 있다. 가장 대표적으로 대다수의 이미지 대치법이 텍스트를 숨기거나(<code class="css">display: none;</code>) 화면 밖으로 위치시키는 방법(<code class="css">text-indent: -999em;</code>)을 사용하기 때문에 <strong>CSS 활성화·이미지 비활성화 상태에서 화면 상에 아무것도 출력하지 못하며</strong> 이 방법을 프린트용 CSS에 동일하게 적용하였을 때 보통의 웹 브라우저들이 기본적으로 배경 이미지를 출력하지 않기 때문에 <strong>백지 상태의 인쇄물을 보게되는 경우가 생긴다.</strong> (<code class="html">&lt;img&gt;</code> 태그 사용시에는 사용자가 의도하지 않은 사이에 프린터의 잉크나 토너가 낭비된다!)</p>

<h4>약간의 해결책</h4>

<p>CSS 활성화·이미지 비활성화 상태의 경우 <a href="http://www.mezzoblue.com/tests/revised-image-replacement/#gilderlevin">Gilder/Levin의 방법</a>이나 <a href="http://www.ryznardesign.com/web_coding/image_replacement/index.html#glrj">Gilder Levin Ryznar Jacoubsen의 방법</a>을 통해 해결할 수 있다. 하지만 이 방법은 이미지 뒤에 가려진 텍스트가 표시될 수 있는 충분한 공간이 확보되지 않으면 무용지물이 될 수 있다. <a href="http://www.nmindplus.com/2006/09/24/z-index/">z-index를 이용한 이미지 대치법</a>도 하나의 방법인데 대치할 요소의 부모 요소에 배경색이 들어가있거나 한 경우에 문제가 생길 수 있다. 그리고 앞의 방법들과 마찬가지로 텍스트의 공간에 대한 문제가 있다. 그리고 이 모든 방법들은 <strong>의미없는 추가적인 마크업을 필요</strong>로 한다.</p>

<p>프린트 시의 문제는? 프린트용 CSS를 별도로 제작하면 바로 해결된다. 설마 로고와 메뉴가 덕지덕지 붙은 화면을 사용자에게 그대로 출력시키게 하는 것을 그냥 지켜보고 있다면 바로 당신이 관리하는 사이트에 프린트용 CSS를 추가하라.</p>

<h3>어떤 것을 선택하느냐?</h3>

<p><code class="html">&lt;img&gt;</code> 태그, 이미지 대치법(Image Replace). <strong>이 방법들 중 어떤 것도 완벽하지 않다</strong>. 다만 각 방법들이 서로 다른 문제를 가지고 있고 어떤 것을 선택하느냐에 앞서 이 방법들의 문제점들에 대해 이해한 후에 선택하는 것이 필요하다.</p>
]]></content:encoded>
			<wfw:commentRss>http://miya.pe.kr/2008/04/22/%ec%a0%95%eb%b3%b4%eb%a1%9c%ec%84%9c%ea%b0%80-%ec%95%84%eb%8b%8c-%ec%a0%95%eb%b3%b4%eb%a5%bc-%ea%be%b8%eb%a9%b0%ec%a3%bc%ea%b8%b0-%ec%9c%84%ed%95%b4-%ec%82%ac%ec%9a%a9%ed%95%98%eb%8a%94-img/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>겸손한 자바스크립트의 기본</title>
		<link>http://miya.pe.kr/2007/11/25/%ea%b2%b8%ec%86%90%ed%95%9c-%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8%ec%9d%98-%ea%b8%b0%eb%b3%b8/</link>
		<comments>http://miya.pe.kr/2007/11/25/%ea%b2%b8%ec%86%90%ed%95%9c-%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8%ec%9d%98-%ea%b8%b0%eb%b3%b8/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 14:23:49 +0000</pubDate>
		<dc:creator>김군우</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Markup]]></category>
		<category><![CDATA[웹 접근성]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[겸손한 자바스크립트]]></category>
		<category><![CDATA[마크업]]></category>
		<category><![CDATA[자바스크립트]]></category>

		<guid isPermaLink="false">http://www.miya.pe.kr/archives/21</guid>
		<description><![CDATA[겸손한 자바스크립트의 사전적인 의미는 문서(HTML)와 동작(자바스크립트)를 분리하는 것이지만, 그 이전에 기본은 자바스크립트를 사용하는 모든 경우에 대해 사용 가능한 경우와 가능하지 않은 경우를 염두하여 설계하는 것이다. 웹 페이지를 제작하면서 자바스크립트를 어떤 부분에 사용해야겠다라고 마음 먹으면 우리는 자바스크립트를 표시하는 &#60;script&#62; 태그를 쓴다. 앞서 얘기한 설계대로 &#60;script&#62; 태그의 사용 가능하지 않은 경우를 위해 &#60;noscript&#62; 태그를 쓸 수 있다. [...]]]></description>
			<content:encoded><![CDATA[<p>겸손한 자바스크립트의
    <ins datetime="2008-04-25T04:30:00+09:00">사전적인 의미는 문서(<abbr title="Hypertext Markup Language">HTML</abbr>)와 동작(자바스크립트)를
        분리하는 것이지만, 그 이전에</ins>
    기본은 <strong>자바스크립트를 사용하는 모든 경우에 대해 사용 가능한 경우와 가능하지 않은 경우를 염두하여 설계하는 것</strong>이다.</p>

<p>웹 페이지를 제작하면서 자바스크립트를 어떤 부분에 사용해야겠다라고 마음 먹으면
    우리는 자바스크립트를 표시하는 &lt;script&gt; 태그를 쓴다.
    앞서 얘기한 설계대로 &lt;script&gt; 태그의 사용 가능하지 않은 경우를 위해 &lt;noscript&gt; 태그를 쓸 수 있다.
    어플리케이션 레벨이 아닌 마크업이 잘 되어 정상적인 기능을 하는
<abbr title="Hypertext Markup Language">HTML</abbr> 문서에 부가적인 사용자 편의성의 증대를 목적으로
    사용하는 자바스크립트라면 &lt;script&gt; 태그가 동작하지 않을 경우
    자바스크립트가 없는 <abbr title="Hypertext Markup Language">HTML</abbr> 문서와 같이 작동하게 되므로
    굳이 &lt;noscript&gt; 태그가 필요하지 않을 것이다.</p>

<ins datetime="2008-04-25T04:30:00+09:00">
    <p>다음의 두 코드를 보자. 직업을 입력하지 않았을 때 오류메시지를 표시하는 스크립트를 삽입한 폼이다.</p>
    <pre><code class="html">&lt;form action=&quot;insert&quot; id=&quot;f&quot;&gt;
    &lt;fieldset&gt;
        &lt;label for=&quot;yourjob&quot;&gt;당신의 직업&lt;/label&gt;
        &lt;input type=&quot;text&quot; name=&quot;job&quot; id=&quot;yourjob&quot; /&gt;
        <strong>&lt;a href=&quot;javascript:checkForm();&quot;&gt;전송&lt;/a&gt;</strong>
    &lt;/fieldset&gt;
&lt;/form&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
// &lt;![CDATA[
function checkForm() {
    var form = document.getElementById(&quot;f&quot;);
    if (form.elements[&quot;job&quot;].value == &quot;&quot;) {
        alert(&quot;직업을 입력해주세요.&#038;quot);
    } else {
        form.submit();
    };
};
// ]]&gt;
&lt;/script&gt;</code></pre>
    <pre><code class="html">&lt;form action=&quot;insert&quot; id=&quot;f&quot;&gt;
    &lt;fieldset&gt;
        &lt;label for=&quot;yourjob&quot;&gt;당신의 직업&lt;/label&gt;
        &lt;input type=&quot;text&quot; name=&quot;job&quot; id=&quot;yourjob&quot; /&gt;
        &lt;input type=&quot;submit&quot; value=&quot;전송&quot; /&gt;
    &lt;/fieldset&gt;
&lt;/form&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
// &lt;![CDATA[
if (document.getElementById &amp;&amp; document.getElementById(&quot;f&quot;)) {
    var form = document.getElementById(&quot;f&quot;);
    form.onsubmit = function() {
        if (this.elements[&quot;job&quot;].value == &quot;&quot;) {
            alert(&quot;직업을 입력해주세요.&#038;quot);
            return false;
        };
    };
};
// ]]&gt;
&lt;/script&gt;</code></pre>
    <p>전자는 자바스크립트를 제거하였을 때 아무런 동작을 하지 않는 예제이고
        후자는 <abbr title="Hypertext Markup Language">HTML</abbr>에 선언된 링크로 이동할 수 있는 예제이다.
    <strong>어떤 코드를 작성하던 비슷한 시간이 소요</strong>되겠지만 &#8211; 학습에 필요한 시간은 제외한다. -
        전자의 경우 <strong>문서의 가치가 훨씬 떨어진다</strong>.</p>
</ins>

<p>모든 사용자가 당신의 자바스크립트 코드를 실행할 수 있을 것이라고 기대하지 말아야 한다.
    또, 어떤 사용자는 당신의 자바스크립트 코드 중 어떤 부분을 제대로 해석하지 못한다는 것을 알아야 한다.</p>

<p>자바스크립트는 플래시, ActiveX와 같은 외부 플러그인과 개념 상 다르지 않다.
    오히려 언급한 것처럼 사용자에 따라 불완전하게 실행될 가능성이 있기 때문에 더 다루기 어려운 기술임을 인식하여야 한다.</p>

<h3>참고 링크</h3>

<ul>
    <li><a href="http://en.wikipedia.org/wiki/Unobtrusive_JavaScript">Unobtrusive JavaScript &#8211; wikipedia</a></li>
    <li><a href="http://www.alistapart.com/articles/behavioralseparation">Behavior Seperation &#8211; A List Apart</a></li>
    <li><a href="http://sangini.net/56">자바스크립트를 올바르게 사용하기 &#8211; Sangini World</a></li>
    <li><a href="http://hyeonseok.com/docs/accessible-javascript/">접근성을 해치지 않는 자바스크립트의 사용 &#8211; 신현석</a></li>
</ul>

<p class="updatedat">마지막 업데이트: 2008년 4월 25일 04시 30분</p>
]]></content:encoded>
			<wfw:commentRss>http://miya.pe.kr/2007/11/25/%ea%b2%b8%ec%86%90%ed%95%9c-%ec%9e%90%eb%b0%94%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8%ec%9d%98-%ea%b8%b0%eb%b3%b8/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

