3. display 속성     -바닥부터 시작하는 CSS-


display 속성이란 태그의 내용(contents)이 어떤 형식으로 화면에 출력이 되는가를 결정하는 속성입니다.

display속성을 알기 위해서는 각각의 태그가 어떤 요소에 속하는지 알아야 하고 각 요소의 특징을 잘 파악하고 있어야

좋은 레이아웃을 만들 수 있게 됩니다.

 

1) block 요소: <div>, <p>, <ul>, <li>, <dl>, <dt>, <dd>, <form>, <header>, <footer>, <section>, <h1>~<h6> 태그 등은 

   기본적으로 block속성을 가지고 있습니다.


block 요소는 기본적으로 아래로 붙여 나가는 특징이 있습니다.

bock 속성은 그 자체로 한 줄을 완전히 차지합니다. 그 다음의 요소는 그 아래에 출력됩니다.


<p>태그는 구문을 표현하는 태그이고 자체적으로 'margin' 값을 가지고 있어서 <p> 태그 사이에는 기본적으로 공백이 발생합니다.

다음은 각 태그에 모양을 정확히 알기 위해서 배경값 또는 경계선을 지정한 예입니다.

 

<p>태그의 예

  1. <html>
  2. <head>
  3. <style>
  4. p {
  5. background: yellow;
  6. }
  7. </style>
  8. </head>
  9. <body>
  10. <p> 요거 첫 번째 문장입니다.</p>
  11. <p>요건 두 번째 문장입니다.</p>
  12. <p>세 번째 문장입니다.</p>
  13. </body>
  14. </html>



<div>태그는 <p>태그와는 다르게 줄 사이에 여백이 없이 붙어서 출력이 됩니다.

border값을 지정할 때는 선의 두께, 스타일, 색깔 순으로 지정을 하고 각각의 값은 공백으로 구분합니다. 쓸데없이 콤마(,)를 쓰는 실수를 하지 마세요.

 

<div>태그의 예

  1. <html>
  2. <head>
  3. <style>
  4. div {
  5. border: 1px solid red;
  6. }
  7. </style>
  8. </head>
  9. <body>
  10. <div> 요거 첫 번째 문장입니다.</div>
  11. <div>요건 두 번째 문장입니다.</div>
  12. <div>세 번째 문장입니다.</div>
  13. </body>
  14. </html>

* block 요소에는 margin, width, height 속성이 적용이 되지만 width값으로 요소의 폭을 줄여도 보이지 않는 margin같은 값이 화면의 가로 폭을 꽉 채워 여전히 다음 요소는 줄 바꿈이 일어납니다.

 

  1. <html>
  2. <head>
  3. <style>
  4. div {
  5. width: 200px;
  6. border: 1px solid;
  7. margin: 5px;
  8. background: yellow;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <div>div태그에 width값을 줘서 길이를 줄여도</div>
  14. <div>여전히 block요소이므로 이 글이 연속되어 출력되지 않고</div>
  15. <div>아래로 줄 바꿈이 일어난다는 말입니다.</div>
  16. </body>
  17. </html>



block 요소인 <div>태그에 height값을 지정한 경우 컨텐츠가 길면 넘치는 문제가 생깁니다.

이때는 overflow 속성을 이용해서 해결할 수 있는데 이 부분은 overflow를 다룰 때 자세히 알아보겠습니다.

 

  1. <html>
  2. <head>
  3. <style>
  4. div {
  5. width: 300px;
  6. height: 50px;
  7. border: 1px solid red;
  8. margin: 5px;
  9. background: yellow;
  10. }
  11. </style>
  12. </head>
  13. <body>
  14. <div>div태그에 내용이 width값 보다 긴 경우에는 아래로 아래로 내려가면서 출력이 되는데 문제는 height값을 줘서 높이에도 제한이 생긴다면 어떻게 출력이 되는감?</div>
  15. </body>
  16. </html>



2) inline 요소: <span>, <a>, <img>, <strong>, <input>, <mark>, <em>, <abbr> 등은 기본값으로 inline 속성이 적용되는 대표적인 태그들입니다.

 

inline 요소는 옆으로 붙여 나가는 특징이 있습니다. 필요한 폭만 가집니다.

* margin-top, margin-bottom 속성은 적용이 안 되고 대신 line-height속성이 적용됩니다.

* width, height 속성은 적용이 안 됩니다. (태그가 품고 있는 내부 요소의 부피에 맞춰 집니다.)

