태그 글 보관함: html

naming

네이밍

오랜만에 포스팅이네요

다름이 아닌 이번포스팅은 네이밍에 관해서 입니다. 대부분 class명이나 ID명을 지을 때 아래의 방법을 많이 사용합니다.

예시(1)

1
2
3
4
5
6
7
8
<div class="news">
     <h1 class="news_tit">뉴스</h1>
     <div class="news_con">내용</div>
</div>
<div class="notice">
     <h1 class="notice_tit">공지</h1>
     <div class="notice_con">내용</div>
</div>

예시(2)

1
2
3
4
5
6
7
8
9
<div class="news">
	<h1 class="newsTit">뉴스</h1>
	<div class="newsCon">내용</div>
</div>
 
<div class="notice">
	<h1 class="noticeTit">공지</h1>
	<div class="noticeCon">내용</div>
</div>

위의 방법으로 css를 제작하면

예시(1-1)

1
2
3
4
5
6
7
.news {}
.news .news_tit {}
.news .news_con {}
 
.notice {}
.notice .notice_tit {}
.notice .notice_con {}

예시(1-2)

1
2
3
4
5
6
7
.news {}
.news_tit {}
.news_con {}
 
.notice {}
.notice_tit {}
.notice_con {}

예시(2-1)

1
2
3
4
5
6
7
.news {}
.news .newsTit {}
.news .newsCon {}
 
.notice {}
.notice .noticeTit {}
.notice .noticeCon {}

예시(2-2)

1
2
3
4
5
6
7
.news {}
.newsTit {}
.newsCon {}
 
.notice {}
.noticeTit {}
.noticeCon {}

이런 형태를 띕니다.

위 상황에서 문제점

클래스명이 불필요하게 길어 질수 있고,
활용성이 떨어져서 매번 새로운 클래스명을 생각해야합니다.

위의 방법 같은 경우는 그나마 이름을 상속받아서 사용하는 경우이지만 그렇지 않은 경우는 더 네이밍 제작에 더 심각해지는것이죠

그럼 아래의 방법을 하나 제시 해보겠습니다.

1
2
3
4
5
6
7
8
9
<div class="news">
	<h1 class="tit"></h1>
	<div class="con"></div>
</div>
 
<div class="notice">
	<h1 class="tit"></h1>
	<div class="con"></div>
</div>

보시다 시피 동일 한 클래스명을 사용하고 있습니다. 이러면 나중에 무엇이 무엇인지 알수 없다 라는 분들고 계실 수 있습니다.
하지만 css를 활용하면 충분히 관리가 된다는것이죠

1
2
3
4
5
6
7
.news {}
.news .tit {}
.news .con {}
 
.notice {}
.notice .tit {}
.notice .con {}

위처럼 css를 관리 하고 제작한다면 가독성도 뛰어날 뿐더러 어디에 무엇이 사용되었는지 한번에 알수 있는 장점을 가집니다.
물론 css나 class명도 줄어 들어서 최적화도 약간(?)된다는거죠

템플릿

1
2
3
4
.유니크_네임
.유니크_네임 .tit
.유니크_네임 .con
.유니크_네임 .more

다음은 섹션에 관한 네이밍입니다. 이부분은 스스로의 규칙을 정하시는게 좋습니다.

대 wrap “이름_container”
예) header_container
소 wrap “이름_content”
예) left_content, main_content
소규모 wrap “이름_wrap” 예) notice_wrap
디자인필요에 의한 내부 wrap “이름_inner”
예) header_inner, notice_inner
필요에 따라서 + 숫자
예) header_inner01, header_bg01
wrap 내의 단순 좌우 정렬 .rtl { float: left; }
.ltr { float: right;}

그럼 전체 적으로 퍼블리싱된 결과물을 한번 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
< !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>
  <title> new document </title>
  <meta name="generator" content="editplus" />
  <meta name="author" content="" />
  <meta name="keywords" content="" />
  <meta name="description" content="" />
 
