티스토리 툴바

<p class="com_name"><span class="vertical"></span><span class="text">웹피</span></p>


.com_name {height:24px; *height:23px; margin-bottom:5px; *padding-top:1px; color:#2055c1; font-weight:bold; line-height:12px;}
.com_name .vertical {display:inline-block; height:24px; vertical-align:middle;}
.com_name .text {display:inline-block; vertical-align:middle;}

이런 형태면 테이블의 셀같은 정렬이 가능하다
ie6, ie7, 크롬, 파이어폭스 등에서 모두 적용


저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

div의 테이블 셀같은 세로 정렬  (0) 2011/01/27
플래시 오브젝트 삽입  (0) 2009/10/06
조건부 주석  (0) 2009/07/30
IE 최적화 페이지 설정  (0) 2009/07/30
object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21

<%="<object"%> classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"
     width="764" height="80" title="경희대학교 메인메뉴">
      <param name="wmode" value="transparent" />
      <param name="movie" value="/images/swf/gnb.swf" />
     <!--[if !IE]> <-->
     <object type="application/x-shockwave-flash" data="/images/swf/gnb.swf" width="764" height="80" title="경희대학교 메인메뉴">
      <param name="wmode" value="transparent" />
     </object>
     <!--> <![endif]-->
     </object>

해당 관련 자세한 내용
신현석님 블로그 http://hyeonseok.com/soojung/webstandards/2009/09/07/547.html

저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

div의 테이블 셀같은 세로 정렬  (0) 2011/01/27
플래시 오브젝트 삽입  (0) 2009/10/06
조건부 주석  (0) 2009/07/30
IE 최적화 페이지 설정  (0) 2009/07/30
object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21

조건부 주석

Web story/Html 2009/07/30 11:58
<link rel="stylesheet" type="text/css" href="default.css" />
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="ie7.css" />
<[endif]-->
<!--[if IE 6]>
<link rel="stylesheet" type="text/css" href="ie6.css" />
<[endif]-->
<!--[if IE 5]>
<link rel="stylesheet" type="text/css" href="ie5.css" />
<[endif]-->
저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

div의 테이블 셀같은 세로 정렬  (0) 2011/01/27
플래시 오브젝트 삽입  (0) 2009/10/06
조건부 주석  (0) 2009/07/30
IE 최적화 페이지 설정  (0) 2009/07/30
object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21

<
meta
http-equiv="X-UA-Compatible"
content="IE=7" // IE7에 최적화
/>

<
meta
http-equiv="X-UA-Compatible"
content="IE=EmulateIE7"
/>

DTD가 없는 페이지는 여전히 Quirks Mode로,
DTD가 있는 페이지는 IE 7 표준 모드로
렌더링 할 것이다.
저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

플래시 오브젝트 삽입  (0) 2009/10/06
조건부 주석  (0) 2009/07/30
IE 최적화 페이지 설정  (0) 2009/07/30
object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21
크로스브라우징 input 박스  (0) 2009/04/15

<%="<object"%> classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" id="player" width="269" height="219">
     <param name="url" value="perfect.wmv">
     <param name="src" value="perfect.wmv">
     <param name="showcontrols" value="true">
     <param name="autostart" value="true">
     <!--[if !IE]>-->
     <object type="video/x-ms-wmv" data="perfect.wmv" width="269" height="219">
     <param name="src" value="perfect.wmv">
     <param name="autostart" value="true">
     <param name="controller" value="true">
     </object>
     <!--<![endif]-->
     </object>

asp일때 오브젝트 중복에러가 나오면 <%="<object"%>로 대체 기본은 <object


저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

조건부 주석  (0) 2009/07/30
IE 최적화 페이지 설정  (0) 2009/07/30
object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21
크로스브라우징 input 박스  (0) 2009/04/15
Full tag name  (0) 2008/08/27


IE8로 네이버나 몇몇 사이트를 보면 호환모드가 뜨지 않는걸 볼 수 있습니다
이는 사이트내에 메타태그로 강제 호환모드를 주어서 그런데요
방법은

<meta http-equiv="X-UA-Compatible" content="IE=7" />

주시면 강제로 IE7 호환모드로 렌더링 됩니다 그런데 IE8용 호환모드 렌더링도 IE7과 완전히 같지 않기때문에 이점 감안해야 될 듯 하네요
완전히 IE7로 렌더링을 위해서는 F12 (개발자도구) 누르시면 메뉴에 "브라우저모드" 가 있습니다 이를 IE7로 바꿔 주시면 됩니다
저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

IE 최적화 페이지 설정  (0) 2009/07/30
object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21
크로스브라우징 input 박스  (0) 2009/04/15
Full tag name  (0) 2008/08/27
IE, imagetoolbar 제거하기  (0) 2008/08/26


input 박스에는 여러가지가 있습니다. (라디오,체크박스,텍스트박스등)

 

여기에서 라디오 박스와 체크박스는 IE와 타브라우저에서 외곽여백의 차이가 있습니다.

이런경우를 잘모르는 웹디자이너 같은 경우 무조건 자기디자인 데로 해달라고 요구하곤하죠.. 그것도 익스에만 맞춰달라면서...참피곤한 경우죠. 물론 디자이너 입장에서는 그게 정답이고, 퍼블리셔 입장에서 맞춰주는것도 해야할일중에 하나일수는 있습니다. 그래서 협업이 중요한거 같습니다.

 

여튼 이럴때 해결방법입니다.

 

먼저 소스를 살펴보겠습니다.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>웹미니 input 박스테스트</title>
<style type="text/css">
body {font:12px "돋움", Dotum;}
</style>
</head>

<body>
<form name="form1" method="post" action="">
<input type="checkbox" name="checkbox" /><label for="test">테스트</label>
</form>
</body>
</html>

 

위와 같은 소스를 출력하면 다음과 같습니다.

 

bb01.gif

 

익스와 파폭,사파리는 기본적으로 4px 이라는 외곽여백이 존재하며, 오페라는 3px 여백이 있었습니다.

세로여백은 top 라인에서 익스는 2px, 파폭과 사파리는 3px, 오페라는 0px 여백이 있었습니다. (여기서 사파리는 버전이 4입니다.)

 

그럼 여백을 초기화 해보기로 합시다.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>웹미니 input 박스테스트</title>
<style type="text/css">
* {margin:0; padding:0;}
body {font:12px "돋움", Dotum;}
</style>
</head>

<body>
<form name="form1" method="post" action="">
<input type="checkbox" name="checkbox" /><label for="test">테스트</label>
</form>
</body>
</html>

 

여기에서 초기화 방법도 여러가지겠지만, 저는 테스트로 * 를 사용했습니다.

body, table, div, input {margin:0; padding:0;} 이런식으로 해줘도 됩니다. 어떤방법이던간에 중요한건 input 에 여백을 0 으로 만드는겁니다.

 

bb02.gif

 

익스를 제외하고 타브라우저에서는 여백이 줄어든걸 볼수있습니다. (역시 익스는 끄덕없습니다. 어쩔~ -.-)

input 에 여백을 주지 않을경우는 많은 차이가 없었지만, 여백을 0 으로 하니 브라우저마다 보여지는 차이가 커졌습니다.

 

그럼 이걸 어떻게 맞출까? 방법은 여러가지 겠지만 class 로 input 에 직접 적용해보겠습니다. (물론 여백은 0 으로 했을때 입니다.)

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>웹미니 input 박스테스트</title>
<style type="text/css">
* {margin:0; padding:0;}
body {font:12px "돋움", Dotum;}
.input_m {width:13px; height:13px; vertical-align:middle;}
label {position:relative; top:1px;}

</style>
</head>

<body>
<form name="form1" method="post" action="">
<input type="checkbox" name="checkbox" class="input_m" /><label for="test">테스트</label>
</form>
</body>
</html>

 

bb03.gif

 

가로 여백(1px) 은 익스와, 파폭, 사파리가 동일하고, 오페라는 2px 벌어졌습니다. 그리고 세로 여백은 사파리를 제외하고 모두 동일해졌습니다.
너무 붙어있는거 같으니, 조금 여백을 주도록하겠습니다.

.input_m {width:13px; height:13px; margin-right:4px; vertical-align:middle;}

 

bb04.gif

 

사파리에서 약간의 차이가 있긴하네요. 이래서 핵이 필요한가 봅니다. -.-

위처럼 했는데도 디자이너가 모든브라우저에서 확인후 "어 사파리에서 텍스트가 조금 올라겠네요?" 라고 태클을 걸어온다면, 깔끔하게 핵을 써주세요. (체크와 라디오박스에서 핵사용없이 1px 오차도 없게 하는 방법이 있으면 알려주세요.) 

 

다른방법으로는 * {margin:0; padding:0;} 을 준상태에서 익스만 여백이 그대로이기때문에 익스만 margin-right:-4px 로 주는 방법도 있긴합니다. (익스전용 핵을 사용해야겠죠)

 

어떻게 초기 구조화를 할건지는 제작할 사이트의 특성을 보고 판단하시기 바랍니다. ex) input 전체에 적용할것인가, 아님 class로 뺀후 부분부분만 적용을 할것인가... (차후에 유지보수할때 쉬운쪽으로..)

 

 

