JQuery를 이용한 겸손한 탭 메뉴 구현

이번에 사이트를 개편하면서, 탭 메뉴로 구성된 추천 글 목록을 추가했습니다. 제 사이트의 방문자 통계를 확인하니, 방문자들의 이동 경로가 1개의 글만 읽고 사이트를 떠나거나, 홈페이지로 이동하는 등 무척 기초적인 수준의 이용만 하고 있다는 것을 확인했기 때문입니다. 블로그의 글이 360개임에도 불구하고 1~2개 글만 보고 떠나는 걸 방치할 수 없었기에 추가한 콘텐츠입니다.

웹 사이트에서 탭 메뉴를 구현하기 위한 일반적인 방법은 Javascript의 onClick 이벤트를 이용하여, style의 display 속성을 조정하는 것입니다. 이때 보통은 HTML a 태그에 Javascript를 직접 사용하는 방식을 이용합니다. 때문에 이 방법은 구조적인 HTML 마크업과 거리가 멀이질 수 밖에 없죠. 즉, 웹 표준에 어긋난는 방법입니다. 또한 마우스를 사용하지 못하기 때문에 onClick 이벤트를 발생시킬 수 없는 시각장애인의 경우 해당 컨텐츠에 접근하기도 어렵습니다.

제 사이트는 Javascript library로 JQuery를 사용하고 있습니다. JQuery는 파이어폭스나 워드프레스와 비슷한 점이 많습니다 . 예전에 몇몇 글에서 밝혔듯이, 무척 작고 효율적이며, 다양한 기능 외에도 플러그인이 많은 라이브러리죠. 특히 JQuery의 $(document).readyDOM의 고질적인 문제인 브라우저의 늦은 랜더링을 해결할 수 있답니다.

탭 메뉴에 해당하는 콘텐츠 구성

저는 사이트 방문객이 좀 더 머무르면서 다양한 콘텐츠에 접근할 수 있는 기회를 제공하기 위해서, 탭 메뉴로 구성된 콘텐츠를 제공하고 싶었습니다.

겸손한 탭 메뉴 구현

HTML로 콘텐츠 구조화

탭 메뉴를 책의 목차(Table Of Contents) 형식으로 구성했습니다. 현재의 HTMLXHTML 스펙에서 가장 구조적인 방법이죠. 물론 앞으로 HTML 5가 채택되어 nav 요소를 사용할 수 있기 전까지 입니다.

<div id="readMore02">
	<h2>또 다른 읽을거리</h2>
	<ul class="tabs-nav">
		<li class="tabs-selected"><a href="#relatedPost">Related Post</a></li>
		<li><a href="#randomPost">Random Post</a></li>
		<li><a href="#recentPost">Lasted Post</a></li>
	</ul>
	<div id="relatedPost" class="tabs-selected ">
		<h3>Related Post</h3>
		<ol>
			<li><a href="#">웹표준의 득과 실</a></li>
			<li><a href="#">브라우저 업그레이드 캠페인</a></li>
			<li><a href="#">Hooney.net 리뉴얼 계획-1</a></li>
			<li><a href="#">올블로그의 플래시 네비게이션</a></li>
			<li><a href="#">아직 메인시안도 미완성이네..</a></li>
		</ol>
	</div>
	<div id="randomPost">
		<h3>Random Post</h3>
		<ol>
			<li><a href="#">세계 비보이 대회 한국 개최, 그리고 잡담</a></li>
			<li><a href="#">KWAG 7회 워크샵</a></li>
			<li><a href="#">CSS, 웹표준 실무 적용 워크샵 2006</a></li>
			<li><a href="#">Global Web Expert 실무 워크샵</a></li>
			<li><a href="#">변경된 구글 코리아의 첫 화면을 뜯어 보자.</a></li>
		</ol>
	</div>
	<div id="recentPost">
		<h3>Recent Post</h3>
		<ol>
			<li><a href="#">블로그 4번째 리뉴얼</a></li>
			<li><a href="#">Fujitsu ColorSelector 사용기</a></li>
			<li><a href="#">W3C의 마크업 유효성 검사 서비스 디자인 개편</a></li>
			<li><a href="#">Fujitsu 웹 접근성 보조도구</a></li>
			<li><a href="#">구글 페이지 랭크 7점 획득</a></li>
		</ol>
	</div>
</div>

CSS로 콘텐츠 시각화

CSS를 이용하여 콘텐츠를 시각적으로 표현했습니다. float 속성을 사용하여 탭 메뉴를 가로로 배치한 점 외에는 특별히 고급 기술을 사용하지 않았습니다. IE가 비순차적 목록(ol)의 상단 마진를 다르게 출력하는 버그 때문에, 2줄의 CSS가 추가됐습니다.

