CSS float: center 구현 방법


float: center 구현: 가운데 정렬

[ CSS 목차 보기 ]

아래처럼 레드박스를 가운데 정렬을 하고 싶다. float: center를 입력하면 저렇게 자동적으로 처리되면 좋을 것 같지만, float 프로퍼티는 center 라는 속성값을 가지지 않는다. 어떻게 하면 아래와 같이 block 속성을 가지는 div 레드박스를 한 줄로 넣고, 가운데 정렬을 할 수 있을까?

1
2
3
4
5
6
7
8

이를 구현할 수 있는 여러가지 방법이 있는데, 이번 포스트에서는 가장 기본적인 방법인 테두리선 가이드 전략으로 구현해볼 생각이다. 다양한 방법으로 구현 가능하지만, 몇몇 기능들은 하위 브라우저 버젼에서는 동작하지 않는다. 따라서 모든 브라우저 버젼에서 동작할 수 있는 기본 방법을 소개하고자 한다.

기본 아이디어

기본 구현방법은 먼저 아래 왼쪽의 HTML 구조를 오른쪽과 같이 바꾸는 것이다. 레드박스들과 백그라운드 요소 사이에 1개의 레이어 요소를 만든다. 이 레이어들의 class를 center로 설정하겠다. 먼저 .center 요소[참고 3. 클래스 선택자]오른쪽 테두리선을 백그라운드 요소의 중앙에 정렬을 시킬 것이다. 그런 다음 레드박스 요소들의 중앙을 .center 요소 오른쪽 테두리선으로 옮겨주면, 백그라운드의 가운데 정렬이 가능하다. 말로 설명하는 게 더 어려움으로 아래에 구현 과정을 차근차근 보자

백그라운드
레드박스들
레드박스들
백그라운드
.center
레드박스들
.center
레드박스들

1. 기본 구현

먼저 아래 결과의 기본적인 형태를 작성해보자.

1
2
3
4
5
6
7
8

  • HTML 기본 구조
    백그라운드로 div#container (line 1)를 둔다.[참고4. ID 선택자] 그리고 그 밑에 div.center (line 2와 line 12)를 두고, 그 아래 div.red-boxes을 둔다. div.red-boxes 아래에는 실제 레드박스 div.box들이 배치되어 지는데, float: left를 이용하여 가로 배열시킬 것이다.[참고 5. float: left] 그리고 div.clear (line 7, line 10, line 19, line 22)를 통해 영역분리를 시켜준다.[참고 1. clear: both로 영역분리]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<div id=“container”>
  <div class=“center”>
    <div class=“red-boxes”>
      <div class=“box”>1</div>
      <div class=“box”>2</div>
      <div class=“box”>3</div>
      <div class=“clear”></div>
    </div>
  </div> 
  <div class=“clear”></div>
 
  <div class=“center”>
    <div class=“red-boxes”>
      <div class=“box”>4</div>
      <div class=“box”>5</div>
      <div class=“box”>6</div>
      <div class=“box”>7</div>
      <div class=“box”>8</div>
      <div class=“clear”></div>
    </div>
  </div>
  <div class=“clear”></div>
</div>
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<style>
  /* 기본구조관련 CSS */
  #container {
    border: 2px solid grey;
    width: 300px;
    padding: 5px;
  }
  .clear {
    clear: both;
  }
  .box {
    width: 30px; height: 30px;
    background-color: rgb(200, 0, 0);
    border: 1px solid black;
    margin: 0 5px;
    color: white; line-height: 30px;
    text-align: center;
    float: left;
  }
</style>
cs

2. 테두리선 정렬

다음 단계로 div.center를 설정해보자. 앞에서 언급했던 것처럼 div.center의 오른쪽 테두리선을 div#container의 중앙으로 정렬한다. 아래 결과 모습을 먼저 보자. div.center는 시각화를 돕기 위해 파란선으로 표시했다.

