CSS 레이아웃 - Position과 Block 정리

2022. 10. 23. 22:42·◼ FrontEnd/Web & HTML, CSS
반응형

CSS 레이아웃의의 중요한 개념인 Position과 Block에 대해 정리해보고자 한다.

참고로 말로 풀어서 글처럼 작성하지 않고, 항목별로 개념을 분류하여 정리하였다.

 

 

CSS - Display 속성 : Block과 Inline

 

  • CSS의 display 속성은 화면에 여러 요소들을 어떻게 배치할 지 결정한다.
  • 웹페이지의 레이아웃(layout)을 결정한다고 해도 무방하다.
div {
  display: block;
}

 

✨ Block VS Inline

  • Block
    • block 태그 옆엔 다른 요소가 올 수 없다.
    • block은 높이(height)와 너비(width)를 가진다.
    • block은 Box이고, 여백과 관련된 3가지 중요한 특징을 가진다.(inline도 가지고 있는 특징이다. 상하 margin만 제외하고)
    • : margin, border, padding
    • Block 속성을 갖는 HTML 요소 : <div>, <p>, <address>, ..
    • Block 속성을 갖는 HTML 요소는 width 속성을 부여하지 않으면 기본적으로 화면 크기의 좌우 끝 전체를 차지한다.

 

  • Inline
    • inline 태그 옆에 다른 요소가 올 수 있다.
    • inline은 ✨높이(height)와 너비(width)를 가질 수 없다.
      • 따라서 ✨위, 아래에 margin을 가지지 않는다.
      • (가지도록 하려면 display 속성을 inline-block으로 바꾸어야 한다)
    • Inline 속성을 갖는 HTML 요소 : <span>, <a>, <img>, ..

 

여백과 관련된 속성 1 : margin

  • margin은 요소의 경계(border)의 바깥에 있는 영역이다.
  • block과 inline 요소 모두 가지고 있는 특징이나, inline은 상하에 margin을 가지지 않는다.
div {
  margin: 20px; /* 전방향 */
  margin: 20px 15px; /* 상하 좌우 */
  margin: 20px 5px 15px 10px; /* 상 우 하 좌 */
  
  margin-top: 20px;
  margin-bottom: 15px;
  margin-right: 5px;
  margin-left: 10px;
}

 

  • margin에 auto 값을 주면 요소를 해당 방향의 중앙에 배치시킬 수 있다.
 /* 요소를 가로 방향 기준으로 중앙에 배치 */
.center {
  margin: 0px auto;
 }

 

  • user agent stylesheet :
    • 이를 없에려면 Reset CSS를 적용해주면 된다.
  • 브라우저가 기본적으로 부여한 style 속성
    ex) body { margin : 8px; }

 

  • Collasping Margins :
    • 위, 아래에서만 일어난다.
  • box 요소의 경계가 부모 box 요소의 경계와 일치하면, 이 두 margin이 하나로 취급되는 현상

 

여백과 관련된 속성 2 : padding

  • padding은 box의 경계(border)로부터 안쪽에 있는 영역이다.
  • block과 inline 요소 모두 가지고 있는 특징이다.
div {
  padding: 20px; /* 전방향 */
  padding: 20px 15px; /* 상하 좌우 */
  padding: 20px 5px 15px 10px; /* 상 우 하 좌 */

  padding-top: 20px;
  padding-bottom: 15px;
  padding-right: 5px;
  padding-left: 10px;

  /* 규칙은 margin과 동일하다. */
}

 

여백과 관련된 속성 3 : border

  • border은 말 그대로 박스의 '경계'이다.
  • block과 inline 요소 모두 가지고 있는 특징이다.
  • border 스타일 종류 확인하기 (MDN 문서)
div {
  border: 1px solid black; /* border: 너비 스타일 색깔 */ 
}

span {
  border: 2px dotted blue;
}

 

  • border은 다양한 속성값이 존재하나 대부분 이쁘지 않으므로 거의 한 종류만 쓴다.

 

또 하나의 Display 속성 : Inline-block

  • inline-block은 높이와 너비를 가지는 동시에, 바로 옆에 다른 요소가 올 수 있는 display 속성이다.
div {
  display: inline-block;
}

 

  • 그러나 많은 문제점을 가지고 있으므로 사용을 지양한다.
    • 【문제점 1】 정해진 형식이 없고, inline-block 요소들 사이에 의미불명한 빈 공간이 생긴다.
    • 【문제점 2】 반응형 디자인(Responsive Design)을 자원하지 않는다.
      • 창 크기가 달라지면 영향을 받는다.



 

CSS - Position

  • CSS의 position 속성은 HTML 요소의 위치 설정 방식을 결정한다.

 

Position 속성 1 : Fixed

  • fixed 요소는, 스크롤을 내려도 계속 처음 그 자리에 위치한다.
  • top, bottom, left, right 속성 중 하나라도 수정 시, 해당 요소는 초기 위치가 무시되고, 앞 쪽의 레이어로 넘어간다.
