Frontend/CSS

17. table, flex

예린lynn 2024. 7. 6. 01:59
728x90

 

1. table

display 속성 값을 table, table-row 등을 사용해서, 마치 <table> 태그를 사용하는 것과 비슷하게 HTML 태그를 작성할 수 있다.

  • table : <table> 태그처럼 사용
  • table-header-group: <thead> 태그처럼 사용
  • table-row-group: <tbody> 태그처럼 사용
  • table-footer-group: <tfoot>  태그처럼 사용
  • table-row: <tr>  태그처럼 사용
  • table-cell: <td>, <th>  태그처럼 사용

- 활용 코드

    <style>
      .display-table {
        /* <table> 요소처럼 표현됨 */
        display: table;
        width: 100%;
      }

      .display-tb-header {
        /* <thead> 요소처럼 표현됨 */
        display: table-header-group;
      }

      .display-tb-body {
        /* <tbody> 요소처럼 표현됨 */
        display: table-row-group;
      }

      .display-tb-row {
        /* <tr> 요소처럼 표현됨 */
        display: table-row;
      }

      .display-tb-cell {
        /* <td>, <th> 요소처럼 표현됨 */
        display: table-cell;
      }
    </style>

  <body>
    <div class="display-table">
      <div class="display-tb-header">
        <div class="display-tb-row">
          <div class="display-tb-cell">A</div>
          <div class="display-tb-cell">B</div>
          <div class="display-tb-cell">C</div>
        </div>
      </div>

      <div class="display-tb-body">
        <div class="display-tb-row">
          <div class="display-tb-cell">A1</div>
          <div class="display-tb-cell">B1</div>
          <div class="display-tb-cell">C1</div>
        </div>
        <div class="display-tb-row">
          <div class="display-tb-cell">A2</div>
          <div class="display-tb-cell">B2</div>
          <div class="display-tb-cell">C2</div>
        </div>
        <div class="display-tb-row">
          <div class="display-tb-cell">A3</div>
          <div class="display-tb-cell">B3</div>
          <div class="display-tb-cell">C3</div>
        </div>
      </div>
    </div>
    </body>

 

- 실행 결과

A
B
C
A1
B1
C1
A2
B2
C2
A3
B3
C3

 

 

2. flex

flexbox는 웹 화면의 공간 분할과 콘텐츠가 담길 공간의 크기 및 배분, 그리고 콘텐츠에 대한 배치 순서를 쉽게 정의할 수 있도록 해준다. 

flexbox를 구성하는 두 개의 축인 주축(main axis)과 교차축(cross axis)을 기준으로 레이아웃을 정할 수 있다.

 

flex-direction

  • row: 아이템 배치 방향이 왼쪽에서 오른쪽으로
  • row-reverse: 아이템 배치 방향이 오른쪽에서 왼쪽으로
  • column: 아이템 배치 방향이 위에서 아래로
  • column-reverse: 아이템 배치 방향이 아래에서 위로

-활용 코드

    <style>
      .container {
        display: flex;
        flex-direction: row;
        border: 3px dotted black;
      }

      .item {
        width: 150px;
        border: 2px solid blue;
        background-color: greenyellow;
        text-align: center;
      }
    </style>

  <body>
    <div class="container">
      <div class="item">A</div>
      <div class="item">B</div>
      <div class="item">C</div>
    </div>
  </body>

 

- 실행 결과

A
B
C

 

 

flex-wrap

플렉스 컨테이너 너비보다 많은 플렉스 항목이 있을 경우 줄을 바꿀지 여부를 지정한다.

속성값으로 wrap이나 wrap-reverse로 지정하고 웹 브라우저 화면의 너비를 늘리거나 줄이면,

플렉스 컨테이너의 너비에 따라 여러 줄로 표시된다.

  • nowrap: 기본값: 플렉스 항목을 한 줄에 표시
  • wrap: 플렉스 항목을 여러 줄에 표시
  • wrap-reverse: 플렉스 항목의 숫자를 바꿔서 여러 줄에 표시. 시작점과 끝점이 바뀐다.

- 활용 코드

    <style>
      .container {
        display: flex;
        flex-direction: row;
        border: 3px dotted black;

        flex-wrap: wrap;
      }

      .item {
        width: 150px;
        border: 2px solid blue;
        background-color: greenyellow;
        text-align: center;
      }
    </style>

  <body>
    <div class="container">
      <div class="item">A</div>
      <div class="item">B</div>
      <div class="item">C</div>
      <div class="item">D</div>
      <div class="item">E</div>
    </div>
  </body>

 

- 실행 결과

A
B
C
D
E

 

 

flex-flow

  • flex-direction과 flex-wrap 속성을 한꺼번에 지정한다.
  • 기본값: row nowrap
flex-flow: row wrap;  //왼쪽에서 오른쪽, 여러 줄
flex-flow: row nowrap;  //왼쪽에서 오른쪽, 한 줄

 

 

justify-content

주축에서 플렉스 항목 간의 정렬 방법을 지정한다.

  • flex-start: 시작점에 맞춰 배치   ex) row인 경우는 왼쪽, row-reverse인 경우는 오른쪽부터
  • flex-end: 끝점에 맞춰 배치
  • center: 중앙에 맞춰 배치
  • space-between: 첫 번째 항목과 끝 항목을 주축의 시작점과 끝점에 배치한 후, 나머지 항목은 그 사이에 같은 간격으로 배치
  • space-around: 모든 항목을 주축에 같은 간격으로 배치
  • space-evenly: 항목 사이와 시작점과 끝점의 간격을 균일하게 배치

- 활용 코드

    <style>
      .container {
        display: flex;
        flex-direction: row;
        border: 3px dotted black;

        justify-content: space-between;
      }

      .item {
        width: 30px;
        border: 2px solid blue;
        background-color: greenyellow;
        text-align: center;
      }
    </style>

  <body>
    <div class="container">
      <div class="item">A</div>
      <div class="item">B</div>
      <div class="item">C</div>
    </div>
  </body>

 

- 실행 결과

A
B
C
728x90