1
2
3
4
5
6
7
8
  • .center의 CSS
    어떻게 오른쪽 테두리선을 백그라운의 중앙으로 옮기는지를 눈여겨 보자.
    border: 1px solid blue; // 시각화를 돕기 위해 파란선으로 표시. 실제 구현시에는 필요없음 – line 3
    float: right; // 1행과 2행에 위치한 div.center들을 오른쪽 정렬 시킨다. HTML 구현 파트 line10에 있는 div.clear 덕분에 한 행에 배열되지 않고, 2행으로 오른쪽 정렬된다.
    position: relative; // 위치 속성(여기서는 left)를 사용하기 위해서는 position 설정이 필요하다.
    left: -50%; // left 좌표를 부모 요소의 width 기준으로 -50%로 옮긴다. 즉 백그라운드의 중앙이 된다.
  • .red-boxes의 CSS
    border: 1px solid red; // 시각화를 돕기 위해 빨간색으로 표시. 실제 구현시에는 필요없음 – line 9
1
2
3
4
5
6
7
8
9
10
11
<style>
  .center {
    border: 1px solid blue;
    float: right;
    position: relative; 
    left: -50%;
  }
  .red-boxes {
    border: 1px solid red;
  }
</style>
cs

3. 테두리선 위에 올리기

이제 마지막으로 남은 일은, 아래와 같이 div.red-boxes의 중심(빨간색)을 div.center의 오른쪽 테두리선으로 올리는 것이다.

1
2
3
4
5
6
7
8
  • .red-boxes의 CSS
    position: relative; // 위치 속성(여기서는 left)를 적용하기 위해 position 설정이 필요하다.
    left: 50%; // 부모 요소인 div.center의 오른쪽 테두리선에 가운데 정렬 시켜주기 위해 50% 이동시켜준다.
    * 참고로 요소를 이동시키는 방법 중에는 위치속성(left, right, top, bottom)과 transform이 있다. 하지만 이 둘의 작동 원리에 차이점이 존재한다. [참고 6. 위치속성과 transform의 차이점]
1
2
3
4
5
6
7
<style>
  .red-boxes {
    border: 1px solid red;
    position: relative;
    left: 50%;
  }
</style>
cs

총정리

마지막으로 총 코드를 적어보면 아래와 같다.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<style>
  #container {
    border: 2px solid grey;
    width: 300px;
    padding: 5px;
  }
  .clear {
    clear: both;
  }
  .box {
    width: 30px; height: 30px;
    background-color: rgb(200, 0, 0);
    border: 1px solid black;
    margin: 0 5px;
    color: white; line-height: 30px; 
    text-align: center;
    float: left;
  }
  .center {
    float: right;
    position: relative;
    left: -50%;
  }
  .red-boxes {
    position: relative;
    left: 50%;
  }
</style>
<div id=“container”>
  <div class=“center”>
    <div class=“red-boxes”>
      <div class=“box”>1</div>
      <div class=“box”>2</div>
      <div class=“box”>3</div>
      <div class=“clear”></div>
    </div>
  </div>
  <div class=“clear”></div>
 
  <div class=“center”>
    <div class=“red-boxes”>
      <div class=“box”>4</div>
      <div class=“box”>5</div>
      <div class=“box”>6</div>
      <div class=“box”>7</div>
      <div class=“box”>8</div>
      <div class=“clear”></div>
    </div>
  </div>
  <div class=“clear”></div>
</div>
 
cs

참고
[1] float에서 clear: both로 영역분리하기
[2] float에서 overflow: hidden으로 영역 분리하기
[3] 클래스 선택자
[4] ID 선택자
[5] float: left, float: right
[6] 위치속성과 transform의 차이점]
[ CSS 목차 보기 ]

1 thought on “CSS float: center 구현 방법”

  1. Pingback: 【CSS】 글자 세로 가운데 정렬하는 4가지 방법 ⋆ Our Small Joy

Leave a Reply