body {
	margin:0; padding:0;
	font: .75em/1.5 "AppleGothic", "Malgun Gothic", dotum, sans-serif;
}
a { color:#369; font-weight:bold;}
#readMore02 {
	position:absolute; top:50%; left:50%;
	width:350px;
	margin:-120px 0 0 -180px;
	border:1px solid #ccc;
}
#readMore02 h2,
#readMore02 h3 { display:none; }
#readMore02 ul {
	margin:0; padding:5px 0 0 2px;
	height:26px;
	border-bottom:1px solid #ccc;
	background:#eee;
}
#readMore02 ul li {
	list-style:none;
	float:left;
	margin:0 0 0 3px; padding:0;
	position:relative; top:1px;
}
#readMore02 ul li a {
	display:block;
	padding:.25em .75em;
	border:1px solid #ccc;
	line-height:1.5; text-decoration:none;
	background:#aaa; color:#fff;
}
#readMore02 ul li a:hover,
#readMore02 ul li a:focus,
#readMore02 ul li.tabs-selected a {
	border-bottom:1px solid #fff;
	background:#fff; color:#f60;
}
#readMore02 div {clear:left;padding-top:1em;} /* IE6 마진 버그 */
#readMore02 div.tabs-selected { display:block; }
#readMore02 div.tabs-hide { display:none; }
#readMore02 ol { margin-top:0; } /* IE6 마진 버그 */
#readMore02 ol li { line-height:2; }

JQuery로 콘텐츠 동적 구현

JQuery와 tabs 플러그인을 이용하여 탭 메뉴를 동적으로 구현했습니다. 플러그인에서 지원하는 페이드 효과를 이용하니 훨씬 보기 좋은 탭 메뉴가 구현됐습니다.

<script src="/theme/v4/js/jquery.js" type="text/javascript"></script>
<script src="/theme/v4/js/jquery.tabs.pack.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function()	{
$('#readMore02').tabs({ fxSlide: true, fxFade: true, fxSpeed: 'normal' });
});
</script>

이 글이 저처럼 블로그에 많은 글을 작성했음에도 불구하고, 예전에 작성한 글이 방문객에게 좀처럼 노출되지 않는 문제로 고민하던 분들에게 도움이 됐으면 좋겠니다. :)

고급 인재를 추천합니다.

웹 표준 및 접근성 분야에서 최상의 기술력을 보유한 고급 인재를 추천합니다. 추천할 분은 제가 아니라, 현재 다음커머스 플랫폼개발팀에서 근무하는 도금호님입니다. 웹 관련 기획, 디자인, 개발 등 다양한 경력을 쌓아 왔으며, 현재는 CSS와 Javascript 부분에서 강력한 내공을 쌓고 있습니다.

국내에서 이 정도의 기술력을 갖춘 분을 찾는 건 쉽지 않습니다. 이쪽 분야에서 상위 2% 안에 들 정도의 대단한 분입니다. 아쉽게도 구인을 하고 있는 많은 회사가 이러한 사실을 모른다는 점이죠. 해외에서는 자신의 블로그에서 구직 관련 글을 작성하고 이를 통해 좋은 회사로 취업한 분들도 종종 볼 수 있습니다. 금호님이 블로그를 운영하지 않고 있기에, 제가 대신 이렇게 블로그에 구직 관련 마케팅 글을 작성합니다. 이 글이 도움이 될 수 있을지 확실치 않지만, 적어도 제 글을 구독하는 분들은 이러한 사실을 알 수 있을테니깐요~

좋은 사람을 알아보는 눈을 갖춘 좋은 회사를 찾습니다. 저는 금호님이 에이젼시에서 고급 품질의 웹 사이트를 많이 제작하셨으면 좋겠지만, 당사자는 게임회사에 관심이 많다고 합니다. 자신의 포트폴리오 중에서 예전 에이젼시에서 근무할 때 제작했던 게임 사이트가 가장 맘에 든다고 합니다. 최근 제작한 접근성 높은 스크롤 배너를 확인해주세요.

관심있는 분이나 구인 중인 회사는 답글을 남겨주시면, 금호님의 연락처를 이메일로 알려드리겠습니다.

DOM과 CSS의 선택자

몇일째 JSDOM과 관련된 책을 읽고 있다. 아무래도 남은 휴가기간은 내일과 모래에는 다른 일을 해야할 것 같기에, 일일 풀타임 독서도 오늘로써 끝일 것 같다.

JSDOM에 관련된 국내 서적을 찾기는 생각보다 쉽지 않다. 대부분은 활용팁들의 예제를 중심으로 설명된 책들이라 기본 원리에 대한 깊숙한 접근(마치 수학 정석 교제에서 공식을 증명하는 단계와 같은)을 하고 싶던 나로써는 W3C 사이트로 발길을 돌릴 수 밖에 없다.