<style>
/* 레이아웃 */
#header_container {}
#header_container .header_inner {}
 
#body_container {}
#body_container .body_inner {}
#body_container .left_content {}
#body_container .main_content {}
 
#footer_container {}
 
/* 메인 컨텐츠 */
/* 공지 사항 */
.notice_wrap {}
.notice_wrap .tit {}
.notice_wrap .con {}
.notice_wrap .more {}
 
/* 뉴스 */
.news_wrap {}
.news_wrap .tit {}
.news_wrap .con {}
.news_wrap .more {}
 
/* 갤러리 */
.gallery_wrap {}
.gallery_wrap .tit {}
.gallery_wrap .con {}
.gallery_wrap .more {}
</style>
 
 
 </head>
 
 <body>
<!-- s: header -->
<div id="header_container">
  <div class="header_inner">
   <h1 class="logo">네이밍 예제</h1>
   <ul class="gnb">
    <li>메뉴</li>
   </ul>
  </div>
</div>
<!-- e: header -->
 
<!-- s: body -->
<div id="body_container">
 <div class="body_inner">
   <div class="left_content"> lnb 및 배너</div>
   <div class="main_content">
 
 
   <!-- s: notice -->
   <div class="notice_wrap">
    <h2 class="tit">공지사항</h2>
    <ul class="con">
     <li><a href="#">어쩌구 저쩌구</a></li>
    </ul>
    <a href="#" class="more">공지 더보기</a>
   </div>
   <!-- e: notice -->
 
   <!-- s: news -->
   <div class="news_wrap">
    <h2 class="tit">뉴스</h2>
    <ul class="con">
     <li><a href="#">어쩌구 저쩌구</a></li>
    </ul>
    <a href="#" class="more">뉴스 더보기</a>
   </div>
   <!-- e: news -->
 
   <!-- s: gallery -->
   <div class="gallery_wrap">
    <h2 class="tit">갤러리</h2>
    <ul class="con">
     <li><a href="#">사진</a></li>
    </ul>
    <a href="#" class="more">갤러리 더보기</a>
   </div>
   <!-- e: gallery -->
  </div>
 </div>
</div>
<!-- e: body -->
 
 
<!-- s: footer -->
<div id="footer_container"></div>
<!-- e: footer -->
 </body>
</html>

* 네이밍이 중요한 이유는 코드의 재활성, 가독성이 좋아 지고 유지보수가 좀더 편해지는데에 있습니다.

좀더 복잡한 케이스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<div class="section_wrap"> 
  <div class="section_inner"> <!-- 디자인요소를 위한 DIV inner혹은 숫자 혹은 bg명시 -->
   <!-- tit은 필요에 따라 사용 예)텝이나 여러개 추가 될경우 숫자등 이용 -->
   <hn>내용</hn>   
   <!-- 주 설명 --> 
   <p class="m_txt">아래의 내용은 예제 입니다.</p>  
   <!-- 컨텐츠 왼쪽 정렬 동일한 컨텐츠의 영역 나누기일경우 단순 의미만 부과된 class명사용 -->
   <div class="rtl"> 
        <p class="txt01">내용1</p>
   </div> 
   <!-- 컨텐츠 우측 정렬 -->
   <div class="ltr">
     <!-- 클래스 네임이 변경되는 이유는 동일한 센션의 내용이고 단분 좌우 배치일뿐 -->
     <p class="txt02">내용2</p> 
   </div>
  </div>
</div>
<style>
.section_wrap {}
.section_wrap hn {}
.section_wrap .m_txt  {}
.section_wrap .rtl  {디자인요소}
.section_wrap .ltr  {디자인요소}
.section_wrap .txt01 {}
.section_wrap .txt02 {}
</style>

위의 예제 처럼 컨텐츠의 의미와 구조를 파악하고 class명을 명시하면 더욱 더 활용 성이 높아 집니다. 네이밍은 안된다 된다가 없습니다 활용하기 나름 일뿐