* inline 태그가 연속될 경우 좌우 5px 정도의 외부 여백이 브라우저 기본 설정에 의해 자동으로 만들어 집니다.

* blockinline을 포괄하는 큰 개념이므로 inline 태그 안에 block 태그를 넣으면 문법 오류가 됩니다.

X : <a href=“#”> <p>문장입니다.</p> </a>

O: <p><a href=“#”> <p>문장입니다.</a></p>

 

대표적인 inline 요소인 <span>태그에 widthheight값을 적용해 보면 다음과 같이 아무런 영향이 없습니다.

  1. <html>
  2. <head>
  3. <style>
  4. span {
  5. width: 200px;
  6. height: 20px;
  7. border: 1px solid red;
  8. background: yellow;
  9. }
  10. </style>
  11. </head>
  12. <body>
  13. <span>첫 번째 span</span>
  14. <span>두 번째 span</span>
  15. <span>세 번째 span</span>
  16. </body>
  17. </html>



대표적인 inline태그인 <span>태그에 margin을 지정하면 좌우 마진은 효과가 있습니다.

하지만 상하 마진은 효과가 없어서 <div>의 영역과는 기본적인 간격밖에 보이지 않습니다.

  1. <html>
  2. <head>
  3. <style>
  4. div {
  5. width: 200px;
  6. height: 20px;
  7. border: 1px solid;
  8. background-color: yellow;
  9. padding: 5px;
  10. margin: 10px;
  11. }
  12. span {
  13. width: 200px;
  14. height: 20px;
  15. border: 1px solid;
  16. background-color: lightgreen;
  17. padding: 5px;
  18. margin: 10px;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <div>div태그 1 입니다</div>
  24. <div>div태그 2 입니다</div>
  25. <span>span태그 1 입니다</span>
  26. <span>span태그 2 입니다</span>
  27. <div>div태그 3 입니다</div>
  28. </body>
  29. </html>



두 번째 <span>태그에만 id명을 사용해서 line-height값을 지정한 경우, 첫 번째와는 다르게 간격이 벌어진 것을 볼 수 있지요?

  1. <html>
  2. <head>
  3. <style>
  4. div {
  5. width: 200px;
  6. height: 20px;
  7. border: 1px solid;
  8. background-color: yellow;
  9. padding: 5px;
  10. margin: 10px;
  11. }
  12. span {
  13. width: 200px;
  14. height: 20px;
  15. border: 1px solid;
  16. background-color: lightgreen;
  17. padding: 5px;
  18. }
  19. #span2 {
  20. line-height: 40px;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div>div태그 1 입니다</div>
  26. <span>span태그 1 입니다</span>
  27. <div>div태그 2 입니다</div>
  28. <span id="span2">span태그 2 입니다</span>
  29. <div>div 2</div>
  30. </body>
  31. </html>



만약에 block 요소인 <div>inline 속성으로 바꾸거나 <span>block 속성으로 바꾸려고 한다면 CSSdispaly 속성을 바꿔 주면 됩니다.

  1. <html>
  2. <head>
  3. <style>
  4. div {
  5. width: 200px;
  6. height: 20px;
  7. border: 1px solid;
  8. background: lightgreen;
  9. padding: 5px;
  10. margin: 10px;
  11. display: inline;
  12. }
  13. span {
  14. width: 260px;
  15. height: 20px;
  16. border: 1px solid;
  17. background: yellow;
  18. padding: 5px;
  19. margin: 10px;
  20. display: block;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div>display: inline 을 지정한 div태그 1</div>
  26. <div>display: inline 을 지정한 div태그 2</div>
  27. <span>display: block 을 지정한 span태그 1</span>
  28. <span>display: block 을 지정한 span태그 2</span>
  29. </body>
  30. </html>


 

3) inline-block:

inline 속성을 가진 태그에 widthheight값을 주려고 할 때 사용하는 것이 inline-blick 속성입니다.

기본 값으로 inline-block 속성을 가진 태그는 없습니다. CSS에서 {display: inline-bock;} 으로 속성 값을 바꾸어 주어야 합니다.

<div>를 왼쪽부터 오른쪽으로 붙여 나가려면 inline-block속성으로 바꾸거나 float:left;로 바꾼다. (float 속성 배우기)

이렇게 속성을 바꾸면 <div> 영역이 가로로 붙어 나가다가 자리가 모자라면 아래로 내려갑니다.

 

* margin, width, height 속성을 적용할 수도 있고 line-height속성도 적용 가능합니다.

* 기본적으로 태그가 품고 있는 내부요소의 부피에 맞춰 지지만 widthheight를 지정해서 원하는 크기로 변경 시킬 수도 있습니다.

* inline-block 연속될 경우 역시 5px정도의 여백이 자동으로 생성됩니다.

(, ie7 이하는 지원하지 않는데 *display:inline; zoom:1; 속성을 지정하면 inline-block 요소처럼 사용할 수 있습니다.)

  1. <html>
  2. <head>
  3. <style>
  4. span {
  5. width: 300px;
  6. height: 100px;
  7. border: 1px solid;
  8. background: lightblue;
  9. padding: 5px;
  10. display: inline-block
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <span>span태그에 inline-block을 지정했더니 폭과 높이 값이 지정되네. </span>
  16. <span>span태그에 inline-block을 지정했더니 폭과 높이 값이 지정되네. </span>
  17. </body>
  18. </html>

 


4) none:

display: none;을 지정하면 해당 요소는 화면에서 사라집니다. 자취도 없이......

있어야 할 자리도 남기지 않습니다. 그래서 나타났다 사라지는 메뉴 등을 만들 때 사용되기도 합니다.

 

이와는 다르게 {visibility: hidden;}라는 것은 visibility 속성을 hidden으로 바꿔 주는데 화면에는 보이지 않지만 그 위치는 빈 공간으로 남게 됩니다.

visibility의 속성값은 기본으로 visible이 지정되어 있고 hidden, collapse(IE에서만 적용 됨) 등이 있습니다.

 

화면에 두 개의 박스를 출력한 경우.

  1. <html>
  2. <head>
  3. <style>
  4. #div1 {
  5. width: 50px;
  6. height: 50px;
  7. border: 1px solid;
  8. background: lightblue;
  9. }
  10. #div2 {
  11. width: 50px;
  12. height: 50px;
  13. border: 1px solid;
  14. background: lightgreen;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <div id="div1">첫 번째 div 영역</div>
  20. <div id="div2">두 번째 div 영역</div>
  21. </body>
  22. </html>

 


