태터툴즈에는 원래는 기본 기능으로 있다가 업그레이드 되면서 빠졌다가 다시 플러그인으로 추가된 기능[각주:1]이 있습니다. 바로 키워드 (키로그) 기능이지요.

특이하게 현재 설치형 버전 1.1.1과 티스토리 1.1[각주:2]은 이 기능과 관련된 스킨 치환자들의 사용법에 약간의 차이가 있습니다. 왜 이런 차이가 생겼는지 이유는 잘 모르겠습니다만, 이 차이를 유지해줘야 양쪽의 경우 모두 제대로 나오게 됩니다.

간단하게 다음의 예를 보죠.


태터툴즈 1.1.1의 경우에는 이렇게 적어야 제대로 나옵니다.

<s_keyword>
    <ul>
        <s_keyword_date_rep><s_keyword_rep>
            <li onclick="[ ##_onclick_keyword_## ]" style="cursor:pointer;cursor:hand;">[ ##_keyword_label_## ]</li>
        </s_keyword_rep></s_keyword_date_rep>
    </ul>
</s_keyword>


반면 티스토리 1.1의 경우에는 <s_keyword_date_rep> 와 </s_keyword_date_rep> 를 적어주면 키워드가 제대로 표시가 되지 않기 때문에 반드시 빼줘야 합니다.

<s_keyword>
    <ul>
        <s_keyword_rep>
            <li onclick="[ ##_onclick_keyword_## ]" style="cursor:pointer;cursor:hand;">[ ##_keyword_label_## ]</li>
        </s_keyword_rep>
    </ul>
</s_keyword>

  1. 우여곡절이 참 많은 기능입니다. [본문으로]
  2. 태터툴즈의 버전을 표시하는 치환자 [ ##_tattertools_version_## ]으로 확인해보면 현재의 티스토리 버전은 1.1이지요. [본문으로]
,
화면에 표시되는 페이지가 아주 길거나 필요한 버튼이 화면의 최하단에 있거나 하면 매번 스크롤 하는 게 불편할 수 있습니다. 그럴 때는 보통 키보드의 [home], [end] 버튼을 누르면 되지만 마우스 잡았다가 키보드 버튼 누르는 것 역시 불편하지요. 또한 각종 마우스 제스쳐 프로그램[각주:1]을 사용하면 되지만 그마저도 사용하지 않으면 딱히 방도가 없지요.

그럴 때는 페이지에 아래와 같은 자바스크립트를 넣는 겁니다. <head>와 </head> 사이에 아무데나 넣어주면 됩니다. 그러고 난 후 더블클릭하면 화면의 최상단으로, 다시 더블클릭하면 최하단으로 이동합니다. :)

<script language=javascript>
<!--
toggle=0;
function dblclick() {
    if (toggle==0) {
        var sc=99999; toggle=1;
    } else {
        var sc=0; toggle=0;
    }

    window.scrollTo(0,sc);
}

if (document.layers) {
    document.captureEvents(Event.ONDBLCLICK);
}
document.ondblclick=dblclick;

var IE = document.all?true:false;
if (!IE) document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = getMouseXY;

var tempX = 0;
var tempY = 0;

function getMouseXY(e) {
    if (IE) { // grab the x-y pos.s if browser is IE
        tempX = event.clientX + document.body.scrollLeft;
        tempY = event.clientY + document.body.scrollTop;
    } else { // grab the x-y pos.s if browser is NS
        tempX = e.pageX;
        tempY = e.pageY;
    }

    if (tempX < 0){tempX = 0;}
    if (tempY < 0){tempY = 0;}
    return true;
}
// -->
</script>

제가 만든 스킨들에도 넣어주면 아주 좋겠죠? 다음 스킨들부터는 이 스크립트를 넣을 생각입니다. 이제까지 나온 스킨들에는 죄송하지만 각자 넣어주세요. ^^
  1. 파이어폭스 같은 경우는 All-in-One Gestures,
    인터넷 익스플로러 같은 경우는 IEToy,
    오페라의 경우에는 간단한 마우스제스쳐 기능이 내장되어 있습니다. [본문으로]
,
이전 글에서 FootNote 플러그인을 포함한 ol (ordered list)로 선언된 리스트의 번호들이 나오지 않는지에 대해 적었는데, 문제를 해결한 듯 합니다. 저는 분명히 ol 이나 li 에 대해 따로 선언한 적은 없는데, 어디선가 꼬인 것 같아요. 아직도 정확한 이유는 모르겠습니다. 어쨌든 해결 과정을 보면,


제 스킨들의 경우에는 본문이 article 이라는 클래스 안에 들어있습니다. 물론 태터툴즈에서 제공하는 기본 스킨의 형태를 그대로 유지한 것입니다. skin.html 을 보면 다음과 같은 부분이 있죠.

<div class="article">[ ##_article_rep_desc_## ]</div>

아시다시피 [ ##_article_rep_desc_## ] 는 태터툴즈의 본문 치환자입니다.

그래서, 스타일시트 (style.css)에 다음과 같은 정의를 추가시켰습니다.

.article li { display:list-item; list-style-type:decimal;}

제가 이것저것 다 해본다고 했는데 저건 해보지 않았던 거죠. 어디서도 li 나 ol 전체에 대해 정의한 적이 없으니 이상이 없을 것이다고 생각한 거죠.

IE, 파이어폭스, 오페라에서 모두 제대로 나오는 걸 확인했으니 다른 스킨들에도 추가시켜야겠습니다. => 추가 완료 했습니다.

*

참고로 FootNote를 사용해 주석을 적은 다음 추가되는 코드를 보면 div도 footnotes, ol도 footnotes로 정의되어 있습니다. 이렇게 이름이 같을 경우에는 문제가 있지 않을까 생각해 봅니다.

위의 정의를 스타일시트에 추가한 다음 번호가 제대로 나오는 게 확인이 되면 FootNote의 스타일도 변경할 수 있겠습니다. 예를 들면 이런 식으로 정의가 가능하겠죠.

.footnotes .footnotes li { display:list-item; list-style-type:upper-roman;}

fotenotes라는 클래스가 중복으로 정의되어 있기 때문에 이렇게 해도 작동하더군요.

.footnotes li { display:list-item; list-style-type:upper-roman;}

,
한님은 잡학편식에서 "0380. 가변폭 스킨(테마), 튼튼하십니까?"라는 글을 읽었습니다. 마침 제가 가변폭 스킨을 공개하려고 있던 참이라 눈에 들어오는군요.

CSS2 스탠다드에서 규정한 속성들 중 매우 단순하면서도 막강한 기능을 가지고 있는 것들이 있습니다. 바로 min-width, max-width, min-height, max-height 이죠.

예를 들어 <div style="min-width:250px;">가나다라마</div> 이렇게 적으면  div 안에 내용이 아무리 적어도 크기를 최소한 250px 으로 맞춰줍니다. 물론 내용이 많아지면 자연스럽게 늘어납니다. 그게 최소-넓이, min-width 지요. 반대로 내용이 아무리 많아져도 최대폭을 결정시켜주는 값은 max-width 겠지요. 두 값을 동시에 이용할 수도 있습니다. 이런 식으로 말이죠. <div style="min-width:250px; max-width:500px;">가나다라마</div>

문제는 이 편리한 속성을 인터넷 익스플로러 (이하 IE)가 알아듣지 못한다는데 있습니다. 적어도 IE 6 는 그렇습니다. IE 7 은 아직 써보지 않아서 잘 모르겠고요. 이 중에 특히 min-width, min-height 가 문제입니다. 브라우저의 가로폭이 줄어들다 보면 사이트의 기본적인 레이아웃이 망가질 수 있기 때문이지요. 구글링을 하면 이 문제로 고통받는 수많은 인민들이 보일 겁니다. 나무아비타불…

이 문제를 해결하기 위한 몇 가지 hack이 존재하기는 하지만 제 경험으로는 어떤 경우에는 제대로 작동하고, 또 어떤 경우에는 작동하지 않는 경우가 있습니다. 엄밀히 따지면 그 hack을 제대로 적용시키려면 디자인을 해체하고 다시 구성해야 되는 일이 생기는가 하면 레이아웃이 복잡하게 정의되어 있을 때는 다른 요소들과 충돌하는 경우도 생긴다는 것이지요.

하지만, 이 hack에 대해서도 간단하게 설명하고 넘어가자면 expression 이라는 걸 이용하는 겁니다. 이건 또 IE 만 알아듣는다죠. (나중에 따로 설명할게요.)

다른 브라우저에서는 이와 같이 적으면 되는 정의를

.box {min-width:350px;}

IE를 위해서는 이런 식으로 추가하는 겁니다.

.box {width:expression(document.body.clientWidth < 1024? "350px": "auto" );}

클라이언트 브라우저의 화면 가로 사이즈가 1024px 보다 작으면 350px 을 유지하라는 뜻이죠.


결국 제가 내린 결론은 레이아웃과 관련된 모든 문제를 CSS로 처리할 필요는 없다는 것입니다. 아니, 완벽하게 처리할 수 없다가 더 맞는 말이겠지요.

그렇다면 IE 에서 min-width와 max-height를 구현하는 가장 쉬운 방법은요? 이미지를 사용하는 겁니다. min-width를 예로 들죠. 어떤 영역이 커지면 커졌지 350px 이하로는 줄어들지 말아야 할 어떤 영역이 있다고 한다면,

1. 가로 세로 1px 짜리 투명 gif 이미지 하나를 준비합니다. 이름을 spacer.gif 라고 하죠.

2. 필요한 영역 안에 간단하게 다음과 같이 적어주세요.
   
<img src="spacer.gif" border=0 width="350px" height="1px">

3. 끝

간단한 원리지요. 가로폭이 350px인 이미지가 영역 안에 들어있으니 해당 영역은 절대 그 이하로 표시되지 않을 겁니다. 게다가 어차피 투명 이미지이기 때문에 세로 1px 이 남아있어도 큰 지장은 없겠지요. 보이지 않으니까요. 물론 나중에 디자인을 수정하면 스타일시트 말고도 문서를 직접 손봐야 하는 번거로움이 생겼지만 그래도 뭐, 어쩌겠어요.

간단하죠? IE 쪽에서는 언제쯤 이 문제를 수정할까요? 혹시 벌써 수정했나요? Hey, IE! Can you speak CSS2?



p.s. 하지만 이 방법 역시 문제가 있습니다. 바로 width를 em으로 지정했을 때이지요. 이건 위의 방법으로는 불가능합니다. img 태그 안의 width를 em으로 줄 수 없는 걸로 알고 있어요.

,