만족된 결과는 아니지만, 확인해보시고 또 다른 좋은 방법이 있으면 알려주세요.^^; (공유합시다.)

출처 : http://www.webmini.net/46401#0 (경대리님글~ ㅡㅡb)

저작자 표시 비영리 동일 조건 변경 허락

'Web story > Html' 카테고리의 다른 글

object 동영상 삽입  (0) 2009/07/30
meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21
크로스브라우징 input 박스  (0) 2009/04/15
Full tag name  (0) 2008/08/27
IE, imagetoolbar 제거하기  (0) 2008/08/26
link와 @import 방식의 사용  (0) 2008/07/29

Full tag name

Web story/Html 2008/08/27 13:49

아래 포스팅 한 테그 리스트는 웹 표준화팀 에서 “ 축약된 테그의 온전한 이름(Full tag name) 바로알고 사용하자 ”라는 운동의 일환으로 제가 직접 맡아서 제작한 것 입니다.
내용은 tagkorea.pe.kr의 “ 태그사전 ” 에서 참고하였습니다.

Tag name

Tag full name

<a>

Anchor

          href=”URL”


          name=”이름”


          taget=”_blank” ,”_parent” , “_self” “_top”


<alink>

Active LINK

<applet>

java APPLET

          align=”top”, “middle” , “bottom” ,
          ”left” , “right”

 

          alt=”텍스트”


          code=”URL”


          codebase=”URL”


          height=수치,width=수치


          hspace=수치,vspace=수치