첫 번째 영역을 display:none;으로 설정 한 경우.

  1. <html>
  2. <head>
  3. <style>
  4. #div1 {
  5. width: 100px;
  6. height: 100px;
  7. border: 1px solid;
  8. background: lightblue;
  9. display: none;
  10. }
  11. #div2 {
  12. width: 100px;
  13. height: 100px;
  14. border: 1px solid;
  15. background: lightgreen;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div id="div1">첫 번째 div 영역</div>
  21. <div id="div2">두 번째 div 영역</div>
  22. </body>
  23. </html>

첫 번째 영역이 보이지도 않고 자리도 남아있지 않아서 두 번째 영역이 위로 차고 올라가 있습니다.



첫 번째 영역을 visibility:hidden;으로 한 경우.

  1. <html>
  2. <head>
  3. <style>
  4. #div1 {
  5. width: 100px;
  6. height: 100px;
  7. border: 1px solid;
  8. background: lightblue;
  9. visibility: hidden;
  10. }
  11. #div2 {
  12. width: 100px;
  13. height: 100px;
  14. border: 1px solid;
  15. background: lightgreen;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div id="div1">첫 번째 div 영역</div>
  21. <div id="div2">두 번째 div 영역</div>
  22. </body>
  23. </html>


첫 번째 영역이 보이지는 않지만 자리는 남아 있습니다. 

두 번째 영역은 보이지 않는 첫 번째 영역에 밀려서 아래쪽에 출력됩니다.



자 이렇게 해서 display의 속성을 알아 보았습니다. 다음은 float을 용한 정렬방법을 알아 보겠습니다.





Posted by star story :

Snippet :: Code View :: "+location.href+'
'+b+"

");top.consoleRef.document.close()}$(".snippet-container").each(function(b){$(this).find("a.snippet-text").click(function(){var d=$(this).parents(".snippet-wrap").find(".snippet-formatted");var c=$(this).parents(".snippet-wrap").find(".snippet-textonly");d.toggle();c.toggle();if(c.is(":visible")){$(this).html("html")}else{$(this).html("text")}return false});$(this).find("a.snippet-window").click(function(){var c=$(this).parents(".snippet-wrap").find(".snippet-textonly").html();a(c);$(this).blur();return false})});$(".snippet-toggle").each(function(b){$(this).click(function(){$(this).parents(".snippet-container").find(".snippet-wrap").toggle()})})});