DOM(문서 객체 모델)에 접근할수록, CSS2의 selector(선택자)가 자꾸 떠오른다. CSS의 선택자는 인터넷 익스플러가 거의 지원하지 않는 요소이기에, 국내 CSS 활동가들은 물론이고 해외 CSS 활동가 사이에서도 거의 논의 대상에서 빠져 있는 것 같다.

CSS의 선택자를 통해서도 어느정도(완벽할 순 없고) 문서 객체 모델에 접근할 수 있을 것이다. JSDOM을 이용해서 각 개체의 스타일 속성을 변경하는 것보다는 CSS로 접근하는 편이 훨씬 편하고 쉽다고 생각한다. (문제는 역시 IE의 미비한 지원이겠지만..)

현재로써 CSS의 선택자에 대한 정보를 얻을 수 있는 거의 유일한 방법은 W3C에서 권고된 CSS 문서 뿐인 것 같다. (혹시 관련 정보를 다루고 있는 국내 서적이나 국내 사이트를 아시는 분은 정보 좀 공유해 주시길..)

CSS3의 선택자들은 CSS2의 선택자들보다 그 양에서만 2배 가까이 늘어난 것 같다.

The Mouseover DOM Inspector

Steve Chipman가 자신의 블로그에서 Mouseover DOM Inspector v2.0b Help를 공개했네요. 북마클릿(Bookmaklet) 형식으로 웹페이지에서 레이어처럼 볼 수 있는 점이 FF의 고급설치시 지원되는 DOM 조사기능보다 효율적인 것 같습니다.

Firefox, Mozilla, Opera 7.5+ and MSIE6+ 을 지원하지만, 아쉽게도 Safari는 지원하지 않네요. (J님이 서운해 하실듯..)

이 놀라운 기능이 북마클릿 버튼으로 구현될 수 있다니.. 예전부터 생각했었지만, 자바스크립트의 한계는 없는 것 같습니다.

FF의 확장기능인 웹디벨롭퍼와 함께, 웹페이지를 분석하거나 수정하는데 편리한 도구가 될 듯 싶습니다. :)

자바스크립트 네비게이션

CSS를 주로 다루는 사이트는 웹페이지의 네비게이션를 제작할 때, 당연히 CSS로 표현하라고 권한다. 어쩔 수 없는 경우에는 자바스크립트를 사용하라고 한다. 플래시에 대한 언급은 거의 없다.

CSS Reboot에 소개되어 있는 사이트들을 구경하던 중, 심플한 디자인의 Monolinea이 눈에 들어왔다. 다이나믹한 네비게이션을 플래시가 아닌 자바스크립트를 이용하여 표현하고 있었다.

국내 사이트들의 경우에는 대부분의 사이트들이 플래시로 네비게이션으로 표현한다. 이 사이트를 보기 전까지만 해도, 다이나믹한 네비게이션은 플래시로만 만드는 줄 알았다. 물론 자바스크립트 콘솔로 확인해보니 몇몇 에러와 1개의 경고가 나오긴 하지만, 자바스크립트로 흔히 볼 수 있는 플래시 네비게이션과 흡사하게 표현할 수 있다는 점이 놀라울 뿐이다.

사이트를 둘러보면, 비단 네비게이션 뿐만 아니라 이미지 블러/알파 등 여러 부분에서 자바스크립트 만으로 다양한 효과를 나타내고 있다.

자바스크립트와 같은 프로그래밍에 개념이 부족한 나만 이렇게 신기한 걸까? 어쨓든 놀랍고 신기한 건 사실이다.

플래시를 사용안하고 이미지에 fade 효과 주기

이미지를 플래시를 통해 보여주는 이유 중의 하나는 바로 Fade 효과이다. 플래시는 모션트윈 생성을 통해서 알파값만 조절해주면 간단하게 이미지 fade 효과를 나타낼 수 있다.

http://www.couloir.org/ 에 가보면, 플래시를 사용하지 않고 메인이미지에 Fade 효과를 주고 있음을 알 수 있다. 꽤 유용한 기술이라 생각해서 나름대로 검색엔진을 돌려보니 Cagnut의 글 중에서 Onload image fades without Flash를 발견할 수 있었다.

CSS의 opcity 속성값을 비교적 단순한 자바스크립트를 사용을 통하여 이미지 fade 효과를 훌륭하게 표현하고 있다. 물론, W3CCSS, XHTML Validator를 통과하고 있다. 간단한 이미지 fade 효과는 플래시를 사용하는 것보다 이 기술을 사용하는 것이 더 효율적일 것 같다. :)


Be Friend~! Be Friend~!