Horizontal SPACE,
Vertical SPACE

          name=명칭


<b>

Bold

<big>

BIG text

<bq>

Block Quote

<bgsound>

BackGroundSOUND

          loop=수치 or “infinite”

 

          src=”URL”

 

<br>

BReak

<col>

table COLumn

          align="center, justify, left, right"

 

          valign="baseline, bottom, middle, top"

 

          width="숫자"

 

          span="숫자"

 

<colgroup>

COLumn GROUP

<cols>

COLumnS

<colspan>

COLumn SPAN

<dd>

Definition Data

<dl>

Definition List

<dt>

Definition Term

<del>

DELeted text

<dfn>

DeFinitionN

<dir>

Directory List

<div>

DIVision

          align=”left” , “right” , “center”

 

<em>

EMphasized

<embed>

EMBEDded

          height=수치, width=수치

 

          name=”이름”

 

          param=”값”

 

          src=”URL”

 

<fig>

FIGure

<fn>

FootNote

<h1>

Heading 1

<hr>

Horizontal Rule

          align=”left”또는 “right” 또는 “center”

 

          color=”#RRGGBB” 또는 “색이름”

 

          noshade

 

          size=수치

 

          width=수치

 

<html>

HyperText Markeup Language

<href>

Hyper REFerence

<hsides>

Horizontal SIDES

<i>

Italic

<iframe>

Inline FRAME

          border="테두리의 굵기"

 

          bordercolor="테두리의 색깔"

 

          frameborder="테두리의 유무"

 

          name="Frame의 이름"

 

          scrolling="스크롤 바의 유무"

 

<ins>

INSerted text

<id>

IDentification

<img>

IMaGe

          align=”top”, “middle” , “bottom” ,
          ”left” , “right” , “center”

 

          alt=”텍스트”

 

          border=수치

 

          controls

 

          dynsrc=”URL”

DYNamic SouRCe

          height=수치,width=수치

 

          hspace=수치,vspace=수치

Horizontal SPACE,
Vertical SPACE

          ismap

 

          loop=수치 또는 “infinite”

 

          src=”URL”

 

          start=”fileopen”, “mouseover”

 

          uesmap=”#이름”

 

<kbd>

KeyBoarD

<lang>

LANGuage

<li>

Listed Item

          type=”A” , “a” , “I” , “i” , “disc” ,
          ”circle” , "square”

 

          value=수치

 

<lh>

Listed Heading

<lhs>

Left Hand Sides

<nobr>

NO BReak

<ol>

Ordered List

<optgroup>

OPTion GROUP

          type=”A” , “a” , “I” , “I”

 

          start=숫자

 

<p>

Paragraph

          align=”left” , “right” , “center”

 

<param>

PARAMeters

          name=”명칭”

 

          value=”값”

 

          valuetype=”data” , “ref” , “object”

 

          type=”MIME유형”

 

<pre>

PREformatted text

<q>

Quote

<rhs>

Right Hand Sides

<s>

STRIKE

<samp>

SAMPle

<small>

SMALL text

<sub>

SUBscript

<sup>

SUPerscript

<src>

SouRCe

<tab>

horizontal TAB

<tbody>

Table BODY

          align=”left” , “right” , “center”

 

          bgcolor=”#FFFFFF” or “색이름”

 

          valign="baseline, bottom, middle, top"

 

<thead>

Table HEAD

          align=”left” , “right” , “center”

 

          bgcolor=”#FFFFFF” or “색이름”

 

          valign="baseline, bottom, middle, top,"

 

<td>,<th>

Table Data,
Table Header

          align=”left” , “right” , “center”

 

          bgcolor=”#FFFFFF” or “색이름”

 

          bordercolor=”#FFFFFF” or “색이름”

 

          colspan=수치

 

          height=수치

 

          nowrap

 

          nowspan=수치

 

          valign=”top” , “middle” ,
           “bottom” , “baseline”

 

          width=수치

 

<tr>

Table Row

          align=”left” 또는”right” or “center”

 

          bgcolor=”#FFFFFF” or “색이름”

 

          bordercolor=”#FFFFFF” or “색상명”

 

          valign=”top” , “middle” ,
          ”bottom” , “baseline”

 

<tt>

Tele Type

<u>

Underline

<ul>

Unordered List

          type=”disc” , “circle” , “square”

 

<var>

VARiable

<vlink>

Visited LINK

<vslides>

Vertical SIDES

<wbr>

Word BReak

<xhtml>

eXtensible Hyper Text
Markup Language

출처 : 네이버 웹표준 블로그 http://html.nhndesign.com/blog/?cat=3&paged=6

'Web story > Html' 카테고리의 다른 글

