박스 내의 텍스트가 아닌 박스 자체를 ( ex) 팝업 ) 세로 중앙(가운데) 정렬시키는 방법.
position:absolute의 경우 부모가 position:relative를 가지고 있다는 전제하에 작성.

텍스트의 세로 중앙정렬은
따로 정리해놓았다.
https://blog.naver.com/kira4195/221182885666

 

 

1. position: absolute; 50%로 밀고 px로 당기기.

//html 1번~3번
<div class="box">
   저는 부모의 세로 중앙에 위치할 예정입니다 :D
</div>
//css
.box {
    position:absolute; 
    top:50%; left:50%;
    margin-top:-100px; margin-left:-100px; 
    width:200px; height:200px; 
}

※ 가운데 정렬시키고 싶은 대상을  왼쪽, 위로부터 반(50%) 위치로 밀어낸 후 대상의 크기 절반 값만큼 당기는 방법. 가장 통상적인(?) 방법.

- 장점 : 막힘없는 하위 버전 호환.
- 단점 : 대상의 width, height 값이 유동적이지 않다. (px로 고정 후 반 길이만큼 당겨주어야 하므로!!)


 

2. position: absolute; 50%로 밀고 translate으로 당기기.

//css
.box {
    position:absolute;
    top:50%; left:50%;
    transform: translate(-50%, -50%);
}

※ 마찬가지로 반(50%) 위치로 밀어낸 후 대상의 크기 절반 값만큼 당기는 방법. 

- 장점 : width와 height가 고정되지 않아도 사용 가능하다.
- 단점 : transform의 크로스 브라우징이 안 좋다.
 prefix 필요.  IE 8 이하는 적용되지 않는다.

-ms- 없이도 IE9 작동하던데 음... 여하튼 IE9까진 쓰려면 쓸 수는 있다!


 

3. position 모든 방향에서 당기는 방법.

//css
.box {
    position:absolute;
    top:0; left:0; bottom:0; right:0;
    height:10%; // 임의로 준 크기.
    margin:10% auto;
}

※ div를 모든 방향에서 당긴 후( 이때 div는 전 화면에 꽉 차게 된다.) height 값을 주면 전체 부모의 가운데에 위치하게 됨. 

- 장점 : 크기가 가변적인 박스를 세로 중앙 정렬할 수 있다.
- 단점 : IE7 이하는 작동하지 않는다. 


 

4. table-cell로 만들어 세로 중앙 정렬 시키기.

//html 
 <div class="wrapper">
    <div class="box">
        <div>저는 부모의 세로 중앙에 위치할 예정입니다 :D</div>
    </div>
 </div>
//css
.wrapper {
    display:table;
}
.box {
    display:table-cell;
    vertical-align:middle;
}

※ 전체 감싼 박스를 table로 만든 후 안의 박스를 table-cell로 만들어 그 안의 개체를 vertical-align:middle로 중앙 정렬 시키는 방법. 한 줄에 여러 요소를 넣어야 할 때는 display: table 대신 display: inline-table을 사용할 수도 있다.

- 장점 : 크기가 가변적인 박스를 세로 중앙 정렬할 수 있다.
            .wrapper의 공간이 없어도 내용이 잘리지 않는다.
- 단점 : IE7 이하는 작동하지 않는다.  약간 태그 단계가 깊어진다.

 

 

5. float 속성을 이용하는 방법.

//html 
<body>
    <div id="floater"></div> 
    <div id="box"> Content Here </div>
</body>
//css
body { height: 500px; }
#floater {
    float:left;
    height:50%;
    margin-bottom:-120px;
}
#box {
    clear:both;
    height:240px;
    position:relative;
}

※ floater라는 보이지 않는 div를 body의 50%의 높이를 갖게 한다. 그 바로 아래에 clear 속성을 넣은 box가 위에 floater밑으로 오게하면 자기 크기의 반만큼 중간에서 floater의 margin으로 당겨지게 된다.

* margin-top 이나 margin-left는 음수 값으로 당기면 스스로가 그 방향으로 당겨지지만, right나 bottom은 본인이 아닌 그 다음에 오는 요소가 당겨지게 한다.

- 장점 : 모든 브라우저에서 작동한다.
- 단점 : 공간이 좁을 땐 콘텐츠가 잘리고 스크롤바가 나타난다.


 

6. :before로 가상 콘텐츠를 넣어 중앙 정렬 시키기.

//html 
<div class="wrapper">
    <div class="box"> 저는 부모의 세로 중앙에 위치할 예정입니다. :D</div>
</div>
//css
.wrapper {
    height: 100%;
    text-align: center;
}
.wrapper:before {
    content: ""; display: inline-block;
    width: 1px; height: 100%;
    margin-right: 0; vertical-align: middle;
}
.box {
    display: inline-block; vertical-align: middle;
}

※ 100% 높이를 가진 부모의 앞에, 100% 높이를 가진 박스 하나를 놓는다. 그 박스에 vertical-align:middle을 줘서 그 안의 박스가 세로 가운데 정렬 되도록 하는 것.

장점 : 크기가 가변적인 박스를 세로 중앙 정렬할 수 있다.
- 단점 : IE7 이하는 작동하지 않는다.

 

 

* 정리

- 박스를 정렬할 때 글자를 정렬할 때의 방법도 쓰므로, 사실 정확히 텍스트 정렬할 때와 박스 정렬할 때를 나눈다는 건 조금 무리였나도 싶다. :<  어쨌든 상황에 맞게 잘 찾아 쓰는데 도움이 되기를..!
 

 

출처 : https://m.blog.naver.com/kira4195/221161971714

출처 : http://aboooks.tistory.com/180

출처 : http://webdir.tistory.com/31

 

'프론트엔드 개발 놀이터 > css, design' 카테고리의 다른 글

SVG 다루기  (0) 2020.03.06
Base64 이미지 사용하기  (0) 2020.03.05
Lottie (로티) json 애니메이션  (0) 2020.02.28
Flat Color Hex Codes  (0) 2020.02.27
파비콘(Favicon)의 모든 것  (0) 2020.02.24

+ Recent posts