유연한 박스 레이아웃
CSS Flexible Box 가 등장하면서 많은 웹 디자이너들의 악몽 1 이 해결되었습니다. 가장 해킹 된 것 중 하나 인 수직 정렬. 이제는 알려지지 않은 높이 에서도 가능합니다 .
"수십 년의 레이아웃 해킹이 끝날 것입니다. 내일은 아니지만 곧 내일 남은 시간 동안 계속 될 것입니다."
- CSS 전설 에릭 마이어 의 W3Conf 2013
Flexible Box (또는 Flexbox)는 레이아웃 목적으로 특별히 설계된 새로운 레이아웃 시스템입니다. 사양 상태 :
플렉스 레이아웃은 표면적으로 블록 레이아웃과 유사합니다. 플로트 및 열과 같이 블록 레이아웃에 사용할 수있는 더 복잡한 텍스트 또는 문서 중심 속성이 많이 없습니다. 그 대가로 웹앱과 복잡한 웹 페이지가 자주 필요로하는 방식으로 공간을 분산하고 컨텐츠를 정렬 할 수있는 간단하고 강력한 도구를 얻게됩니다.
이 경우 어떻게 도울 수 있습니까? 음 .. 어디 한번 보자.
수직 정렬 열
Twitter 부트 스트랩을 사용하면 .row
몇 가지 .col-*
가 있습니다. 원하는 .row
2 를 플렉스 컨테이너 상자 로 표시 한 다음 모든 플렉스 항목 (열)을 align-items
속성 별로 세로 로 정렬하면 됩니다.
예를 들면 여기 (주의해서 주석을 읽으 십시오 )
<div class="container">
<div class="row vertical-align"> <!--
^-- Additional class -->
<div class="col-xs-6"> ... </div>
<div class="col-xs-6"> ... </div>
</div>
</div>
.vertical-align {
display: flex;
align-items: center;
}
출력
컬러 영역은 열의 패딩 상자를 표시합니다.
에 대한 설명 align-items: center
8.3 축 정렬 : align-items
속성
플렉스 아이템 은 플렉스 컨테이너의 현재 라인의 횡축 에 유사 justify-content
하지만 수직 방향으로 정렬 될 수있다 . align-items
익명의 flex items를 포함하여 모든 flex 컨테이너의 항목에 대한 기본 정렬을 설정합니다 .
align-items: center;
중심 값을 기준으로 플렉스 항목 의 여백 상자는 선 내 교차 축의 중심에 있습니다.
큰 경고
중요 사항 # 1 : Twitter Bootstrap은 width
열에 .col-xs-#
클래스 중 하나를 제공하지 않으면 매우 작은 장치에서 열 수를 지정하지 않습니다 .
따라서이 특정 데모에서는 열을 명시 적으로 .col-xs-*
지정하기 때문에 모바일 모드에서 열을 올바르게 표시하기 위해 클래스를 사용 했습니다 width
.
그러나 다른 방법 당신은 할 수 오프 스위치 인 flexbox가 변경하여 단순히 레이아웃 display: flex;
에 display: block;
특정 화면 크기에. 예를 들어 :
/* Extra small devices (767px and down) */
@media (max-width: 767px) {
.row.vertical-align {
display: block; /* Turn off the flexible box layout */
}
}
또는 다음 과 같이 특정 화면 크기 에서만 지정할.vertical-align
수 있습니다.
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
.row.vertical-align {
display: flex;
align-items: center;
}
}
이 경우 @KevinNelson 의 접근 방식을 사용 합니다.
중요 사항 # 2 : 공급 업체 접두사는 간결성을 위해 생략되었습니다. Flexbox 구문이 시간 동안 변경되었습니다. 새로운 서면 구문은 이전 버전의 웹 브라우저에서는 작동하지 않습니다 (그러나 Internet Explorer 9 이전 버전은 아닙니다! Flexbox는 Internet Explorer 10 이상에서 지원됩니다).
즉 display: -webkit-box
, 프로덕션 모드 에서도 공급 업체 접두사 속성을 사용해야 합니다.
Demo 에서 "Toggle Compiled View" 를 클릭 하면 접두사가 붙은 CSS 선언 ( Autoprefixer 덕분에 )이 표시됩니다.
세로로 정렬 된 내용의 전체 높이 열
이전 데모 에서 볼 수 있듯이 열 (플렉스 항목)은 더 이상 컨테이너 (플렉스 컨테이너 상자, 즉 .row
요소) 만큼 높지 않습니다 .
속성 center
값을 사용하기 때문입니다 align-items
. 기본값 stretch
은 항목이 상위 요소의 전체 높이를 채울 수 있도록하는 것입니다.
이를 해결하기 위해 display: flex;
열에도 추가 할 수 있습니다 .
예를 들어 (다시 의견을 명심)
.vertical-align {
display: flex;
flex-direction: row;
}
.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
display: flex;
align-items: center; /* Align the flex-items vertically */
justify-content: center; /* Optional, to align inner flex-items
horizontally within the column */
}
출력
컬러 영역은 열의 패딩 상자를 표시합니다.
마지막으로 여기서 데모 및 코드 스 니펫은 목표를 달성하기위한 현대적인 접근 방식을 제공하기 위해 다른 아이디어를 제공하기위한 것입니다. 실제 웹 사이트 나 응용 프로그램에서이 방법을 사용 하려면 " 큰 경고 "섹션을 염두에 두십시오 .
브라우저 지원을 포함한 추가 자료를 보려면 다음 자료가 유용합니다.
1. 반응 형 높이로 div 내부의 이미지를 세로로 정렬합니다
. 2. Twitter Bootstrap의 기본값을 변경하지 않기 위해 추가 클래스를 사용하는 것이 좋습니다 .row
.
div
, 아니 텍스트 내부의이 같은 jsfiddle.net/corinem/Aj9H9 하지만이 예에서는 내가 사용하지 않을 부트 스트랩