meta 태그를 이용한 IE8 강제 IE7 호환  (0) 2009/05/21
크로스브라우징 input 박스  (0) 2009/04/15
Full tag name  (0) 2008/08/27
IE, imagetoolbar 제거하기  (0) 2008/08/26
link와 @import 방식의 사용  (0) 2008/07/29
파일객체의 찾아보기 버튼을 이미지로  (0) 2008/07/23

Internet Explorer 브라우저에서 보면 일반적으로 <img src="....."  .../>  테그를 사용하고
해당 태그에 마우스 오버를 하면 다음과 같은 도구 상자가 나타납니다


        


이것을 "imagetoolbar" 라고 부르더군요...


최근에 imagetoolbar가 뜨면 안되는 상황이 와서 구글링좀 해봤습니다..

두가지 해결 방법을 찾았습니다.


1. Meta markup in Head 


head 테그 내부에 meta 테그를 삽입함으로써 해결가능합니다..

  <meta http-equiv="imagetoolbar" content="no" />


2. 비표준 img 테그 속성 사용

IE에서만 제공하는 img 테그의 비표준 속성을 사용할 수 있습니다.

해당 이미지 테그에 galleryimg = "no" 라는 속성을 주면 imagetoolbar가 뜨지 않습니다.

  <img src="....." galleryimg="no"/>


비표준 속성이므로 사용이 장려되지는 않는군요... 하지만 이렇게 부분적으로 처리를 해야한다든지

여러 사정상 meta 테그를 사용할 수 없는 경우에 자바스크립트로 처리할 수도 있습니다.

  var _img = document.getElementById("img1");

  _img.galleryimg = "no";




두가지 방법중 사용 가능한 방법을 사용하면 좋을것 같습니다 : )

출처 : 다음 UI개발자 블로그

'Web story > Html' 카테고리의 다른 글

크로스브라우징 input 박스  (0) 2009/04/15
Full tag name  (0) 2008/08/27
IE, imagetoolbar 제거하기  (0) 2008/08/26
link와 @import 방식의 사용  (0) 2008/07/29
파일객체의 찾아보기 버튼을 이미지로  (0) 2008/07/23
탭목록 최소이미지 간단작업  (0) 2008/05/07

<link href="basic.css" rel="stylesheet" type="text/css">  --> 구형 브라우저

 

<style type="text/css" media="screen">

<!--
@import url(basic.css) screen;
-->

</style>  --> 현대적인 브라우저

'Web story > Html' 카테고리의 다른 글

Full tag name  (0) 2008/08/27
IE, imagetoolbar 제거하기  (0) 2008/08/26
link와 @import 방식의 사용  (0) 2008/07/29
파일객체의 찾아보기 버튼을 이미지로  (0) 2008/07/23
탭목록 최소이미지 간단작업  (0) 2008/05/07
LABEL태그를 이용해 보세요  (0) 2008/05/07

<form name="bodyForm">
   <input type="file" name="fl" style="display:none">
   <input type="text" name="fileName"><img src="fileSearch.gif" onclick="document.bodyForm.fl.click()">
  </form>

만만하게 볼 작업만은 아니네요^^;;

이미지를 변경하시거나 소스를 수정해서 직접 만들어 보세요

모두 고마우이..ㅎㅎ

<style type="text/css">
 h3 {
  display:none;
 }
 .floor { 
  background:url("img/com_bg01.gif") left top no-repeat;
  width:702px;
  height:70px;
  padding:6px 0 0 80px;
  margin:0;
  list-style-type:none; */  li 앞의 ● 들을 없앱니다. */
 }
 .floor li{
  float:left;  /* li가 옆으로 쭉 붙습니다.. display:inline; 써놓고 계속 고민T.T ie에선 먹지만.. ff, opera 에선 inline이 안먹네요... ul이 block요소라 그렇디다..ㅎㅎ  float:left;를  써 주어야 모두 만족시킵니다. */
  width:81px;
  text-align:center;
  margin:0 0 0 5px;
 }
 .floor li a {
  color:#666;
  font:bold 12px Dotum;
  width:81px;
  height:22px;
  padding:5px 0px 0px 0px;
  text-decoration:none;
  display:block; /* ie에선 안써도 제대로 보이지만... ff, opera에선 block 써주어야 영역이 제대로 표출됩니다..  이거 빼고 테스트 해보시길..ㅎㅎ */
 }
 .floor li a:hover {
  color:#fff;
  background:url("img/com_bg_num.gif") left top no-repeat; /* 마우스 갖다대면 배경으로 나옵니다. */
  font:bold 12px Dotum;
  width:81px;
  height:22px;
  padding:5px 0px 0px 0px;
 }
 .floor li a.aaa {
  color:#fff !important;
  background:url("img/com_bg_num.gif") left top no-repeat; /* 선택된 페이지 */
  width:81px;

 }
</style>


<h3>층별 안내</h3>
<ul class="floor">
 <li><a href="#" class="aaa">B1</a></li>
 <li><a href="#">1F</a></li>
 <li><a href="#">2F</a></li>
 <li><a href="#">3F</a></li>
 <li><a href="#">4F</a></li>
 <li><a href="#">5F</a></li>
 <li><a href="#">6F</a></li>
</ul>


잠깐의 틈을 타..

작업하던 중 응용해서 만들어 봤어요... 아웅~ 신나!

