본문 바로가기

Internet World/HTML/CSS

[HTML/CSS] 늘어나는 박스 만들기

HTML과 CSS를 이용하여 늘어나는 박스를 만들어 보았습니다. 원리를 간단히 설명 드리자면, 최대로 늘어나고자 하는 크기의 큰 이미지를 만들고 div 앨리먼트를 여러겹으로 겹쳐서 늘어나는 부분의 둥근 모서리가 들어나게 하는 방식 입니다. 말로 아무리 설명해봐야 이해가 잘 안되지요. 그렇다면 직접 한번 볼까요?

<div class="box_v"><div class="box_v">여기에 내용이 들어갑니다.</div></div>

이렇게 두겹으로 마크업을 해주면 두 방향으로 늘어나는 것을 해결 할 수 있습니다. 예를 들어 "좌우" 나 "상하" 같은 두방향 말입니다. padding 을 이용하여 안에 있는 앨리먼트를 약간 밀어내어 모서리의 둥근 배경이 보이게 하는 방식입니다.

div.box_v {width:400px; background:url(box_v.gif) no-repeat left top; padding:20px 0 0 0;}
div.box_v div.box_v {width:360px; background:url(box_v.gif) no-repeat left bottom; padding:0 20px 20px;}

바깥쪽을 싸고 있는 div의 상단에 padding값을 주어 상단의 배경이 노출되게 하고 안쪽의 앨리먼트에 배경 이미지가 아래부터 시작하게 배치하면 위의 모서리와 아래의 모서리가 표현되게 됩니다. 그리 어렵지는 않죠?

좌우로 늘어나는 박스는 약간의 문제점이 있는데 display 속성이 inline 인 것은 컨턴츠에 따라 크기 조절이 가능하지만 height를 지정할 수가 없고, block 속성을 가지고 있는 것들은 기본적으로 100%를 차지하고 있어서 컨텐츠의 크기에 따라 width값을 조절할 수가 없습니다. 그래서 사용한 것이 float, 이 것을 사용하면 두가지 효과를 모두 낼 수 있지만 일반 앨리먼트처럼 사용하려면 조금은 까다롭겠죠?


이제 문제는 사방으로 늘어나는 박스 입니다. 좌우와 상하는 한쪽 고민하면 되지만 사방을 고려하면 머리가 아파집니다. 일단 사방의 모서리를 관리해야하기 때문에 앨리먼트를 4개를 사용하겠습니다. 사용할 수 있는 방법이 두가지가 있습니다.

<div class="box_f"><div class="frame1"></div><div class="frame2"><div class="frame3">이곳에 컨텐츠를 입력하면 됩니다.</div></div></div>

<div class="box_f2"><div class="frame1"><div class="frame2"><div class="frame3">이곳에 컨텐츠를 입력하면 됩니다.</div></div></div></div>

자, 차이가 보이시나요? 두가이 마크업 방법이 있는데, 배경이미지를 다른곳에서도 함께 사용하여 온전한 큰 프레임 이미지 하나를 사용해야 한다면 첫번째 방법을 사용하면 되고, 그것이 아니고 이미지의 편집이 가능하다면 두번째 방법을 사용하여도 무방합니다. 직관적으로 보았을때 두번째 것이 덜 햇갈릴것으로 보입니다. 4개의 div가 순차적으로 싸고 있으니 조금은 이해가 편할듯 싶네요. 이렇게 마크업을 한다음에 CSS를 이용하여 늘어나는 박스를 만들어보면

div.box_f {float:left; background:url(box_f.gif) no-repeat right top;}
div.box_f div.frame1 {background:url(box_f.gif) no-repeat left top; padding:24px 0 0 0; margin:0 24px 0 0;}
div.box_f div.frame2 {background:url(box_f.gif) no-repeat right bottom; padding:0 24px 0 0;}
div.box_f div.frame3 {background:url(box_f.gif) no-repeat left bottom; padding:0 0 24px 24px;}

div.box_f2 {float:left; background:url(box_f2.gif) no-repeat right -24px;}
div.box_f2 div.frame1 {background:url(box_f2.gif) no-repeat left top; padding:24px 0 0 0;}
div.box_f2 div.frame2 {background:url(box_f2.gif) no-repeat right bottom; padding:0 24px 0 0;}
div.box_f2 div.frame3 {background:url(box_f2.gif) no-repeat -24px bottom; padding:0 0 24px 24px;}

코드를 보면 쉽게 이해가 될 것입니다. 두번째 방법에서 -24px를 사용한 이유는


이미지를 이렇게 넣었기 때문입니다. 모서리 한부분을 빼놓아 CSS sprite를 사용하여 배경이미지를 적용하였습니다. 여기 그림에서는 잘 보이지 않지만 상단과 좌측 부분은 투명하게 되어있습니다.




새 새창으로 열어서 창의 크기를 조절해보면 사방으로 늘어나는 박스를 체험해 보실 수 있습니다.

샘플페이지 새창으로 열기
반응형