Meta tag

Meta tag는 웹 서버와 웹 브라우저간에 상호 교환되는 정보를 정의 하는데 사용

1) meta tag 종류, 기능, 설명

태그 설명
<meta name=”robots” content=”ALL”>
모두 수집 : ALL (기본값)
검색 봇의 검색 허용
모두 수집불가 :NONE
본문서 : 수집가능(index), 수집불가(noindex)
링크문서 : 수집가능(follow), 수집불가(nofollow)
예)본문서 수집불가/링크문서 수집가능 “noindex,follow”
<meta name=”googlebot” content=”noarchive”>
NOARCHIVE (구글이 페이지 저장을 하지 못하도록함)
Google참조
구글 검색 봇
<meta name=”keywords” content=””>
any value
검색어 ( ‘,’ 를 단어 사이에 넣어 나열 )
<meta name=”subject” content=””>
any value
주제 혹은 제목
<meta name=”description” content=””>
any value
설명문
<meta name=”author” content=””>
any value
만든사람
<meta name=”writer” content=””>
any value
제작자
<meta name=”copyright” content=””>
any value
저작권
<meta name=”reply-to” content= “”>
메일주소
메일주소
<meta name=”Imagetoolbar” content= “”>
no
이미지 툴바
<meta name=”content-language” content=”kr”>
ISO 639 문자코드 참조
문서의 언어를 지정 쉼표로 구분(예: en,fr)
<meta http-equiv=”Content-Type” content=”text/html; charset=euc-kr”>
Mime-Type 참조, charset 참조
문서의 타입(Mime-Type), 문서의 언어를 설정
<meta name=”build” content=”2006. 07. 06″>
GMT(UMT), RFC 1123 format
갱신일 (갱실 할때마다 검색 봇이 재 수집)
<meta name=”Last-Modified” content=”Mon,20 Jul 2007 19:30:30″>
GMT(UMT), RFC 1123 format
최종 수정일
<meta http-equiv=”Cache-Control” content=”No-Cache”>
Public(공개된 Cache사용)
Private(개인적인 Cache사용)
no-Cache(캐쉬 사용안함)
no-Store(캐쉬 사용하지만 저장되지 않는다.)
http 버전 1.1에서 지원
(no-Cache의 경우 캐쉬를 사용하지 않기때문에 매번 접속시 데이터를 내려받아서 속도는 느리지만 반영이 빠름)
<meta http-equiv=”Pragma” content=”No-Cache”>
http 버전 1.0에서 지원
<http-equiv=”expires” content=”Mon, 22 Jul 2002 11:12:01 GMT”>
GMT(UMT), RFC 1123 format
Cache 만료일 설정

x(HTML)

1) XHTML 과 HTML차이점

구분 XHTML HTML
종료태그
종료태그 필수
빈 element
<br />
비어있지 않은 element
<ul>
<li>  내용</li>
</ul>
종료태그 불필요
빈 element
<br>
비어있지 않은 element
<ul>
<li> 내용
</ul>
작성 문자
Element, Attribute 반드시 소문자
(value 제외)
대소문자 무관
(대소문자 값의 인식은 서버 환경에 따라 다를 수 있음)
Well-formed
준수
<span><strong>내용</strong></span>
제약 없음
<span><strong>내용</span></strong>
속성 값
모든 값은 항상 쌍(홀)따움표(“) 안에 들어가야 한다.
제한 없음
Minimization
속성최소화(minimization) 지원 불가
<input  readonly = “readonly” /> (O)
<input readonly  /> (X)
사용 가능
<input  readonly = “readonly”> (O)
<input readonly> (O)
PCDATA
스크립트와 스타일 엘레멘트들은 #PCDATA 내용을 갖고 선언
예)<과 &는 “마크업의 시작”으로 처리, <과 &와 같은 글자(entities)들은 각각 <과 &의 “글자(entity) 참조”attribute 값이 ‘&’를 포함하면, 이는 글자 참조(character entity reference)로 표현되어야 한다(예:”&”).
예를 들어, a element의 href attribute 가 parameter들를 받는 CGI script를 참조하면,
http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user로 하지 말고,
http://my.site.dom/cgi-bin/myscript.pl?class=guest&name=user로 기술하여야 한다.
제약 없음
Language
lang과 xml:lang attribute들을 둘 다 사용
xml:lang attribute 값 이 우선한다.
제약 없음