지식이 기술을 낳습니다... 보다 업그레이드 해서 작업해보세요 ㅎㅎ


디따조아, 디스타일의 도움을 받아.. 여러가지 사실을 캐치.... 뜻깊은 하루 되었습니다..

작업 후 style은 css문서로 빼셔야 겠죠..ㅎㅎ

출처 : 하코사 나나님


이 LABEL 태그를 잘 활용하면 라디오 버튼, 체크 박스, 입력 상자 등의 폼 컨트롤을

직접 선택하지 않고 텍스트만 눌러도 폼 요소가 선택이 되는 효과를 나타낼 수 있습니다.


LABEL 태그는 일반적으로 잘 사용하지 않는 태그 중 하나입니다.

테스트결과 ie에서 동작합니다.

파폭이나 오페라에서도 동일한 효과를 나타내려면 어떻게 해야할까요?^^


제가 생각하는 label 태그를 이용하면 ie에서나마 웹접근성이 높아지는 효과를 볼 수 있는거 같습니다..



label 미지정:
<input type="radio" name="link" value="home" > 홈으로 이동하기


label 지정:
<input type="radio" name="link" value="home" id="홈으로 가기">
<label for="홈으로 가기">홈으로 가기</label>

출처 : 하코사 나나님


a 태그의 사용성과 접근성.

a 태그의 개요

a 태그의 어원에 해당하는 말은 anchor 입니다. 즉, 우리말로 직역하면 ‘닻’ 이라는 뜻이고 의역하면 ‘연결’ 이라는 의미가 됩니다. 그리고 a 태그는 href 라는 필수 속성을 갖는데 이것의 어원은 Hyper text REFerence 입니다. 즉, 무언가를 참조하라는 뜻이고 a 태그는 결국 다른 어떤 자원을 ‘참조’ 하라는 연결의 의미를 갖습니다. Web 이라는 거미줄을 짓는데 있어서 가장 중요한 태그입니다. 우연의 일치인지는 모르겠지만 어쨌든 W3C의 HTML 요소 색인 페이지를 보아도 a 태그는 HTML 요소(Element) 가운데 가장 먼저 소개됩니다. abc 순으로 정렬되니까 당연히 그렇겠죠.^^ 이렇게 중요한 태그를 우리는 그동안 너무 쉽게 생각하고 잘못 사용하지는 않았는지 되돌아 보는 시간을 가졌으면 합니다. a 태그의 바른 사용법과 사용성및 접근성 측면에서 어떤 이슈가 있는지 살펴보도록 하겠습니다. UI개발자 뿐만 아니라 웹 기획자 분께도 이번 포스팅을 권장합니다.

a 태그의 사용성

링크의 향기

웹 기획자분께 이번 포스팅을 권장한다는 의미는 다름아닌 사용성 때문입니다. a 태그로 마크업 하는 텍스트나 이미지에 대한 설명문구에 ‘여기‘ 를 클릭하세요. 와 같은 방식으로 링크를 하는것이 좋지 않다는 사실은 잘 알고 계실 것입니다. 링크된 문서를 아주 짧막하게나마 판별할 수 있는 핵심키워드를 선택하여 링크에 ‘향기’ 를 부여해 주시는 것이 좋지요. 이동할 페이지를 예측 가능하도록 해주는 겁니다. 링크의 ‘향기’ 라는 표현은 사용성전문가 제이콥 닐슨이 즐겨쓰는 말인데 제가 좋아하는 표현이기도 합니다.

링크의 가독성

디자이너의 창의성을 존중해서 일지는 모르겠지만 a 태그에 대한 WSG(Web Style Guide) 작업에 얼마나 신경 쓰셨나요? 그것이 오직 디자이너의 영역이라고만 생각해서 소홀하지는 않았나요? 링크는 링크답게 일반 문장과 확실히 차별화된 색상을 일관되게 사용해야 합니다. 파랑색이 사용성은 가장 좋습니다. 하지만 링크의 본래 색인 파랑색을 유지하는 것에 대하여 디자이너가 두고만 보지는 않겠지요. 그렇다면 파랑색이 아니라도 좋으니 부디 본문의 텍스트 색상과 확연히 구분되는 다른 색상을 일관되게 사용하도록 하는 방침을 정하고 WSG에 반영해 주세요. 웹페이지의 수많은 글과 이미지 가운데 링크 요소를 또렷하게 구분할 수 있도록 하는 것은 빠른 웹페이지 탐색에 있어서 가장 중요한 요소 입니다. 링크인지 아닌지 마우스를 올려봐야지 알 수 있도록 디자인 되었다면 사용성이 좋지 않다는 증거입니다. 마우스로 링크를 탐색하게 내버려 두지 마세요. 그냥 눈으로만 보고도 링크라는 것을 확실하게 알 수 있어야죠. 이것이 링크라는 믿음을 주세요.

링크의 시각화와 학습

