Flexbox에서 요소를 세로 및 가로로 가운데에 배치하는 방법
다음은 두 가지 일반적인 센터링 솔루션입니다.
하나는 세로로 정렬 된 플렉스 항목 ( flex-direction: column
)과 다른 하나는 가로로 정렬 된 플렉스 항목 ( flex-direction: row
)에 해당합니다.
두 경우 모두 중심 div의 높이는 가변적이거나 정의되지 않았으며 알 수없는 것일 수 있습니다. 중심 div의 높이는 중요하지 않습니다.
다음은 모두 HTML입니다.
<div id="container"><!-- flex container -->
<div class="box" id="bluebox"><!-- flex item -->
<p>DIV #1</p>
</div>
<div class="box" id="redbox"><!-- flex item -->
<p>DIV #2</p>
</div>
</div>
CSS (장식 스타일 제외)
플렉스 아이템이 수직으로 쌓일 때 :
#container {
display: flex; /* establish flex container */
flex-direction: column; /* make main axis vertical */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* will center text in <p>, which is not a flex item */
}
데모
플렉스 아이템이 수평으로 쌓일 때 :
flex-direction
위의 코드 에서 규칙을 조정하십시오 .
#container {
display: flex;
flex-direction: row; /* make main axis horizontal (default setting) */
justify-content: center; /* center items horizontally, in this case */
align-items: center; /* center items vertically, in this case */
height: 300px;
}
데모
플렉스 아이템의 내용을 중심으로
플렉스 서식 컨텍스트 의 범위는 부모-자식 관계로 제한됩니다. 자식 이외의 플렉스 컨테이너의 자손은 플렉스 레이아웃에 참여하지 않으며 플렉스 속성을 무시합니다. 본질적으로, 플렉스 속성은 어린이를 넘어서 상속 될 수 없습니다.
따라서 플렉스 속성을 자식 에 적용하려면 항상 부모 요소 를 적용 display: flex
하거나 적용해야합니다 display: inline-flex
.
플렉스 항목에 포함 된 텍스트 또는 기타 내용을 세로 및 / 또는 가로로 가운데에 맞추려면 항목을 (중첩) 플렉스 컨테이너로 만들고 가운데 맞춤 규칙을 반복하십시오.
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
자세한 내용은 여기 : flexbox 안에 텍스트를 세로로 맞추는 방법은 무엇입니까?
또는 margin: auto
flex 항목의 content 요소에 적용 할 수 있습니다 .
p { margin: auto; }
플렉스 auto
마진 에 대한 자세한 내용은 플렉스 항목 정렬 방법 (상자 # 56 참조)을 참조하십시오.
여러 라인의 플렉스 아이템 중심
플렉스 컨테이너에 여러 줄이있는 경우 (래핑으로 인해) align-content
교차 축 정렬에 속성이 필요합니다.
사양에서 :
8.4. 플렉스 라인 포장 : align-content
속성
이 align-content
속성은 주축 justify-content
내에서 개별 항목을 정렬 하는 방법 과 유사하게, 가로축에 여분의 공간이 있으면 플렉스 컨테이너 내에서 플렉스 컨테이너의 선을 정렬합니다.
이 프로퍼티는 1 행 플렉스 컨테이너에는 영향을 미치지 않습니다.
자세한 내용은 다음과 같습니다. flex-wrap은 align-self, align-items 및 align-content와 어떻게 작동합니까?
브라우저 지원
Flexbox는 IE <10을 제외한 모든 주요 브라우저에서 지원됩니다 . Safari 8 및 IE10과 같은 일부 최신 브라우저 버전에는 공급 업체 접두사가 필요합니다 . 접두사를 빠르게 추가하려면 Autoprefixer를 사용 하십시오 . 이 답변에 대한 자세한 내용 .
구형 브라우저를위한 센터링 솔루션
CSS 테이블 및 위치 지정 속성을 사용하는 대체 센터링 솔루션에 대해서는 다음 답변을 참조하십시오. https://stackoverflow.com/a/31977476/3597276