2) xhtml lang Attribute 선언

해당언어의 검색 결과 및 음성장치(정확한 음성출력)에 활용된다.

ISO 639-1은 languages에 대한 abbreviations (약어)를 정의한다. HTML 과 XHTML에서 lang 과 xml:lang attributes에 사용될 수 있다.

 2-1. 각 국가별 language code

language iso code
  abkhazian ab
  afar aa
  afrikaans af
  albanian sq
  amharic am
  arabic ar
  armenian hy
  assamese as
  aymara ay
  azerbaijani az
  bashkir ba
  basque eu
  bengali (bangla) bn
  bhutani dz
  bihari bh
  bislama bi
  breton br
  bulgarian bg
  burmese my
  byelorussian (belarusian) be
  cambodian km
  catalan ca
  cherokee
  chewa
  chinese (simplified) zh
  chinese (traditional) zh
  corsican co
  croatian hr
  czech cs
  danish da
  divehi
  dutch nl
  edo
  english en
  esperanto eo
  estonian et
  faeroese fo
  farsi fa
  fiji fj
  finnish fi
  flemish
  french fr
  frisian fy
  fulfulde
  galician gl
  gaelic (scottish) gd
  gaelic (manx) gv
  georgian ka
  german de
  greek el
  greenlandic kl
  guarani gn
  gujarati gu
  hausa ha
  hawaiian
  hebrew he, iw
  hindi hi
  hungarian hu
  ibibio
  icelandic is
  igbo
  indonesian id, in
  interlingua ia
  interlingue ie
  inuktitut iu
  inupiak ik
  irish ga
  italian it
  japanese ja
  javanese jv
  kannada kn
  kanuri
  kashmiri ks
  kazakh kk
  kinyarwanda (ruanda) rw
  kirghiz ky
  kirundi (rundi) rn
  konkani
  korean ko
  kurdish ku
  laothian lo
  latin la
  latvian (lettish) lv
  limburgish ( limburger) li
  lingala ln
  lithuanian lt
  macedonian mk
  malagasy mg
  malay ms
  malayalam ml
  
  maltese mt
  maori mi
  marathi mr
  moldavian mo
  mongolian mn
  nauru na
  nepali ne
  norwegian no
  occitan oc
  oriya or
  oromo (afan,galla) om
  papiamentu
  pashto (pushto) ps
  polish pl
  portuguese pt
  punjabi pa
  quechua qu
  rhaeto-romance rm
  romanian ro
  russian ru
  sami (lappish)

DTD(Document Type Definition)

 

1. DTD(Document Type Definition) 선언

DTD (Document Type Definition)는 SGML (Standard Generalized Markup Language) 계열 마크업 언어의 문서 타입을 정의

– HTML –

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3.org/TR/html4/strict.dtd”>
HTML 4.01 엄격한 모드다.
프레임과 링크타겟은 허용되지 않는다. 그리고 다음 요소도 사용할수 없다.
Element Style : basefont, center, font, s, strikr, u
Element : applet, dir, isindex, menu
HTML 4.01 Strict는 Mac용 Explorer 5이상 네스케이프 6과 같은 최신 브라우저에서 사용이 가능하다.
이 브라우저 이전의 버전은 쿽스 모드로 랜더링을 한다.
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
HTML 4의 모든 요소를 포함한다. 권장하지 않는 요소의 사용은 가능하나 frame은 사용할수 없다.
HTML 4.01 Strict는 Mac용 Explorer 5이상 네스케이프 6과 같은 최신 브라우저에서 사용이 가능하다.
쿽스 모드로 랜더링을 원할경우 URI를 생략하면 된다.
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Frameset//EN” “http://www.w3.org/TR/html4/frameset.dtd”>
HTML 4.01프레임셋으로 HTML 4.01 Transitional 과 유사하면서 frame을 사용가능할 수 있다.

