정말로 그 동안 계속 개발을 해오며, HTML UI 때문에 이만저만 고생한것이 아니다.
박스모델 등.. 테이블 코드를 이용한 그리드 레이아웃등.

어쨌건.. 그 동안 이런 저러한 테스트들을 통하여 결과를 다시 작성해 본다.

먼저 기본적이 웹사이트 UI 에 가장 많이 사용되는 UI 형태이다.


작성된 HTML코드는 다음과 같다.


이제 이와 같은 형태에서 많은 각각의 요소(엘리먼트) 안에 내용들이 할당된다.
HEADER 부분에는 평균적으로 메뉴가 들어가게 될것이고,
LEFT 부분에는 로그인및 배너및 기타요소가 들어가게 될것이고,
CONTENT 부분에는 말 그대로 컨텐츠등이 들어가게 될것이다.
FOOTER 에는 카피라이트 문구나, 소개형태의 내용이 들어가게 된다.

그런데 이와같은 형태의 UI에서 빈번하게 삽질하게 되는 경우는 내용에 따른 FOOTER 위치 변동과,
CONTENT와 LEFT 를 포함하고 있는 CONTAINER 의 세로 변동이었다.
이에 간단하게 테스트를 해보았다.

나는 레이아웃 모델중 요소를 각각의 위치에 배치하는 형태의 레이아웃 모델을 훨씬 선호하기 떄문에,
위와 같은 형태로 코드를 작성하고 테스트를 하게 되었다.

먼저 위 엘리먼트에 대한 스타일시트(CSS) 코드는 다음과 같다.

하이라이트 처리가 좀 귀찮은 관계로 캡쳐로 합니다잉.ㅎㅎ;;;

그럼 맨처음 이미지와 같은 형태로 레이아웃이 구성이 된다.
이제 여기에 아래와 같은 테스트 스크립트를 삽입해 보자.


그냥 CONTENT 요소에 넘버링을 찍는 간단한 for 문이다.
그리고 결과는... ㅎㅎ
아래와 같다. 만족스럽다. ㅎㅎㅎ


100까지 찍으면 캡쳐가 힘들어서 루프를 70까지만 돌린다.

테스트한 브라우저는 IE6,7,8,9 / 구글크롬, 오페라, 파이어폭스, 사파리 등 IE의 쿼크모드 렌더링을
제외하고는 모두 동일한 결과를 나타냈다.
다음으로 이렇게 작성해준 사람을 생각해서 댓글을 작성해주는 센서를 발휘하면 테스트 완료다.ㅎㅎ
어쨌건 백문이불여일타. 테스트를 많이하자~ 

CSS레이아웃,div레이아웃,css세로100%,footer하단고정,ui개발,css layout,박스모델

이에 더 괜찮은 방법이나 틀린점은 지적 부탁드립니다. ^^; 

'Development > HTML' 카테고리의 다른 글

IE8 이하에 HTML5 적용  (0) 2012.07.25
Visual Studio 2010 HTML 유효성 검사  (2) 2012.07.09
HTML UI 에 대해서  (0) 2012.03.12
최고의 HTML 편집기가 궁금합니다.  (0) 2011.11.09
3D로 강력해진 구글 ‘크롬9′ 공개  (0) 2011.02.10
HTML UI 구성  (0) 2010.11.17
이번에도 간단하게 HTML과 CSS 로 UI 를 구성하는데,
나름 괜찮은 방법이기에 다시 포스팅을 한다. 이미 모두 사용하고 있을 수도 있지만..
나는 기억력이 그다지 좋은 편이 아니기에 포스팅을 한다.

테스트 브라우저 : Google Chrome, IE8, IE6, FF, Opera

div 태그로 UI 를 구성함에 있어 기본적인 원칙.
요소들의 배치.

이 것이 상당히 중요한 원칙이다. 이 원리를 구현하고자 테스트를 반복함으로 알수 있있다.
먼저 이러한 UI 를 구성하고자 타겟을 설정하였다.


색상으로 박스를 설정하였다.
White (Background) : html, body, form, Wrap
Yellow : header
Container : blue
Contents : brown
box1 : cyan
box2 : skyblue
Footer : green

위를 구성하는 CSS 코드들은 기본적으로 padding 이 모두 0 이다.
이에 margin, position, width, height 로만 UI를 구성한 것 이다.
먼저 해당하는 속성들을 간단하게(?) 설명한다.

 속성명 정의 
 margin

정의 : 해당 엘리먼트의 바깥 여백을 지정한다.
  
 margin-left:10px 왼쪽으로 10픽셀 
margin-right:10px  오른쪽으로 10픽셀 
margin-top:10px  상단 10픽셀 
 margin-bottom:10px  하단 10픽셀