div {
  position: fixed;
  top: 20px;
  right: 15px;
}



Position 속성 2 : Static

  • static 요소는 Default(초기)값이다.
  • 요소의 위치를 지정하지 않는다.
div {
  position: static;
}



Position 속성 3 : Relative

  • relative 요소는, 처음 위치하는 곳을 기준으로 top, bottom, left, right 속성의 값만큼 위치를 (미세하게) 이동한다.
div {
  position: relative;
  top: 10px;
  right: 20px;
  /* 처음 위치를 기준으로 위로 10px, 오른쪽으로 20px 이동 */
}



Position 속성 4 : Absolute

  • ✨ absolute 요소는, 가장 가까운 relative 부모의 영역을 기준으로 top, bottom, left, right 속성을 통해 요소를 배치한다.
    • 이때, relative처럼 요소를 (미세하게) 이동하는 것이 아니라,
    • 부모 요소의 영역 안에서, 각 방향의 맨 끝부터 top, bottom, left, right 속성값만큼 떨어진 곳에 요소를 배치하는 것이다.

 

  • ✨ 만일 부모 중에 relative 요소가 없으면, absoulte 요소는 body를 기준으로 삼는다.
    • (부모 중에 position이 relative, fixed, absolute인 요소가 하나라도 있으면 그 부모가 기준이 된다)

 

  • 코드 예시
div {
  width: 300px;
  height: 300px;
  background-color: wheat;
  position: relative;
}

div > div {
  /* 가장 가까운 relative 부모(div)의 영역을 기준으로, 맨 아래에서 10px, 맨 우측에서 20px 떨어진 곳에 배치 */ 
  position: absolute;
  bottom: 10px;
  right: 20px;
  
  width: 100px;
  height: 100px
  background-color: teal;
}

 

  • 이 때, 해당 위치에 다른 요소가 있을 경우, 뒤로 밀리지 않고 덮어쓰게 된다.

 

  • 어떤 Block 요소가 absolute 값을 갖게 되면, 크기를 지정하지 않아도 내용의 크기만큼만이 요소의 크기가 된다.

 

반응형

'◼ FrontEnd > Web & HTML, CSS' 카테고리의 다른 글

[Web] CSR과 SSR이란 무엇일까?  (0) 2023.05.03
[NodeJS] Node JS & NPM 소개 및 설치  (0) 2023.01.22
Semantic Tag (시멘틱 태그) 를 사용하여 웹 개발을 해야하는 이유  (0) 2022.10.23
개발자 도구란 무엇인가?  (0) 2022.10.23
주소창에 naver.com을 치면 일어나는 일을 쉽게 이해해보자  (0) 2022.09.14
'◼ FrontEnd/Web & HTML, CSS' 카테고리의 다른 글
  • [Web] CSR과 SSR이란 무엇일까?
  • [NodeJS] Node JS & NPM 소개 및 설치
  • Semantic Tag (시멘틱 태그) 를 사용하여 웹 개발을 해야하는 이유
  • 개발자 도구란 무엇인가?
SangYoonLee (SYL)
SangYoonLee (SYL)
Slow, But Steady Wins The Race 😎
    반응형
  • SangYoonLee (SYL)
    ◆ Slow, But Steady ◆
    SangYoonLee (SYL)
  • 전체
    오늘
    어제
    • ◻ 전체 글 수 : (132) N
      • ✪ 취미, 경험 회고 및 일상 (26)
        • [취미] Room Escape (2)
        • [회고] IT 관련 경험 회고 (18)
        • [일상] 일상 생각 (4)
        • [일상] 독후감 (1)
      • ◼ FrontEnd (30) N
        • Web & HTML, CSS (9) N
        • JavaScript (4)
        • TypeScript (1)
        • ReactJS (16)
      • ◼ CS (3)
        • 자료구조 & 알고리즘 (1)
        • 컴퓨터 구조 (1)
        • 운영체제 (1)
      • ◼ PS Note (40)
        • 백준 (38)
        • 프로그래머스 (2)
      • ◼ IT Etc. (33)
        • (Until 2021) (21)
        • Python (6)
        • C | C# | C++ (1)
        • Git (1)
        • Unity (4)
        • Game Dev. (0)
  • 블로그 메뉴

    • 홈
    • 💻 GitHub
    • 🟢 Velog
    • 🧩 온라인 방탈출 출시 작품 모음
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    백준
    C++
    프로젝트
    코드숨
    1929
    React
    위코드
    프로그래머스
    주간 회고
    미궁 게임
    회고
    소수 구하기
    알고리즘
    유니티
    Cpp
    CodeSoom
    리엑트
    wecode
    pygame
    unity
    JavaScript
    Component
    코딩 일기
    더라비린스
    Python
    파이썬
    후기
    개인 프로젝트
    방탈출고사
    관심사의 분리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
SangYoonLee (SYL)
CSS 레이아웃 - Position과 Block 정리
상단으로

티스토리툴바