레이블이 DIV인 게시물을 표시합니다. 모든 게시물 표시
레이블이 DIV인 게시물을 표시합니다. 모든 게시물 표시

2008년 11월 19일 수요일

[CSS]png 이미지로 상하좌우 유동적인 둥근박스 만들기

png 이미지로 유동적인 둥근박스 만들기 입니다.

유동적인 박스를 만드는 방법은 다양합니다. 하지만, 박스의 쓰임새에 따라서 조금씩 다를수 있습니다.
저는 상하좌우 모두 유동적인 박스를 만들어보려고 합니다.
매번 말씀드리지만 표현하는 방법은 여러가지이며 아래 예제는 그중에 하나라고 보시면 됩니다.

총두가지 table 방식div 방식으로 예제를 통해 알아보도록 하겠습니다.

첫번째 table로 둥근박스 만드는 방법입니다.


위와 같은 박스를 만들고자 할때 이미지는 다음과 같이 잘라줍니다. (이부분은 div도 동일합니다.)


투명 png로 저장을 하시고, 나머지 회색 부분은 배경컬러로 적용하시면 됩니다. 곡선이미지(png)는 총4개입니다.

밑에서 설명을 하겠지만, png으로 저장시 css에서만 조금 달라질뿐이며, png같은 경우 gif보다 투명곡선을 표현할때 좀더 깔끔하기에 png를 선택했을뿐입니다. 배경이 투명이 아닐경우는 구지 png로 하시지 않아도 됩니다.

아래는 테이블로 감싸고 있을때의 모습입니다.
table 소스는 다음과 같습니다.