marign:10px  전체 10픽셀 
marign:20px 20px  상하 20픽셀, 좌우 20픽셀 
 margin:10px 30px 20px 상단 10픽셀,  좌우 30픽셀,
하단 20픽셀
 margin:10px 20px 30px 40px  상단 10픽셀, 오른쪽 20픽셀,
하단 30픽셀, 왼쪽 40픽셀


 position  엘리먼트 위치속성 적용
  1. static
    • (기본값) normal flow에 따라서 배치된다. (Visual formatting model : Normal flow)
    • top, left. bottom, right 속성이 적용되지 않는다.
  2. relative
    • static일때의 위치를 기준으로 top, left, bottom, right 속성이 적용된다.
    • relative인 box B가 있고, 그 다음에 나오는 sibling은 B의 static 영역을 기준으로 자리를 잡는다.
    • relative가 적용되지 않는 block elements : table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, table-caption
  3. absolute
    • top, left, bottom, right 속성이 자신을 포함하는 box의 위치를 기준으로 적용된다.
    • 다른 sibling과의 위치에 영향을 주지 않는다.
    • margin 값이 있어도 다른 box의 margin과 합쳐지지 않는다. (Box model : Collapse margins)
  4. fixed
    • absolute와 비슷하지만, 자신을 포함하는 box가 아닌 viewport의 맨위좌측을 기준으로 적용된다.
    • 스크롤되지 않고, 항상 같은 위치에 보이게 된다.
    • print media type에 적용되는 경우, 모든 페이지에 나타난다.
    • 따라서 화면에는 항상 나타나지만, 프린트할때는 한번만 보이게 할경우... screen의 경우 fixed, print의 경우 static으로 다르게 설정해 주어야 한다.
 width  엘리먼트의 가로 크기 (길이 단위 [예 : 픽셀], %, auto, inherit
 height  엘리먼트의 세로크기 (길이 단위 [예: 픽셀], %, auto, inherit

먼저 header 와 container, footer 가 고정이라 정의한다면
container 내에서는 요소들의 배치가 자유로워야 한다.
이에 contents 라는 요소를 배치하고 그 안에 box1, box1-1, box2 이라는 요소들을 배치하였다.
box1-1 과 box2 는 같은 레벨이며 box1-1 은 box1 의 하위레벨 요소이다.
box1, box2 역시 contents 의 하위레벨 요소이다.
먼저 하위레벨 요소들의 위치 배정이 모든 브라우저에서 동일하게 적용된다면 정말로 실용성은
상당히 좋지 않은가?
이게 "웹표준" 이다.. 하면서 정의를 하면서 하지는 않겠다. 하지만 크로스 브라우징에 있어서만큼은
올바른 태그 사용과 표시오류가 없을 신뢰할 수 있었다.
신뢰기반은 무조건 실행과 테스트니 말이다.

먼저 html 태그의 코드 구성은 다음과 같다.
간단하게 body 태그 안에 코드만 작성하였다.


White (Background) : html, body, form, Wrap
Yellow : header
Container : blue
Contents : brown
box1 : cyan
box2 : skyblue
Footer : green

이와 같은 구성이 증명된다.
UI 를 구성하는 라인 끝에 시작은 <!-- WRAP -->. 끝은 <!-- //WRAP -->
처럼 주석을 작성하여 보기에 편의를 두었다.
참. 이에 메타태그도 추가하겠다. 큰 상관은 U-UA_Compatible 속성만 있겠지만야. 일단 고정적으로
쓰는 메타를 추가한다.


그럼 위에서도 보다시피 렌더링 유도시에는 인터넷 익스플로러 최신버전임을 알 수 있다.
그럼에도 불구하고 IE6,7,8 에도 모두 동일한 결과를 나타냈기 때문에 흡족하였다.

그리고 이를 구성하는 CSS 코드.
보면 생각보다 상당히 간단함을 알 수 있다.


먼저 html, body, form 은 무조건 전체를 지향하며,
이제 Wrap 역시 전체를 지향하였다. 굳이 divWrap 으로 감싼 이유는.. 업무적 특성상인데.. 나중에
비동기 방식등에 대비하여 상당히 유용한 경우가 있다.
이건 사용에 따라 다르니. 테스트로만..ㅋㅋ

그리고 header 는 가로 1000픽셀의 세로 100픽셀. 그리고 상단 0 오른쪽 자동 하단 0 왼쪽 0 으로
margin 을 지정하였다. 쉽게 말해 위에 딱 붙이고 , 가운데 정렬하겠단 말이다.
container 는 가로 100%. 브라우저 끝까지. 세로는 500픽셀로. position 속성은 자신이 배치된 위치를
보존하기 위해 relative 로 지정하였다.
이에 하위 divContents 엘리먼트 역시 가로는 900픽셀로 지정하고 세로는 container 의 세로크기를
모두 상속받기 위해 100% 로 지정하였다.
그리고 위치 역시 가운데. 그리고 position 역시 relative.

이제 내부에 위치한 특정 위치에 엘리먼트들을 배치함이다. 주목할만한 포인트다.
앗. 근데 오타다. margin:0 은 신경쓰지 마사기 바람.
또 캡쳐가 귀찮아서 오타라고 미리 인정함.ㅋㅋ

이에 가로, 세로는 정의되어있고. position 은 absolute. margin 은 보이는 바와 같다.
이렇게 설정했을때 absolute 로 인해 자신이 차지하고 있는 공간은 사라지고 상위 요소 절대지점에
위치하며 그 시점으로 부터에 margin 을 이용하여 원하는 특정위치에 배치가 가능하게 되는것이다.
이게 포인트인것이다. 

일단 위와 같은 테스트를 경험하게 되면 결과를 체험할 수 있을것이다.

'Development > HTML' 카테고리의 다른 글

최고의 HTML 편집기가 궁금합니다.  (0) 2011.11.09
3D로 강력해진 구글 ‘크롬9′ 공개  (0) 2011.02.10
HTML UI 구성  (0) 2010.11.17
UI : 엘리먼트 배치  (0) 2010.11.10
HTML UI :: 세로 100% 설정  (0) 2010.10.29
HTML5의 모든 것  (0) 2010.07.29
작업도중 알아가는 잊고 있었던 부분을 포스팅한다.
문서 UI 를 구성하는 방법중 테이블로 (Table) 구성하는 Grid 접근 방식.
해당 위치에 요소(Element) 를 배치하는 구성요소 방식이 있다.
특별하게 이름지어져 명명된것은 아직까지 없는듯 하다. 
많이 쓰는 명칭으로는 CSS 레이아웃이라고도 하기도 하고. 틀린말도
아니지만.. 그냥 느낌이.. 완전 명확하게 정의되어진것 같은 느낌이 안든다.
엘리먼트 요소를 문서에 배치하는 것이다.
일단 CSS 레이아웃이란 이름으로.
이제 거의 왠만하면 테이블로 UI 를 구성하는 일은 없을것이다.
본래 목적. 순수하게 표로 사용하는게 맞기 때문이다.

테스트 환경 : Google Chrome, IE8, Opera, FF

보통 아래와 같이 버튼 박스를 배치하려 할 경우

 버튼을 구성하는 코드를 다음과 같이 놓았다.


이제 여기서 부터 여러가지 방법이 있을것이다.
내가 본 사례로는
  1. text-align:right
  2. float:left; padding-left:해당크기px
  3. float:right; (이렇게 해서 버튼 코드 위치를 바꾸는 경우도 있었다.)
그래도 되기는 된다. 근데 뭔가 찝찝하다..
만일 이미지로 버튼을 구성해놓고 버튼안에 텍스트를 동적으로 바꿔서 재사용하게 해야 하는 경우,
span 엘리먼트에 float:left 속성을 주어야 하는 경우일때는 
위 1 번방법은 사용불가. 2번은.. 완전 명확하게 UI 사이즈들이 명확하게 정의되어 있을때는 사용이
가능해진다. 근데 항상 반드시 그럴수 있는것만은 아니다. 그리고 브라우저별로 렌더링이 다를경우도
난감해지고. 크로스브라우징이 좀 난감해지는 경우도 있다.
그리고 3번은 개인적으로 정말로 아니라고 본다. 
저대로 작성해놓고 적용시켜 놓고 보면 알 것이다. 이미 알고 있는 사람들도 많을것이고.

그래서 다시 근본적인 UI 구성하는 논리를 생각하면 "요소들의 배치" 이다.
이에 아주 친절한 속성인 margin:0 0 0 auto 을 이용해보자.
대신 그러기엔 위 ButtonBox 엘리먼트에 width 와 height 속성이 지정되어 있어야 한다.
그렇게 작성해보면.. 왠지 작성느낌이 상당히 명시적인 느낌이 든다.
그리고 요소가 배치되는 느낌도 들고.
이미 많이 알고 있는 사람들도 있을것이지만.. 삽질은 피하기 위해서 포스팅을 한다..ㅎㅎ;;

'Development > HTML' 카테고리의 다른 글

최고의 HTML 편집기가 궁금합니다.  (0) 2011.11.09
3D로 강력해진 구글 ‘크롬9′ 공개  (0) 2011.02.10
HTML UI 구성  (0) 2010.11.17
UI : 엘리먼트 배치  (0) 2010.11.10
HTML UI :: 세로 100% 설정  (0) 2010.10.29
HTML5의 모든 것  (0) 2010.07.29

+ Recent posts