Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

Inflearn Egoing) 섹션 4. 레이아웃 기본 - inline, block level, box model, box-sizing, 마진 겹침, 포지션 본문

HTML & CSS/생활코딩 - CSS 기본부터 활용까지

Inflearn Egoing) 섹션 4. 레이아웃 기본 - inline, block level, box model, box-sizing, 마진 겹침, 포지션

끈기JK 2022. 9. 14. 08:21

■ inline vs block level

 

화면 한줄 다 쓰는 태그 : block level element

자기 영역만 쓰는 태그 : inline element

    <style>
      h1,a{border: 1px solid red;}
    </style>
  </head>
  <body>
    <h1>Hello world</h1>
    안녕하세요. <a href="https://opentutorials.org">생활코딩</a>입니다.
  </body>

 

inline을 block으로 바꿀 수 있음

: display: inline or block

      h1{display: inline;}
      a{display: block}

 


 

■ box model

Microsoft CSS Usage에서 CSS 사용 빈도수 확인

 

border: box 경계선. box 모델 크기 보기위해 사용됨

padding: box 모델 안쪽 간격

margin: box 모델 바깥쪽 간격

width: box 모델 너비

height: box 모델 높이

*inline에서는 width, height 값이 무시된다.

    <style>
      p, a{
        border: 10px solid red;  /* border-width, border-style, border-color 표현 가능 */
        padding: 20px;
        margin: 40px;
        width: 120px;
      }
    </style>
  </head>
  <body>
    <p>
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </p>
    <p>
      Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    </p>
    안녕하세요.<a href="https://a.com">생활코딩</a>입니다.
  </body>

 


 

■ box-sizing

 

-아래와 같이 border 크기 + width 크기로 box 크기가 결정된다.

    <style>
      div{
        margin: 10px;
        width: 150px;
      }
      #small{
        border: 10px solid black;
      }
      #large{
        border: 30px solid black;

      }
    </style>
  </head>
  <body>
    <div id="small">Hello</div>
    <div id="large">Hello</div>
  </body>

 

여기서 box-sizing: border-box 코드 사용하면 box 크기를 제한할 수 있다.

 · content-box는 기본 CSS 박스 크기 결정법을 사용합니다. 요소의 너비를 100 픽셀로 설정하면 콘텐츠 영역이 100 픽셀 너비를 가지고, 테두리와 안쪽 여백은 이에 더해집니다.
 · border-box는 테두리와 안쪽 여백의 크기도 요소의 크기로 고려합니다. 너비를 100 픽셀로 설정하고 테두리와 안쪽 여백을 추가하면, 콘텐츠 영역이 줄어들어 총 너비 100 픽셀을 유지합니다. 대부분의 경우 이 편이 크기를 조절할 때 쉽습니다.

      div{
        margin: 10px;
        width: 150px;
        box-sizing: border-box;  /* 추가 */
      }

 


 

■ 마진 겹침

 

위 box 아래 margin과 아래 box 위 margin이 서로 겹친다.

    <style>
      h1{
        border: 1px solid red;
        margin: 100px;
      }
    </style>
  </head>
  <body>
    <h1>Hello world</h1>
    <h1>Hello world</h1>
  </body>

 

 

■ 마진 겹침2

 

부모 element가 시각적 요소가 없는 투명한 상태일 때, 자식 element의 margin 값은 부모의 margin값과 자식의 margin값 중 큰 값을 갖는다.

  <style>
    #parent{
      border: 1px solid tomato;
      margin-top: 100px;
    }
    #child{
      background-color: powderblue;
      margin-top: 50px;
    }
  </style>
</head>
<body>
  <div id="parent">
    <div id="child">
      Hello world
    </div>
  </div>
</body>

 

위 코드에서 부모 element의 border 코드를 지우면(투명한 상태가 되면), 부모 element의 margin이 적용되지 않는다.

 

부모 element maring: 100px 일 때, 자식 element margin 증가시 100px 이상부터 margin 증가

 

자식 element margin: 50px 일 때, 부모 element margin 감소시 50px 전까지 margin 감소

 

 

■ 마진 겹침3

 

두 개의 <div> 태그가 동등 위치일 때

  <style>
    #empty{
      margin-top: 50px;
      margin-bottom: 100px;
      /* border: 1px solid tomato; */
    }
    #normal{
      background-color: powderblue;
      margin-top: 100px;
    }
  </style>
</head>
<body>
  <div id="empty"></div>
  <div id="normal">normal</div>
</body>

 

시각적 요소가 없는 #empty의 margin-top은 #normal의 margin-top의 값인 100px이 넘어야 증가한다.

 

시각적 요소가 없는 #empty의 margin-bottom은 #normal의 margin-top의 값인 100px 넘어야 증가한다.

→ 솔직히 이해가 잘 안간다

 


 

■ 포지션(position) -relative vs static

 

-모든 element 기본 position: static

-position 우선순위

left>right

top>bottom

static 기준 없음 (배치 불가능 / 기본값)
relative 요소 자기 자신을 기준으로 배치
absolute 부모(조상) 요소를 기준으로 배치
fixed 뷰포트 기준으로 배치
stickey 스크롤 영역 기준으로 배치
    <style>
      html{border: 1px solid gray;}
      div{
        border: 5px solid tomato;
        margin: 10px;
      }
      #me{
        position: relative;  /* 해당 코드에 따라 위치 변화 */
        left: 100px;
        top: 100px;
      }
    </style>
  </head>
  <body>
    <div id="other">other</div>
    <div id="parent">
      parent
      <div id="me">me</div>
    </div>
  </body>

 

#me의 position: static 일 때

#me의 position: relative 일 때

 

■ 포지션(position) - absolute

 

position: absolute 로 하면 웹브라우저 좌상단 점을 기준으로 절대 위치를 잡는다.

    <style>
      #parent, #other{
        border: 5px solid tomato;
      }
      #me{
        background-color: black;
        color: white;
        position: absolute;
        left: 0;
        top: 0;
      }
    </style>
  </head>
  <body>
    <div id="other">other</div>
    <div id="parent">
      parent
      <div id="me">me</div>
    </div>
  </body>

 

자식의 position이 absolute일 때, static이 아닌 부모가 나타날때 그 위치를 기준으로 잡는다.

    <style>
      #parent, #other, #grand{
        border: 5px solid tomato;
      }
      #grand{
        position: relative;
      }
      #me{
        background-color: black;
        color: white;
        position: absolute;
        left: 0;
        top: 0;
      }
    </style>
  </head>
  <body>
    <div id="other">other</div>
    <div id="grand">
      grand
      <div id="parent">
        parent
        <div id="me">me</div>
      </div>
    </div>
  </body>

 

 

■ 포지션(position) - fixed

 

position: fixed 는 스크롤 해도 위치가 고정된다.

    <style>
    body{
      padding-top: 30px;
    }
      #parent, #other{
        border: 5px solid tomato;
      }
      #me{
        background-color: black;
        color: white;
        position: fixed;
        left: 0;
        top: 0;
        width: 100%;
        height: 30px;
        text-align: center;
      }
      #large{
        height: 10000px;
        background-color: tomato;
      }
    </style>
  </head>
  <body>
    <div id="other">other</div>
    <div id="parent">
      parent
      <div id="me">me</div>
    </div>
    <div id="large">large</div>
  </body>