– XHTML –

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>
HTML 4.01 Strict와 같이 허용되지 않은 요소는 사용할수 없는 HTML 4의 XML버전의 문서이다.

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
HTML 4의 모든 요소를 포함한다. 권장하지 않는 요소의 사용은 가능하나 frame은 사용할수 없다. HTML 4의 XML버전의 문서이다.

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Frameset//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd”>
HTML 4.01 Transitional 과 유사하면서 frame을 사용가능할 수 있다. HTML 4의 XML버전의 문서이다.

1) 사용 목적

– 브라우저마다 각기 다른 엔진을 가지고 있기 때문에 Cross browsing이 잘되지 않는다. 하지만 DTD를 선언하여 CSS코드를 작성하면 모든 브라우저에 동일한 표현효과를 줄 수 있다. 그리고 문서에 대한 정보를 내장하고 있기 때문에 표준형태의 문서에는 필수로 규정하고 있다.

 

2) 담겨진 정보

  • – 문서 버전
  • – 문서 기술 규칙
  • – 사용할 수 있는 속성
  • – 허용되는 속성 값
  • – 문서에서 사용되는 문자 코드 세트 지정

 

3) DTD 동작 및 선언 규칙

브라우저는 선언된 doctype에 따라 렌더링할 모드를 선택게 되는데 이 과정을 Doctype Sniffing(또는 Doctype Wwitching)이라고 하며 브라우저가 출력하고자 하는 문서가 최신이라고 판단을 하면 표준모드(Standard Mode)로 렌더링을 한다. 만약 브라우저가 예전 문서라고 판단을 하면 쿽스모드(Quirks Mode)로 렌더링을 한다.

Doctype sniffing은 MIME타입이 text/html인 문서에서만 적용이 되고 application/xhtml+xml을 포함한 XML MIME타입의 스펙은 자동적으로 표준모드로 동작하게 된다.

HTML과 XHTML에서 DTD에 대한 레퍼런스는 “PUBLIC”문자열과 Formal Public Idendtifier(FPI), Formal System Identifier(FSI) 순으로 기술이 된다. 이때 FSI는 Optional이며 DTD에 대한 URL이 됨.

 

다음은 FPI와 FSI 모두를 포함하는 doctype선언 예

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01//EN” “http://www.w3c.org/TR/html4/strict.dtd”>

다음은 FPI에 대한 예

<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>

Doctype sniffing은 doctype선언에 이들 중 어떤 것이 기술되어 있느냐를 감지해내는 것이다. 만약 FPI가 기술되어 있고 FSI가 기술되어 있지 않다면 브라우저는 일반적으로 쿽스모드를 선택한다. 왜냐하면 예전에는 doctype선언할 때 일반적으로 사용된 방법이었기 때문이다. 또한 브라우저는 doctype선언부분 까지 기술되지 않았을 경우 또는 기술되더라도 doctype의 문법이 틀렸을 경우에도 쿽스모드를 선택한다.

 

4) 주의

IE6는 Doctype선언이 문서에서 첫 번째 줄에 존재하는 것으로 가정하고 Doctype Sniffing을 수행한다. 그로 인하여 DTD는 문서 제일 상단에 위치 하여야 하고 DTD문서 이전에는 어떤 문구도 작성하여서는 안 된다. (여백 무시)

FSI 기술되어있지 않으면 Quirks mode로 랜더링 된다.

다음은 Quirks Mode 랜더링 되는 예이다

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” >
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<?xml version=”1.0″ encoding=”utf-8″?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>

 

5) Standards Mode vs Quicks mode