운영체제 또는 웹 브라우저는 애시당초 만들어 질 때부터 고도의 사용성과 접근성을 갖춘 상태로 제품이 출시됩니다. 그 한 예로서 키보드나 마우스에 의하여 포커싱된 곳을 점선으로 표시해 주는 방법이 있죠. 이렇게 포커싱된 영역을 점선으로 표시해주게 되면 사용자는 링크의 영역을 학습하게 되어 다음번에는 더욱 정확한 위치에 마우스를 가져다 댈 수 있고 또한, 마우스가 없는 상태에서는 현재 어느곳에 포커스가 머물고 있는지 보여주기 때문에 키보드를 주로 사용하는 노트북 사용자들에게 도움이 됩니다.

자바스크립트 등의 기법을 이용하여 링크의 영역을 표시해 주는 점선을 감추지 마세요. <a href=”" onfocus=”this.blur()”> 등의 방법을 이용하게 되면 키보드를 주로 사용하는 사람(매우 고급 사용자이거나 매우 어렵게 웹을 사용하는 사람일 확률이 큼)들은 해당 링크에 접근할 수 없습니다. 궁금하시면 키보드로 시도해 보세요. 이 링크는 키보드를 이용하는 사람이 접근할 수 없는 링크 입니다. 제발 이런식으로 일을 어렵게 만들지 않으셨으면 좋겠습니다. 이 점선 없앤다고 해서 디자인 퀄러티가 더 높아질꺼라고 생각한다면 웹 말고 인쇄소 가서 디자인 하시는게 더 적성에 맞으실껍니다. 버스 디자인 예쁘게 만든다고 생뚱맞게 알파벳 그려넣어서 한참 욕먹었잖아요. 좋은 디자인은 예쁘면서도 사용하기 편리해야 하고 웹은 특히 더 그래요.

a 태그의 접근성

웹에 접근이 쉽지 않은 시각장애인의 경우 스크린리더라는 장치를 사용하여 웹을 탐색하게 됩니다. 웹 페이지에 존재하는 텍스트나 이미지에 포함된 alt 텍스트들을 읽으면서 겨우겨우 웹을 탐색하죠. 스크린리더가 어떻게 웹을 탐색하는지 궁금하신 분들은 짬을 내어 류준호님의 블로그에 소개된 ‘스크린리더 소개 동영상‘ 을 한번 보실것을 권장합니다. 동영상은 약 30분 정도의 분량으로서 야후의 접근성 프로젝트 매니저(전맹)가 직접 스크린리더를 이용하여 웹을 탐색하는 장면을 영상으로 담은 내용입니다. 국산 스크린리더와 다소 차이가 나는 부분도 있을 수 있으나 스크린리더라는 제품에 대한 간접경험으로서 충분히 가치있는 시간이 될 것입니다.

시각장애인이 스크린리더를 이용하여 웹을 탐색할 때 모든 문장을 읽어주기를 원하지는 않습니다. 링크의 목록만 추려내거나 제목(h1~h6 태그로 마크업된)만을 따로 정렬시킨 다음 절반에 가까운 시간을 불필요한 내용을 스킵하는데 할애합니다. 눈이 보인다면 쓸데없는 내용이 빠르게 피해 가겠지만 전적으로 귀에만 의존하는 맹인들은 목적지에 다다르기 위하여 잘 정리된 단서(향기있는 링크, 구조화된 제목)를 필요로 합니다. 시각장애인은 마우스 포인터를 볼 수 없으므로 마우스를 전혀 사용하지 않으며 키보드만 사용합니다. 따라서 <a href=”" onfocus=”this.blur()”> 이런식으로 코딩해 놓으면 키보드로 접근할 수 없으므로 시각장애인은 이 링크를 이용할 수 없습니다. 또한 ‘향기’ 없는 링크는 사용성보다 접근성 측면에서 더욱 치명적입니다. 스크린리더를 이용하여 링크만 정렬해 놓은 상태에서 ‘여기‘, ‘바로가기‘ 등등의 키워드를 듣게되는 맹인들의 기분은 어떨까요?

a 태그의 새창 띄우기

현재 HTML의 활성 표준인 XHTML 표준(strict) 명세에는 target 이라는 속성이 폐기(deprecated)되었으며 strict DTD를 사용하는 경우 target 속성은 더이상 유효하지 않습니다. 이것은 링크의 타겟 프레임을 사용자가 직접 제어하도록 유도하기 위한 방침이며 사용자의 의지와 관계없이 강제로 새창을 띄우는 것이 합리적인 방식이 아니라는 것을 의미합니다. 사용자는 Ctrl+Click, Shift+Click 등의 단축키를 이용하여 선택적으로 새창을 띄울 수 있습니다. target 속성으로 하여금 사용자의 의사에 반하는 새창 띄우기 관행은 사라져야 함이 옳습니다. 한편 현재 대부분의 웹페이지 제작자들이 사용하고 있는 transitional DTD를 사용하는 경우 target 속성을 여전히 유효하게 취급하고 있으므로 새창을 띄우는 것이 전혀 금기시 되는 상황은 아닙니다. 다만 그것이 불합리한 방식이며 링크 타겟에 대한 선택권을 점진적으로 사용자에게 돌려주도록 바꿔 나아가야 할 것입니다. 새창이 부담스러운 열악한 PC 사용자를 생각해서라도 그것이 맞고 이것은 접근성이슈인 동시에 사용성 이슈이기도 합니다.

a 태그의 의미론적 마크업