<!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>유동적인 둥근박스 만들기(테이블)</title>
<style type="text/css">
body table tr td {font-size:12px;}
.bg_gray {background:#e2e2e2;}
.top_left {width:20px; height:20px; background:url(bg_top_left.png) no-repeat;}
.top_right {width:20px; height:20px; background:url(bg_top_right.png) no-repeat;}
.bottom_left {width:20px; height:20px; background:url(bg_bottom_left.png) no-repeat;}
.bottom_right {width:20px; height:20px; background:url(bg_bottom_right.png) no-repeat;}
 /* IE6용 png 적용 */
*html .top_left {background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_top_left.png',sizingMethod='crop') }
*html .top_right {background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_top_right.png',sizingMethod='crop') }
*html .bottom_left {background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_bottom_left.png',sizingMethod='crop') }
*html .bottom_right {background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_bottom_right.png',sizingMethod='crop') }
</style>
</head>

<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="top_left"></td>
    <td class="bg_gray"></td>
    <td class="top_right"></td>
  </tr>
  <tr>
    <td class="bg_gray"></td>
    <td class="bg_gray">이곳에 내용을 채우시면 됩니다.</td>
    <td class="bg_gray"></td>
  </tr>
  <tr>
    <td class="bottom_left"></td>
    <td class="bg_gray"></td>
    <td class="bottom_right"></td>
  </tr>
</table>
</body>
</html>

IE6에서는 png 투명이미지가 지원되지 않습니다. 그러므로 IE6용으로 스타핵을 사용했습니다.
이부분은 [이글]을 참고하세요.

간단하게 설명을 드리자면 100% 테이블에 가로 세로 3개의 셀을 만드시고 4개의 곡선이미지를 style로 만든후 class로 불러들인 방식입니다. 그외 회색배경은 컬러로 적용을 했습니다.

첨부파일을 확인해보세요.
두번째로 div 방식입니다.


위와 같은 모양입니다.
이미지 자르는건 table과 동일하며 마크업 및 css만 다를뿐입니다.

<!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>유동적인 둥근박스 만들기(div)</title>
<style type="text/css">
#wrap {margin:0; padding:0; font-size:12px;}
#header, #contents, #bottom {clear:both;}
.top_left {float:left; width:20px; height:20px; background:url(bg_top_left.png) no-repeat;}
.top_right {float:right; width:20px; height:20px; background:url(bg_top_right.png) no-repeat;}
.top_center {position:relative; height:20px; background:#e2e2e2; overflow:hidden;}
.contents_center {position:relative; padding:0 20px; background:#e2e2e2; overflow:hidden;}
.bottom_left {float:left; width:20px; height:20px; background:url(bg_bottom_left.png) no-repeat;}
.bottom_right {float:right; width:20px; height:20px; background:url(bg_bottom_right.png) no-repeat;}
.bottom_center {position:relative; height:20px; background:#e2e2e2; overflow:hidden;}
 /* IE6용 png 적용 및 3px버그용 */
*html .top_left {margin-right:-3px; background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_top_left.png',sizingMethod='crop') }
*html .top_right {margin-left:-3px; background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_top_right.png',sizingMethod='crop') }
*html .bottom_left {margin-right:-3px; background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_bottom_left.png',sizingMethod='crop') }
*html .bottom_right {margin-left:-3px; background:none; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bg_bottom_right.png',sizingMethod='crop') }
</style>
</head>

<body>
<div id="wrap">
    <!-- header -->
    <div id="header">
        <div class="top_left"></div>
        <div class="top_right"></div>
        <div class="top_center"></div>
    </div>
    <!--// header -->

    <!-- contents -->    
    <div id="contents">
        <div class="contents_center">내용이 들어가는곳입니다.</div>
    </div>
    <!--// contents -->
    
    <!-- bottom -->
    <div id="bottom">
        <div class="bottom_left"></div>
        <div class="bottom_right"></div>
        <div class="bottom_center"></div>
    </div>
    <!--// bottom -->
</div>
</body>
</html>

첨부파일 확인해 보세요.
<div class="contents_center">내용이 들어가는곳입니다.</div>

위에 부분에는 ul 이 올수도 있고 p 가 올수도 있습니다. 각기 필요해 따라 마크업을 하시면 됩니다.

방법은 정말 다양합니다. 다만, 우리는 더욱더 편한걸 찾을뿐입니다. 위에 자료를 참고하셔서 더 좋은 방법을 찾길 바랍니다.^^

2008년 9월 21일 일요일

[CSS]iframe대신 div를 응용해보자

 

<div style="width: 300px; border: 1px solid #aaa;background-color:#f9efef; height:65px; overflow:auto; color:#135;">

<p>Your own content can go inside here.</p>
<p>이 방법을 이용하면 iframe처럼 박스안에
   컨텐츠들을 스크롤할 수 있다.</p>
<p>하지만 다른 페이지의 내용을 iframe처럼 보여줄수는 없다.</p>
<p>단순히 박스안에 컨텐츠를 넣어 시각적인 효과나 페이지에 많은
   컨텐츠를 구분하여 넣을때는 효과적인 방법같다.
</div>

 

[CSS]div 전체 세로 정렬하기

div 로 전체 가로 정렬할때는 margin:0 auto; 나 text-align:center; 등으로 가운데 정렬을 했는데,  전체 세로 정렬할때의 방법입니다.

해당 css에 아래의 소스를 삽입하세요.

#bodyWrap {
 position:absolute;
 top: 50%;
 left: 50%;
 width:30em;
 height:18em;
 margin-top: -9em;
 margin-left: -15em;
 }


보여지는 부분에 다음과 같이 코딩합니다.

 

 

<div id="bodyWrap">
내용
</div>


NN 4.7  빼곤 나머지 브라우저에서 정상작동합니다.

 

가로정렬하는 방법 : http://blog.webmini.net/296

2008년 9월 20일 토요일

[CSS]해당 div를 스크롤로 감싸자.



#scroll {width:684px; height:696px; overflow-y:scroll;overflow-x:hidden; padding:0;}

약간 변형된 방법은

#scroll {border-width:0 0 0 0;
border-style:solid;
border-color:#efefef;
width:430px;
height:375px;
overflow-x:hidden;
overflow-y:auto;
padding:0 0 0 0;

scrollbar-face-color:#FFFFFF;
scrollbar-highlight-color: #FFFFFF;
scrollbar-3dlight-color: #cfcfcf;
scrollbar-shadow-color: #FFFFFF;
scrollbar-darkshadow-color: #cfcfcf;
scrollbar-track-color: #FFFFFF;
scrollbar-arrow-color: #666666
}

 

 

<div id="scroll">

내용

</div>

2007년 2월 28일 수요일

[웹표준]DIV와 CSS를 이용한 웹 표준코딩의 장점

이글은 nhn 정찬명님의 글을 옮겨 싫은 자료입니다.


웹 표준코딩을 준수 했을때 어떤 가시적인 효과가 있는지 직접 검증하기 위하여 한가지 실험을 하였습니다. 첨부된 파일은 동일한 화면을 Table로 구성하였을 때와 Div로 구성하였을 때 어떤 차이가 있는지 보여드리기 위하여 작성된 html 및 css 파일입니다.

사용자 삽입 이미지
사용자 삽입 이미지
Table Layout Div Layout
HTML 코드라인 수 = 59 Line HTML 코드라인 수 = 31 Line
HTML 파일 용량 = 1.58 KB HTML 파일 용량 = 746 Byte
<table width="800" border="0" cellspacing="0" cellpadding="20">
<tr>
<td colspan="3" valign="top" bgcolor="#000000" id="logo">Table Layout</td>
</tr>
<tr>
<td width="200" height="400" valign="top" bgcolor="#666666">
<table width="100%" border="0" cellspacing="0" cellpadding="5" id="menu">
<tr>
<th bgcolor="#999999" style="height:30px">Menu List </th>
</tr>
<tr>
<td>Menu1</td>
</tr>
<tr>
<td>Menu2</td>
</tr>
<tr>
<td>Menu3</td>
</tr>
<tr>
<td>Menu4</td>
</tr>
<tr>
<td>Menu5</td>
</tr>
</table>
</td>
<td height="400" valign="top" bgcolor="#999999">
<table width="380" border="0" cellspacing="0" cellpadding="5" id="contents">
<tr>
<th bgcolor="#999999" style="height:30px">Page Title </th>
</tr>
<tr>
<td valign="top">Layout Test Page. </td>
</tr>
</table>
</td>
<td width="100" height="400" valign="top" bgcolor="#CCCCCC">
<table width="100%" border="0" cellspacing="0" cellpadding="5" id="contents">
<tr>
<th bgcolor="#999999" style="height:30px">Links </th>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3" valign="top" bgcolor="#333333" id="copy">Copyright</td>
</tr>
</table>

<div id="logo">Table Layout</div>
<div id="page">
<div id="menu">
<h1>Menu List </h1>
<ul>
<li>Menu1</li>
<li>Menu2</li>
<li>Menu3</li>
<li>Menu4</li>
<li>Menu5</li>
</ul>
</div>
<div id="contents">
<h2>Page Title </h2>
<div id="text">Layout Test Page. </div>
</div>
<div id="links">
<h2>Links</h2>
</div>
</div>
<div id="copy">Copyright</div>

CSS 코드라인 수 = 8 Line CSS 코드라인 수 = 11 Line
CSS 파일 용량 = 919 Byte CSS 파일 용량 = 1.27 KB
#logo { font-family:Arial; font-size:100px; color:#FFFFFF; font-weight:bold}
#menu th { border-bottom:3px solid #FFFFFF; font-family:Arial; font-size:24px; font-weight:bold; color: #FFFF00; text-align:left}
#menu td { border-bottom:1px dotted #FFFFFF; font-family:Arial; font-size:14px; font-weight:bold; color:#FFFFFF}
#contents th {border-bottom:3px solid #FFFFFF; font-family:Arial; font-size:24px; font-weight:bold; color: #FFFF00; text-align:left; background:#666666}
#contents td { font-family: Verdana; font-size:12px; line-height:150%; color:#FFFFFF; text-align:justify}
#links th {border-bottom:3px solid #FFFFFF; font-family:Arial; font-size:24px; font-weight:bold; color: #FFFF00; text-align:left; background:#666666}
#links td { font-family: Verdana; font-size:12px; line-height:150%; color:#FFFFFF; text-align:justify}
#copy { font-family: Verdana; font-size:50px; font-weight:bold; color:#FFFFFF; }
h1 { width:190px; padding:5px; font-size:24px; font-weight:bold; font-family:Arial; color:#FFFF00; background:#999999; border-bottom:3px solid #FFFFFF; margin:0}
h2 { padding:5px; font-size:24px; font-weight:bold; font-family:Arial; color:#FFFF00; background:#666666; border-bottom:3px solid #FFFFFF; margin:0}
#logo { font-family:Arial; font-size:100px; color:#FFFFFF; font-weight:bold; background:#000000; width:760px; padding:20px}
#page { position:relative; width:800px; overflow:visible}
#menu { position:relative; padding:20px; width:200px; background:#666666; float:left; height:400px }
#menu ul { margin:0; padding:0}
#menu li { width:190px; padding:5px; border-bottom:1px dotted #FFFFFF; font-family:Arial; font-size:14px; font-weight:bold; color:#FFFFFF; list-style:none}
#contents { position:relative; padding:20px; background: #999999; font-size:12px; font-family:Verdana; color:#FFFFFF; width:380px; float:left; height:400px}
#text { padding:5px; line-height:150%; font-family:Verdana; text-align:justify}
#links { position:relative; float:left; background:#CCCCCC; width:100px; padding:20px; clear:right; height:400px}
#copy { position:relative; clear:both; background: #333333; font-family: Verdana; font-size:50px; font-weight:bold; color:#FFFFFF; width:760px; padding:20px }
 

DIV+CSS 레이아웃과 웹 표준 코딩의 장점

 

1. 작고 가벼운 구조와 용량

Div 레이아웃의 경우 순수한 HTML 파일의 코드 라인 수와 파일의 용량은 Table 레이아웃에 비하여대략 50%정도 절감됩니다. 이렇게표준으로 코딩된 HTML 파일은 한개 사이트에서 수십 수천 페이지에 이르기 때문에 사용자의 트래픽으로 인한 서버의 부하를 경감할 수 있습니다. 유지보수 비용과 직결되는 문제죠.

Div 를 이용한 표준 코딩이 가벼워 질 수 밖에 없는 이유는 다음과 같습니다.내용 하나를 원하는 위치에 표기하기 위하여 Table 로 코딩하려면 <table><tr><td>내용</td></tr></table> 이와 같이 3쌍의 태그로 둘러싸야 합니다.하지만 Div 로 코딩하면 <div>내용</div> 1쌍의 태그로 족합니다. HTML 태그의 코드 라인수와 용량이 반으로 줄만 하죠

CSS 코드가 조금 더 늘어나긴 하지만 CSS 파일은 해당 웹사이트에 접속시 최초 1회 다운로드 되어 사용자 PC의 캐시메모리에 저장되며, 해당 웹사이트를 빠져나갈 때까지 다시 다운로드 되는 일이 거의 없는 파일입니다. 따라서 CSS 파일의 용량이 늘어나면 HTML 코드가 줄어들어도 전체적인 트래픽량은 대동소이 하지 않을까 라고 생각하신다면 잘못된 계산 입니다. HTML코드는 페이지를 열때마다 새롭게 다운로드 하지만 CSS 파일은 한번만 다운로드 되는 파일이기 때문입니다.

 

2. XML포멧으로 확장가능,CSS의존도를 높여디자인개편 비용을 절감

웹 표준 코딩은 문서의 구조와 표현을 분리합니다. 구조는 HTML으로 정의하고, 표현은 CSS로 정의합니다. 예를 들면 문서의 제목을 표현함에 있어서 <h1>태그는 구조적으로 의미있는 태그 입니다. 하지만 <h1> 태그는 글자를 단지 구조적으로만 의미있게 표현할 뿐보여주기 위한 장식적인 디자인 표현은 CSS 에서 담당합니다.이렇게 되면 HTML 태그는 문서의 구조만, CSS는 표현만 따로 분리하여 정의 한 것으로이는XML 데이터 문서로의 확장을 용이하게 만들고디자인 변경시 HTML 파일의 편집비율은 줄어들고 CSS파일만 수정하면 됩니다.

비표준 웹문서의 디자인 개편시HTML 1,000 페이지를 모두 일일이 열어서 Find & Replace 방식으로 수정하여야했습니다. 또는테이블 구조가 변경되는 경우기존의 페이지를 수정하는 것보다 다시 생산하는 방식이 훨씬 빠르기 때문에 디자인 개편은 곧 사이트의 재구축을 의미하였습니다.W3C에서 표준으로 권고하는 웹 표준방식으로 제작된 웹사이트는딸랑 CSS 1개 파일을 수정함으로서 HTML 1,000 페이지를 한꺼번에 디자인 개편하는 놀라운 경험을 할 수 있습니다.CSS의 본래 목적이 바로 그것입니다. 이것을 이해하려면 먼저 CSS의 디자인 표현 가능성과 한계에 대하여 알아두셔야 합니다. CSS의 디자인 표현 능력은 상상 그이상입니다.

 

3. 사람이나 로봇(컴퓨터)이이해하기 쉬운구조

둘러싸는 코드가간결하고 코드라인의 양이 줄기때문에 구조를 한눈에 파악하기 쉽습니다. 또한 그뿐만이 아닙니다.Div 레이아웃에서 h1, h2 태그를 사용한 것은 제목을 표기하기 위함이며 ul, li 태그를 사용한 것은 목록을구조적으로 의미있게 표현하기 위함 입니다. h1 태그 대신 제목을 <tr><td>...</td></tr>안에표현하는 것은어떤 의미도 없으므로 사람이든 검색로봇이든 이해하기 어려운 정보 입니다. 하지만h1태그로 둘러싼 제목은 사람 뿐만 아니라 검색로봇도 의미있게 받아들이고 XML 데이터로 확장하기에도 용이합니다. 그동안 하찮게 여겼던 태그들이 얼마나 중요한지 모르실 껍니다.

 

4. Table 은 고지식 하고 Div 는 유연합니다

솔직히 저는 처음 Div 코딩을 제안 받았을때 이해하기 어려웠습니다. 왜 그래야 하는지. Table 태그도 분명 표준 태그이며 편하고 유용하게 사용해 왔는데 왜이제는 사용하면 안돼는지 의아해 했습니다. 하지만 Div 의 장점을 알게 되면서 부터는 더이상 그것이 궁금하지 않게 되었습니다. 물론 Div 레이아웃을 사용하는 것이 웹 표준 방식이며소고기 맛을 처음 본 사람이 돼지고기는 쳐다보지도 않는 상황과 같다고 말씀드릴 수 있겠네요. 벽에 액자를 붙인다고 합시다. Table이 콘크리트 벽에 못을 깊숙히 때려박는 행위라면 Div 는 콘크리트 벽에 실리콘 접착행어를 달아주는 것과 같습니다. 언제든지 깔끔하게 떼어서 다른 위치에 붙일 수 있죠. 이게 가장 큰 장점 입니다. 게다가 레이아웃과 디자인 표현에 관한 코드가 CSS 파일안에서 모두 정의 되므로 문서의 구조와 내용은 변경하지 않고 디자인과 레이아웃만 바꾼다면 HTML 파일은 열어볼필요도 없어집니다. 레이아웃과 디자인을언제든지 쉽게 바꿀 수 있는 유지보수의 용이성이죠.

Table 은 현재 셀과 이웃셀이 연결되어 있습니다. 따라서 서로 높낮이나 크기를 완전히 다르게 하려면 따로 Table 태그를 한번 더 사용해야 합니다. 그리고 셀과 셀이 서로 연결되어 있기 때문에 특정부분의 레이아웃을 잘못 변경하면 페이지의 나머지 레이아웃도 함께 수정해야 합니다. 하지만 Div 태그는 각자 따로 노는 스타일 입니다. 물론 서로 밀어내고 붙어있는등 유기적인 관계를 가질 수도 있으며 이것을 변경하는 것은 매우 쉽습니다. css 코드의 position 속성만 변경하면 됩니다. 그럼 서로 함께 움직이거나 따로 놀도록 설정 할 수 있습니다. 다시 한번 말하지만 Div 태그는 둥둥 떠다니는 레이어의 성격을 함께지니고있으므로 언제든지 원하는 위치로 옮길 수 있어 유지보수가 매우 용이 합니다.

 

5. 접근성 문제는 웹 표준만 지키면 90% 이상 해결 됩니다

행정자치부에서 발표한 "홈페이지 구축운영 표준지침 2005" 문서에는 "한국형 웹 콘텐츠 접근성 지침 1.0" 이라는 별첨문서가 있는데 2005년부터 구축되기 시작한 행정기관 홈페이지는 해당 지침을 따르도록 되어 있는 말 그대로의 지침 입니다. 아직 강제성은 없지만 이 지침을 기준으로 평가하는 행위도 이루어 지고 있고 또 앞으로 강제될 활률이 높습니다.

이러한 접근성 지침의 근간이 되는 문서는 W3C에서 발표한 "웹 접근성 가이드" 입니다. 웹 표준은 접근성을 고려하여 제정된 것이기 때문에 웹 표준만 지키면 접근성 문제는 90%이상 자동으로 해결됩니다. 따로 떼어놓고 생각할 수 있는 문제가 아닙니다.

자료출처 : http://naradesign.net/wp/2007/02/03/113/