개인공부

CSS(박스모델,float,clear)

stella0905 2023. 3. 23. 23:54

박스모델 (Box - Model)

브라우저가 요소를 렌더링 할 때, 각각의 요소는 기본적으로 사각형 형태로 영억을 차지하게 된다. 이영역을 ‘박스’라 표현하며, css는 박스의 크기, 위치, 속성(색, 배경, 테두리 모양 등)을 결정할 수 있다.

하나의 박스는 다음 네 개의 영역으로 구성된다.

  • 콘텐츠 영역 : width, height
  • 안쪽 여백 : padding
  • 바깥쪽 여백 : margin
  • 경계선 (테두리) : border-width

padding과 margin

다양한 경우의 수

여백은 상하좌우 네 개의 면에 존재하는 영역이다.

 

하위속성 정의하기

padding-top,padding-left, padding-right, padding-bottom

 

여러 값을 한 번에 정의하기

padding: 20px  
상, 하, 좌, 우 20px처럼 들어감.

padding: 10px 20px 
상,하 10px  좌,우 20px

padding: 10px 30px 20px
상 10px 좌,우 30px 하 20px

padding : 10px 20px 30px 40px
상 10px, 우 20px, 하 30px, 좌 40px
(시계방향 순서)

 

박스의 크기

<style>
      div {
        width: 100px;
        height: 100px;
        border: 5px solid tomato;
        padding: 10px 20px;
      }
    </style>
  </head>
  <body>
    <div></div>

이처럼 div에 너비 100px , 높이 100px 로 줬지만 테두리 5px과 padding 값을 주게되어

이렇게 div의 크기는 150 * 130이 된다.

이렇게 박스의 크기를 결정할때 테두리, 패딩값으로 인해 크기를 생각하면서 결정해야한다.

이를 대비하기 위한 box-sizing이 있다.

box-sizing

요소의 너비와 높이를 계싼하는 방법을 지정한다.

 

content-box

기본값, 너비와 높이가 콘텐츠 영역만을 포함한다.

 

border-box

너비와 높이가 안쪽 여백과 테두리까지 포함한다.

width값에 전체크기가 맞춰진다. 패딩값을 아무리 많이주더라도 div는 width, height는 100px은 유지한체

콘텐츠영역만 줄어든다.

너비와 높이가 같더라도, box-sizing속성값에 따라 크기가 달라질 수 있다.

 

background

배경은 콘텐츠의 배경을 정의한다.

단축속성으로써 색상, 이미지, 반복 등 다양한 하위 속성을 정의할 수 있다.

 

background-color

배경 색을 정의한다.

 

background-image

배경 이미지를 정의한다.

 

background-position

배경 이미지의 초기 위치를 정의한다.

속성 : top, bouttom, left, right, center

 

background-size

배경 이미지의 크기를 정의한다.

background-size: cover;
이미지의 비율이 깨지지않는 상태에서 최대사이즈로 나타난다.
background-size: contain;
이미지가 찌그러지거나 잘리지않는 한도내에서 최대사이즈

 

 

background-repeat

배경 이미지의 반복 방법을 정의한다.

background-repeat:no-repeat;
이미지가 반복하지 않고 한번만 나오게 한다.

 

하나씩 지정해주지 않아도 한번에 정의할 수 있다.

background: blue no-repeat contain;

순서는 상관없고 정확히 정의만 해주면 적용이 된다.

 


float

요소가 문서의 일반적인 흐름에서 제외되어 자신을 포함하고 있는 컨테이너의 왼쪽이나 오른쪽에 배치되게 한다.

none - 기본값, 원래 상태

left - 자신을 포함하고 있는 박스의 왼편에 떠 있어야 함

right - 자신을 포함하고 있는 박스 오른편에 떠 있어야 함.

⇒ 문서의 흐름에선 제외되지만 필요한 만큼의 공간은 차지한다.

<style>
      #a {
        width: 100px;
        height: 50px;
        background-color: orange;
        float: right;
      }
      #b {
        width: 100px;
        height: 100px;
        background-color: blue;
        float: left;
      }
    </style>
  </head>
  <body>
    <div id="a"></div>
    <div id="b"></div>
    <p>저는 세번째 태그에요</p>
  </body>

이처럼 문서흐름에서 제외되고 지정한 위치에 보여지며 마지막 p태그는 left로 지정한 id: b인 div옆에 나타나게 된다.

 


clear

float요소 이후에 표시되는 요소가 float을 해제(clear)하여 float 요소의 아래로 내려가게 할 수 있다.

none - 기본값, 아래로 이동되지 않음을 나타내는 키워드

left - float이 left인 요소의 아래로 내려가겠다.

right - float이 right인 요소의 아래로 내려가겠다.

both - float이 leat 및 right인 요소의 아래로 내려가겠다.

⇒ clear: both; 사용하면 한번에 해결

<style>
      #a {
        width: 100px;
        height: 50px;
        background-color: orange;
        float: right;
      }
      #b {
        width: 100px;
        height: 100px;
        background-color: blue;
        float: left;
      }
      p {
        clear: right;
        /* right요소보다 아래에서 시작된다. */
      }
    </style>
  </head>
  <body>
    <div id="a"></div>
    <div id="b"></div>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
  </body>

<style>
      #a {
        width: 100px;
        height: 50px;
        background-color: orange;
        float: right;
      }
      #b {
        width: 100px;
        height: 100px;
        background-color: blue;
        float: left;
      }
      p {
        clear: both;
      }
    </style>
  </head>
  <body>
    <div id="a"></div>
    <div id="b"></div>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
    <p>저는 세번째 태그에요</p>
  </body>