a 태그가 무언가를 참조하기 위한 마크업이라는 것을 위에서 말씀드린 바 있습니다. 하지만 분명 어떤 자원을 참조하고 있음에도 불구하고 <img onclick=”window.open(’abc.html’, ‘_self’)” /> 이와같은 방식으로 마크업하는 행태가 있는데 이것은 의미론적으로도 맞지 않고 접근성도 0 점이 됩니다. 마우스로 이것을 클릭하는 것은 가능하지만 키보드로는 접근이 되지 않습니다. a 태그로 무언가를 마크업 해야하는 상황은 명백합니다. 현재 페이지를 포함하여 웹의 어떤 자원을 참조하고 있다면 반드시 a 태그로 마크업 하여야 합니다.

이미지로 처리된 버튼과 풍선도움말 예제예를 들어 이런 사용자 인터페이스가 있다고 칩시다. ‘쇼핑도우미란?’ 이라는 이미지 형식의 버튼이 있고 그것을 클릭하면 풍선도움말이 나타나서 그것을 설명하는 기능입니다. 이런경우 HTML 코드의 수를 줄여보겠다는 심산으로 img 에 onclick 이벤트를 넣어 풍선도움말을 띄우는 경우가 있는데 이러한 방법은 잘못된 방법입니다. a 태그로 마크업 하고 a 태그에 대한 href 속성 값으로는 풍선도움말의 URI 를 적어주는 것이 맞습니다. 이런식의 코드가 나와야 합니다.

<dl>
<dt><a href="#help" onclick="showBubble(); return false;"><img … / ></a></dt>
<dd id="help">관련상품을 자동으로 추천해주는 기능입니다.<dd>
</dl>

return false 를 넣어주는 이유는 자바스크립트가 동작하는 환경에서는 #help 라는 id 를 지닌 곳까지 굳이 스크롤 시켜줄 필요가 없기 때문입니다. 이것은 a 태그의 본래 목적인 ‘참조’ 의 의미에도 맞고, 키보드로도 접근이 가능하며, 자바스크립트가 동작하지 않은 상태에서도 HTML 코드만 가지고 제 기능을 수행할 수 있는 매우 좋은 예제코드 입니다. 또한 팝업을 띄울 때에도 마찬가지 입니다. 다음과 같은 코드를 사용하여 a 태그에 대한 참조(href)의 값으로 의미없는 ‘#’ 대신 유효한 URI 를 입력할 수 있습니다.

<a href="pop.html" onclick=”window.open(this.href, ‘popName’, ‘width=300,height=200′); return false;”><img … /></a>

두 개의 예제 모두 자바스크립트가 동작하는 환경에서는 그 장점을 최대한 활용하지만 자바스크립트가 동작하지 않는 환경에서도 잘 기능되도록 배려한 ‘겸손한 자바스크립트(unobtrusive javascript)’ 의 한 예라고 볼 수 있습니다. 상기 예제 코드는 신현석님의 글 ‘접근성을 해치지 않는 Javascript의 사용‘ 으로부터 인용되었습니다.


출처 : http://naradesign.net/wp/2007/07/11/123/

안녕하세요? 오늘은 HTML DTD에 따른 FIELDSETLEGEND 요소의 다른 사용법에 대하여 공유드리고자 합니다.

  • FIELDSET 요소는 하나의 전송양식(FORM)을 의미 단위로 그룹핑하는 요소로서, 회원가입 페이지의 전송양식을 예로 든다면 ‘필수입력, 선택입력’ 등과 같이 의미구조에 따라 전송할 내용을 그룹핑(또는 분할)하는 역할을 하고 있습니다.
  • LEGEND 요소는 FIELDSET 요소에 대한 캡션(또는 제목)을 제공하여 양식의 이해를 돕는 역할을 하고 있습니다.

혹시 W3C Markup Validation Service 도구를 사용하면서 FIELDSET 요소 안쪽에 어떤 HTML요소는 허락하지 않는다는 오류를 만나보신 적이 없으신지요?
만난적이 없으시다면 아래 경우 중 한 가지 경우에 해당되실 것 같습니다.

  1. HTML 4.01(ST) 문서에서 FIELDSET과 LEGEND의 용법을 정확하게 알고 사용하고 있다. (존경합니다^^)
  2. HTML 4.01(ST) 문서에 대한 Validation Check를 해본적이 없다. (네, 저도 한동안은 뭐..)
  3. Validation Check는 반드시 진행하지만 주로 XHTML 1.0(ST)을 사용한다. (부럽습니다~)
  4. FIELDSET 요소를 사용하지 않거나, 평소에 오류따위는 무시하면서 살고 있다. 대수냐. (… 이리오슈~ 냉큼오슈!)

* ST : DTD의 표준모드(Strict) 또는 호환모드(Transitional)를 모두 일컬음.

HTML 4.01 문서에서 FIELDSET 요소를 사용할 때 FIELDSET의 자식으로서 어떤 HTML요소는 허락하지 않는다는 오류를 만나셨다면 그것은 HTML 4.01에서 FIELDSET과 LEGEND를 적절하게 마크업하지 못했기 때문일 수 있습니다. 하지만 그것이 여러분들의 잘못이라고는 생각하지 않습니다. W3C의 HTML 4.01 스펙 명세서에서 이것을 충분히 설명하지 않았기 때문이라고 생각합니다.

결론부터 말씀드리면 FIELDSET과 LEGEND의 사용법은 DTD에 따라 차이가 있습니다.

HTML 4.01의 경우 FIELDSET 사용시 LEGEND 요소는 반드시 첫 번째 자식(first-child)으로 마크업 되어야 합니다.

LEGEND요소를 FIELDSET의 첫 번째 자식으로 마크업 하지 않는 경우 W3C Validator는 LEGEND 속성이 비었다는 경고 대신에 아래와 같은 오류 메시지를 출력합니다.

  • 현재의 DTD는 이 자리에 "XXX"요소를 허락하지 않아!
  • "FIELDSET"의 닫기 태그가 여기서 나오면 안될껄?

LEGEND요소를 빼먹었다는 언급은 하지 않았지만 두 오류 메시지가 모두 틀린말은 아닙니다. 왜냐하면 LEGEND요소는 FIELDSET의 첫 번째 자식으로 존재해야 하는데 LEGEND가 등장하지 않았음으로 "XXX"라는 요소가 올 자리가 아니라는 사실도 맞고, FIELDSET이 닫히긴 했지만 뭔가 수상하다고 알려주고 있기 때문입니다.
 
이 사실을 모르셨던 분들의 경우가 더 많다고 생각되는데 그 이유인즉은, HTML 4.01 에서 FIELDSET이 나오면 LEGEND가 첫 번째 자식으로 나와야 한다고 명시적으로 설명하지 않았기 때문입니다. (또, 모르죠 웹 표준 만랩 되시는 분들이 보는 문서에는 기술되어 있는지. 하지만 제가 참조하고 있는 HTML 4.01 명세에는 그런 표현이 없는것 같습니다. 혹시 알고 계시면 알려주세요^^)

XHTML 1.0의 경우 FIELDSET 사용시 LEGEND 요소는 생략해도 됩니다.

제가 참조하는 HTML/XHTML 스펙 명세서에서는 관련 내용을 찾을 수 없었기에 W3C의 공개된 메일링 리스트에서 검색된 질답중 Masayasu Ishikawa 라는 분의 답변을 인용하면 아래와 같습니다. 메일 주소가 xxx@w3.org 형식으로 되어 있기에 급 신뢰가 가서 그분의 답변 일부를 인용합니다.

This is one of several places where XHTML 1.0 cannot approximate the definition of HTML 4.01 due to the difference between SGML and XML. XML doesn’t allow the content model like the FIELDSET content model in HTML 4.01, so in order to approximate the definition, XHTML 1.0 had to loosen the content model.

이것은 SGML과 XML간 차이에서 기인하는 것으로 XHTML 1.0을 HTML 4.01과 일치시킬 수 없었던 몇 가지 사례중 하나이다. XML은 HTML 4.01의 FIELDSET과 같은 콘텐츠 모델을 허용하지 않는다. XHTML을 XML의 정의에 일치시키도록 하기 위하여 XHTML 1.0은 FIELDSET 콘텐츠 모델에 대하여 느슨해져야만 했다.

So the semantics hasn’t changed, but the XHTML 1.0 DTDs cannot enforce this restriction due to the limitation of XML 1.0. XML Schema could cope with this problem better, though.

의미는 변하지 않았지만 XHTML 1.0은 XML 1.0의 제한 때문에 이것을 강제할 수 없었다. XML 스키마는 이 문제를 좀 더 개선해서 극복해야 한다고 생각한다.

내용을 이해하는게 쉽지는 않았지만 확실한것은 HTML 4.01과 XHTML 1.0의 FIELDSET/LEGEND 문법이 이렇게 다르고 XHTML 1.0에서는 XML과 콘텐츠 모델을 최대한 일치시키기 위하여 LEGEND 요소를 강제하지 않음으로서 오히려 이 콘텐츠 모델에서만큼은 느슨해지게 되었다 라는 사실입니다.

참조 URI

W3C home >  Mailing lists >  Public >  www-html@w3.org >  February 2002
Re: FIELDSET, LEGEND, HTML, & XHTML
http://lists.w3.org/Archives/Public/www-html/2002Feb/0054.html

글의 오류나 추가정보에 대한 코멘트 언제든 환영합니다. ^^


출처 : http://naradesign.net/wp/2008/04/02/137/


블록의 높이를 설정하는 속성

브라우져 화면의 100% 높이를 유지하는 레이아웃

  1. 우선 height 100%를 사용하려면 html element와 body element의 높이를 100%로 확보해 주어야 합니다.
  2. #body 는 min-height 로 100%높이를 유지 해주고, #content-area 는 원하고자 하는 컨텐츠 영역을 확보 합니다.
  3. 이때, IE 는 min-height 를 지원하지 않으므로, conditional comment를 사용하여 height를 100% 로 확보 합니다. (주석같이 보이는 부분)
  4. #head 의 높이와 #foot 의 높이가 고정이어야 한다는 제약이 있습니다...만, 거의 대부분의 웹사이트가 고정이므로 별 문제는 없으리라 봅니다.