모든 flexbox 속성. Flexbox에 대한 최종 가이드
이 기사에서 우리는 모델을 사용하여 계단식 스타일 시트를 사용하는 사이트 페이지의 현대적인 기본 레이아웃과 관련된 문제를 계속 연구할 것입니다. 플렉스박스.
이전 기사에서 현대 CSS 속성을 사용하여 모든 종류의 플렉스 컨테이너 설정을 작동하고 만드는 방법을 배웠지만 사이트 레이아웃과 관련된 많은 문제를 해결하기에는 충분하지 않습니다.
이제 우리는 플렉스 요소로 직접 작업하는 방법을 살펴보고, 컨테이너에서 표시 순서를 결정하는 방법을 배우고, 특정 플렉스 요소를 세로로 정렬하는 방법을 배우고, 플렉스 요소의 상대 너비인 기본 너비를 지정하는 방법을 고려합니다. 플렉스 요소 및 플렉스 요소 작업에 필요한 기타 몇 가지 기술.
항목 순서
이 섹션에서는 사용 방법을 살펴보겠습니다. 플렉스박스레이아웃은 상위 요소 내부의 요소 순서를 설정합니다. 간단한 방법으로복잡해 보이는 작업을 해결합니다. order CSS 속성을 사용하면 나머지를 기준으로 컨테이너의 flex 요소 순서를 설정할 수 있습니다.
요소가 플렉스 요소가 아닌 경우(블록 또는 인라인 플렉스 컨테이너인 상위 요소 내부가 아닌 경우) 속성 및 플렉스 요소로 작업하기 위한 속성은 이러한 요소에 영향을 미치지 않습니다.
컨테이너에 있는 하나의 플렉스 요소에 대한 속성 값을 지정하면 다음과 같다는 사실에 주의를 기울입니다. 일련 번호가 아닙니다., 그러나 다른 요소와 관련된 위치의 "가중치"만 나타냅니다. 음수 값이 허용됩니다(값 -1, 예를 들어 상위 컨테이너의 왼쪽에 있는 요소를 오프셋). 기본값은 0입니다.
속성 작업의 도식적 표현은 다음 이미지에 나와 있습니다.
이 튜토리얼에서는 z축을 따라 요소의 가시성을 제어할 수 있는 속성 덕분에 속성 값을 지정하는 원칙이 동일합니다. 예를 들어 다음과 같이 직관적인 모든 값을 작업에 사용할 수 있습니다. 100 , 200 , 300 등등.
순서: -1;
주문: 1;
주문: 2;
이 예에서는 삼 다섯집단
예를 들어 보겠습니다.
이 예에서는 삼블록 플렉스 컨테이너, 그 안에 우리가 배치했습니다. 삼요소
V 첫 번째컨테이너 두번째요소는 나머지 플렉스 요소와 관련하여 2만큼 증가합니다. 두번째 3인용 용기와 제삼이미 켜 네... 우리의 계산에 의존하거나 추가 기능을 사용하지 않고 요소의 너비가 비례적으로 어떻게 변하는지 주의하십시오.
V 첫 번째가리키는 컨테이너 두번째플렉스 요소 기본 크기 100픽셀, 에 두번째컨테이너 100픽셀그리고 안에 제삼이미 10000픽셀... 참고하세요 제삼크기에도 불구하고 요소는 컨테이너에서 오버플로를 일으키지 않았지만 상위 컨테이너에 남아 있는 공간으로 조정되었습니다.
컨테이너의 나머지 플렉스 요소와 관련하여 블록을 얼마나 줄일 것인지 결정하는 값(여유 공간이 충분하지 않은 경우)은 속성과 유사하게 설정됩니다. 그러나 기본값은 0이 아니라 1입니다.음수 값도 허용되지 않습니다(유효하지 않음).
값이 0인 속성은 필요한 요소 너비를 유지하면서 요소가 축소되지 않음을 결정합니다! 기본 플렉스 요소 너비(속성)의 최소값이 이 값과 함께 지정되면 요소는 이 값보다 작게 축소될 수 없습니다. 플렉스 컨테이너 오버플로 가능성이 있으므로 이 기능을 현명하게 사용하십시오. 우리는 기사의 끝에서이 순간을 고려할 것입니다.
예를 들어 보겠습니다.
이 예에서는 삼블록 플렉스 컨테이너, 그 안에 우리가 배치했습니다. 삼요소
이 기사에서는 유연한 웹 페이지 레이아웃을 만들기 위한 CSS Flexbox 기술을 살펴보겠습니다.
CSS Flexbox에 대한 브라우저 지원
Flexbox 기술은 이미 현재 사용되는 거의 모든 브라우저에서 지원됩니다(접두사 사용: IE10 +, Edge12 +, Firefox 2+, Chrome 4+, Safari 3.1+, Opera 12.1+, iOS Safari 3.2, Opera mini, Android 2.1+, Blackberry 7+ ).
Flexbox 기본 사항(그리드)
Flexbox는 그리드를 기반으로 합니다. 단 2개의 요소로 구성되어 있습니다. 첫 번째 요소는 플렉스 컨테이너... flex 컨테이너는 flex 또는 flex-inline 값이 있는 display CSS 속성을 필수 HTML 요소에 추가하여 생성됩니다.
이후 플렉스 컨테이너의 모든 직계 자식(어린이) 자동으로 플렉스 아이템(2개 항목 플렉스박스 그리드).
HTML 마크업:
Flex-container (디스플레이: flex; / * flex || inline-flex * /) 플렉스박스 그리드의 구조
Flex 항목은 기본적으로 Flex 컨테이너의 전체 높이를 차지합니다.
flex 또는 flex-inline 값은 플렉스 컨테이너페이지에 표시됩니다. 로 제시해야 하는 경우 블록그런 다음 플렉스 값을 사용하십시오. 요소를 다음과 같이 표현해야 하는 경우 소문자그런 다음 플렉스 인라인 값을 사용하십시오. 이 경우 요소를 표시하는 데 필요한 만큼 페이지에서 공간을 차지합니다.
플렉스 아이템의 배열
플렉스 컨테이너 내에서 플렉스 항목이 배치되는 방향을 지정하는 것은 다음과 같이 수행됩니다. 축.
Flexbox 하이라이트 2축... 첫 번째 축은 기초적인또는 메인(기본적으로 오른쪽으로 지정됨). 두 번째는 횡축(기본적으로 아래로 향함).
플렉스 컨테이너의 항목은 공간이 부족한 경우에도 기본적으로 정렬됩니다. 플렉스 컨테이너의 플렉스 항목을 주축 방향으로 정렬합니다.
컨테이너에 있는 항목의 기본 레이아웃(Flex 컨테이너의 공간이 부족한 Flex 항목은 유출됨)
CSS Flexbox에서 CSS flex 컨테이너의 flex-wrap 속성을 wrap 또는 wrap-reverse로 설정하면 플렉스 항목이 새 줄로 줄 바꿈되도록 허용합니다(현재 줄의 공간이 부족한 경우).
플렉스 랩: 랩; / * nowrap (한 줄 - 기본값) wrap (플렉스 항목이 새 줄로 줄 바꿈하도록 허용) wrap-reverse (플렉스 항목을 역순으로 줄 바꿈) * /
flex-wrap CSS 속성의 wrap 및 wrap-reverse 값은 교차 축의 방향을 결정합니다.
flexbox 주축의 방향 설정은 다음과 같이 수행됩니다. CSS 사용- 플렉스 방향 속성.
플렉스 방향: 행; / * 행(오른쪽) - 기본 행-역(왼쪽) 열(아래) 열-역(위) * /
이 속성을 사용하면 플렉스 항목을 가로(행)가 아닌 세로(열)로 표시할 수 있습니다.
flex-direction 및 flex-wrap 속성은 범용 CSS flex-flow 속성을 사용하여 지정할 수 있습니다.
Flex-flow: row nowrap; / * 1 값 - 플렉스 방향, 2 값 - 플렉스 랩 * /
플렉스 항목 정렬
Flexbox에서 컨테이너 내의 항목 정렬은 두 방향(축)으로 수행됩니다.
플렉스 아이템을 주축 방향으로 정렬
기본 축을 따라 항목 정렬은 CSS justify-content 속성을 사용하여 수행됩니다.
콘텐츠 정당화: 플렉스 시작; / * flex-start(플렉스 항목은 축의 원점에 정렬됨) - 기본적으로 flex-end(플렉스 항목은 축의 끝에 정렬됨) center(플렉스 컨테이너의 중심까지) space- between(균일하게 , 즉, 플렉스 항목 사이의 거리가 동일) space-around (균일하지만 첫 번째 플렉스 항목 앞과 마지막 항목 뒤에 공백을 절반 추가) * / 주 축을 따라 플렉스 항목을 정렬하기 위한 옵션
교차 축을 따라 플렉스 항목 정렬
align-items CSS 속성을 사용하여 교차 축 방향을 따라 플렉스 컨테이너의 플렉스 항목을 정렬합니다.
정렬 항목: 스트레치; / * stretch(교차축의 전체 길이로 늘이기) - 기본값은 flex-start(교차축의 시작부터) flex-end(교차축의 끝에서) baseline(기준선에서) center(to 가운데) * / 가로 축을 따라 플렉스 항목에 대한 정렬 옵션
플렉스 컨테이너 라인 정렬
CSS Flexbox를 사용하면 플렉스 항목 자체뿐만 아니라 항목이 위치한 줄도 정렬할 수 있습니다.
Align-content: stretch / * stretch(교차 축의 전체 길이를 따라 늘이기) - 기본적으로 flex-start(교차 축의 시작을 기준으로 함) flex-end(교차 축의 끝을 기준으로 함) 중심( 가운데) space-between (균등하게, 즉, 줄 사이에 같은 간격으로) space-around (균일하게, 그러나 첫 번째 줄 앞과 마지막 줄 뒤에 공백의 절반 추가) * / 플렉스 컨테이너 줄을 정렬하기 위한 옵션
align-content 속성은 플렉스 컨테이너의 플렉스 항목이 여러 줄에 걸쳐 있을 때만 의미가 있습니다. 이렇게 하려면 먼저 모든 플렉스 항목의 너비가 플렉스 컨테이너의 너비보다 커야 하고, 두 번째로 플렉스 컨테이너에 flex-wrap에 대한 wrap 또는 wrap-reverse CSS 속성이 있어야 합니다.
자체 CSS 속성 정렬
align-self 속성은 이전 속성(justify-content, align-items 및 align-content)과 달리 플렉스 항목용입니다. 그것은 당신이 변경할 수 있습니다 플렉스 아이템 정렬가로축 방향으로. align-self 속성은 align-items와 동일할 수 있습니다.
정렬 항목: 스트레치; / * 자동(기본값) || 스트레칭 || 플렉스 스타트 || 플렉스 엔드 || 기준 || 센터 * /
플렉스 컨테이너(디스플레이: 플렉스, 너비: 300픽셀, 높이: 150픽셀, 정렬 항목: 센터, 패딩: 10픽셀, 배경색: #efefef;) .flex-container_element-1, .flex-container_element-2, .flex -container_element-3, .flex-container_element-4(플렉스 기반: 70px, 텍스트 정렬: 센터, 패딩: 15px, 글꼴 크기: 30px;) .flex-container_element-1(정렬 셀프: 플렉스 시작, background: # fe4;) .flex-container_element-2 (align-self: flex-end; background: pink;) .flex-container_element-3 (align-self: stretch; background: 라임;) (align-self: auto; background: cyan;) align-self CSS 속성의 작동 방식
플렉스 아이템의 순서 변경하기
기본적으로 플렉스 항목은 HTML 코드에 나타나는 순서대로 플렉스 컨테이너에 표시됩니다. order 속성을 사용하여 CSS Flexbox에서 다른 항목에 비해 일부 플렉스 항목의 순서를 변경할 수 있습니다. 이 CSS 속성은 플렉스 컨테이너의 플렉스 항목을 숫자의 오름차순으로 정렬합니다.
주문: 0; / * 0(기본값) 양수 또는 음수 정수 * /
예를 들어:
플렉스 아이템의 너비 제어하기
Flexbox에는 플렉스 항목의 너비를 결정하는 여러 CSS 속성이 있습니다.
플렉스 기반 CSS 속성
이 속성은 다음을 위한 것입니다. 플렉스 아이템의 초기 너비 설정... px, %, em 등과 같은 다양한 측정 단위를 사용하여 너비 값을 설정할 수 있습니다. 기본적으로 이 속성은 auto로 설정됩니다(이 경우 요소의 너비는 내용에 따라 자동으로 계산됨) .
플렉스 아이템의 최종 너비는 다음과 같이 결정됩니다.이 항목뿐만 아니라 이 플렉스 컨테이너의 다른 플렉스 항목에 대해 설정된 flex-grow 및 flex-shrink CSS 속성 값에 따라 달라집니다.
flex-grow CSS 속성
이 속성은 다음 여부를 결정합니다. 증가(증가)할 플렉스 항목의 초기 너비... 플렉스 항목의 너비를 늘리는 것은 다음과 같이 수행됩니다. 여유 공간 라인... flex-grow CSS 속성의 값은 다음과 같습니다. 정수... 플렉스 항목이 자체적으로 차지하는 여유 공간의 양을 결정하는 것은 이 값입니다(1보다 크거나 같은 경우).
예를 들어:
이 예에서 플렉스 항목이 정렬되고 여유 공간이 있는 경우(600 × (1-0.8) = 120px):
- flex-container_element-1은 이 공간의 1/5을 요소 너비에 추가합니다(120 × 1/5 = 24px).
- flex-container_element-2는 해당 공간의 4/5를 너비에 추가합니다(120 × 4/5 = 96px).
즉, CSS flex-grow 속성을 사용하면 플렉스 항목의 너비가 커질 수 있음을 나타낼 뿐만 아니라 다른 항목과 관련하여 해당 크기가 얼마나 커질 수 있는지 설정할 수 있습니다.
기본적으로 CSS flex-grow 속성은 0으로 설정됩니다. 이는 플렉스 항목이 커질 수 없음(폭 확장)을 의미합니다.
flex-shrink CSS 속성
이 속성은 플렉스 항목의 너비를 축소할 수 있는지 여부를 제어합니다. 플렉스 항목은 다음 경우에만 축소됩니다. 선 너비는 모든 플렉스 항목을 표시하기에 충분하지 않습니다.그 안에 위치. 필요한 너비는 다음을 위해 계산됩니다. 초기 너비의 기준모든 플렉스 항목이 있습니다.
예를 들어:
플렉스 컨테이너의 너비는 500px입니다. 플렉스 항목을 표시하려면 600픽셀이 필요합니다. 결과적으로 100px가 누락되었습니다. 이 예에서 2개의 플렉스 항목(.flex-container_element-1 및 .flex-container_element-2)이 축소될 수 있습니다. 첫 번째 플렉스 항목인 flex-container_element-1의 너비는 이 경우 300 - 1/4 * 100 = 275px입니다. 두 번째 플렉스 항목인 flex-container_element-2의 너비는 이 경우 300 - 3/4 * 100 = 225px입니다.
기본값:
플렉스 수축: 1;
필요한 경우 플렉스 아이템이 줄어들지 않도록이면 flex-shrink 속성에 숫자 0을 지정해야 합니다.
플렉스 CSS 속성
CSS flex 속성을 사용하여 flex-grow, flex-shrink 및 flex-basis를 편리하게 설정할 수 있습니다.
기본값:
플렉스: 0 1 자동; / * 0 - 플렉스 성장(1 값) 1 - 플렉스 축소(2 값) 자동 - 플렉스 기반(3 값) * /
CSS Flexbox를 사용한 페이지 레이아웃
이 섹션에서는 간단한 반응형 Flexbox 레이아웃을 만듭니다.
레이아웃 구조는 3개의 섹션으로 구성됩니다.
- 헤더(헤더 및 메인 메뉴 표시용);
- main(주요 부분을 표시하기 위해);
- 바닥글(바닥글용).
메인 부분(main)은 차례로 2개의 섹션으로 더 나뉩니다(CSS Flexbox를 사용하여 배치할 것입니다). 에 대형 스크린(> = 992px) 이 섹션은 수평으로 정렬되고 나머지 섹션은 수직으로(<992px).
대부분의 브라우저에서 레이아웃을 지원하려면 필요한 접두사와 최대 너비를 CSS에 추가하세요.
상자를 플렉스 컨테이너로 "전환"하려면 row-flex 클래스를 사용합니다. flex CSS 속성을 사용하여 플렉스 컨테이너 내부의 각 플렉스 항목(main_article 및 main_aside)의 너비를 설정합니다.
예를 들어 Flexbox를 사용하여 주요 기사 섹션의 "바닥글" 블록과 "사이트에서 흥미로운 부분" 섹션을 표시해 보겠습니다.
"바닥글" 섹션을 4개의 동일한 부분으로 나누고(한 부분의 최소 너비는 200px) "사이트에서 흥미로운 부분" 섹션을 3개의 부분(한 부분의 최소 너비는 300px)으로 나눕니다.
추가 CSS:
Footer_block, .main_other_article(-webkit-flex-basis: 0, -ms-flex-preferred-size: 0, flex-basis: 0, -webkit-box-flex: 1, -webkit-flex-grow: 1, - ms-flex-positive: 1, flex-grow: 1, 최대 너비: 100%;)
대니 마르코프
디자인은 매우 간단합니다. 중앙 정렬된 컨테이너로 구성되며 내부에는 헤더, 메인 섹션, 사이드바 및 바닥글이 있습니다. 다음은 CSS와 HTML을 가능한 한 깨끗하게 유지하기 위해 수행해야 하는 주요 "테스트"입니다.
- 레이아웃의 네 가지 주요 섹션을 배치합니다.
- 페이지를 반응형으로 만듭니다(작은 화면에서 사이드바가 기본 콘텐츠 아래로 떨어짐).
- 헤더 콘텐츠 정렬 - 왼쪽의 탐색, 오른쪽의 버튼.
보시다시피 비교를 위해 최대한 단순하게 했습니다. 첫 번째 테스트부터 시작하겠습니다.
과제 1: 페이지 섹션 배치
플렉스박스 솔루션
display: flex를 컨테이너에 추가하고 자식의 세로 방향을 설정합니다. 이렇게 하면 모든 섹션이 다른 섹션 아래에 배치됩니다.
컨테이너(디스플레이: flex; flex-direction: 열;)
이제 메인 섹션과 사이드바를 나란히 만들어야 합니다. 플렉스 컨테이너는 일반적으로 단방향이므로 추가 요소를 추가해야 합니다.
그런 다음 이 요소를 표시하도록 설정합니다. flex 및 flex-direction은 반대 방향입니다.
메인 및 사이드바 래퍼(디스플레이: 플렉스, 플렉스 방향: 행;)
마지막 단계는 메인 섹션과 사이드바의 크기를 설정하는 것입니다. 우리는 메인 콘텐츠가 사이드바보다 3배 더 넓기를 원합니다. 이는 플렉스 또는 백분율로 쉽게 수행할 수 있습니다.
보시다시피 Flexbox는 잘 작동했지만 상당한 CSS 속성과 추가 HTML 요소도 필요했습니다. CSS 그리드가 어떻게 작동하는지 봅시다.
CSS 그리드 솔루션
CSS 그리드에는 여러 가지 사용 사례가 있지만 목적에 가장 적합한 것으로 grid-template-areas 구문을 사용합니다.
먼저 페이지의 각 섹션에 대해 하나씩 4개의 그리드 영역을 정의합니다.
이제 메쉬를 사용자 정의하고 각 영역의 위치를 정의할 수 있습니다. 코드가 처음에는 다소 복잡해 보일 수 있지만 그리드 시스템에 익숙해지면 이해하기 쉬워집니다.
컨테이너(디스플레이: 그리드; / * 그리드의 열 크기와 수를 결정합니다. fr 단위는 Flexbox처럼 작동합니다. 열은 값에 따라 행의 여유 공간을 나눕니다. 두 개의 열이 있습니다. 첫 번째는 3입니다. * / Grid-template -columns: 3fr 1fr; / * 이전에 만든 영역을 그리드의 위치에 연결합니다. 첫 번째 줄은 헤더이고 두 번째 줄은 메인 섹션과 사이드바 사이로 나뉩니다. 마지막 줄은 바닥글입니다. * / grid-template-areas: "header header" " main sidebar "" footer footer "; / * 그리드 셀 사이의 간격은 60px입니다. * / grid-gap: 60px;)
그게 다야! 레이아웃은 이제 위의 구조를 따르고 여백이나 패딩을 처리할 필요가 없도록 조정했습니다.
도전 2. 반응형 페이지 만들기
플렉스박스 솔루션
이 단계는 이전 단계와 밀접하게 관련되어 있습니다. Flexbox 솔루션의 경우 플렉스 방향을 변경하고 여백을 조정해야 합니다.
@media (최대 너비: 600px) (.main-and-sidebar-wrapper(flex-direction: 열;) .main(오른쪽 여백: 0, 여백-하단: 60px;))
우리 페이지는 매우 간단하므로 미디어 쿼리에서 작업이 거의 없지만 더 복잡한 레이아웃에는 많은 재작업이 필요합니다.
CSS 그리드 솔루션
그리드 영역을 이미 정의했으므로 미디어 쿼리에서 재정렬하기만 하면 됩니다. 동일한 열 설정을 사용할 수 있습니다.
@media (max-width: 600px) (.container (/ * 모바일 레이아웃을 위한 그리드 영역 정렬 * / grid-template-areas: "header header" "main main" "sidebar sidebar" "footer footer";))
또는 이것이 더 깨끗한 솔루션이라고 생각되면 전체 레이아웃을 처음부터 다시 정의할 수 있습니다.
@media (최대 너비: 600px) (.container (/ * 그리드를 1열 레이아웃으로 재작업 * / grid-template-columns: 1fr; grid-template-areas: "header" "main" "sidebar" " 바닥글";) )
테스트 3: 헤더 구성 요소 정렬
플렉스박스 솔루션
우리는 이미 이전 기사 중 하나에서 Flexbox와 유사한 레이아웃을 수행했습니다. 이 기술은 매우 간단합니다.
헤더(디스플레이: flex; justify-content: space- between;)
탐색 목록과 버튼이 이제 올바르게 정렬됩니다. 안에 물건을 넣는 일만 남았다
헤더 탐색(디스플레이: flex, align-items: 기준선;)
단 두줄! 나쁘지 않아. CSS Grid가 이것을 어떻게 처리하는지 봅시다.
CSS 그리드 솔루션
탐색과 버튼을 분리하려면 헤더에 display: grid를 추가하고 2열 그리드를 설정해야 합니다. 또한 적절한 경계에 모든 것을 배치하기 위해 두 줄의 CSS가 추가로 필요합니다.
헤더(디스플레이: 그리드; 그리드 템플릿 열: 1fr 1fr;) 헤더 탐색(justify-self: start;) 헤더 버튼(justify-self: end;)
탐색 내의 단일 행 링크에 관한 한 CSS 그리드에서는 이를 올바르게 수행할 수 없었습니다. 최선의 시도는 다음과 같습니다.
헤더 탐색(디스플레이: 그리드, 그리드 템플릿 열: 자동 1fr 1fr, 항목 정렬: 끝;)
CSS 그리드가 레이아웃의 이 부분을 다루지 않았다는 것은 분명하지만 이것은 놀라운 일이 아닙니다. 초점은 컨테이너 내부의 콘텐츠가 아니라 컨테이너의 정렬에 있습니다. 이 시스템은 마무리 작업을 위한 것이 아닙니다.
결론
당신이 전체 기사를 읽었다면(그리고 그것은 훌륭한 일입니다!), 그 결과는 당신을 놀라게 하지 않을 것입니다. 사실, 아니 더 나은 시스템- Flexbox와 CSS Grid는 모두 나름대로의 장점이 있어 서로의 대안이 아닌 함께 사용해야 합니다.
이 기사의 결론으로 직접 뛰어든 사람들을 위해(걱정하지 마세요. 저희도 그렇게 합니다) 비교에 대한 간략한 요약은 다음과 같습니다.
- CSS 그리드는 큰 그림을 만드는 데 적합합니다. 이 시스템을 사용하면 페이지 레이아웃을 쉽게 관리할 수 있으며 비표준 및 비대칭 디자인도 처리할 수 있습니다.
- Flexbox는 요소 내에서 콘텐츠를 정렬하는 데 적합합니다. 이 시스템을 사용하여 작은 디자인 세부 사항을 배치하십시오.
- 2D 레이아웃(행 및 열)에 CSS 그리드를 사용합니다.
- Flexbox는 한 차원(행 또는 열 포함)에서만 가장 잘 작동합니다.
- CSS Grid만 사용하거나 Flexbox만 사용할 이유가 없습니다. 그것들을 연구하고 함께 사용하십시오.
Flexbox 마크업 모듈( English Flexible Box에서 - 유연한 블록), 현재 단계" 가능한 권장 사항»W3C 표준화( W3C 후보 추천)는 크기를 알 수 없거나 동적으로 결정되는 경우에도 컨테이너의 요소 사이에 공간을 마크업, 정렬 및 분배하는 보다 효율적인 방법을 제공하는 것을 목표로 합니다. 그래서 그것을 "유연한"이라고 불렀습니다.).
유연한 레이아웃의 기본 아이디어는 컨테이너에 사용 가능한 공간을 최적으로 채우기 위해 요소의 높이/너비(및 순서)를 변경할 수 있는 기능을 제공하는 것입니다( 주로 모든 종류와 크기의 화면을 지원하기 위해).
플렉스 컨테이너는 여유 공간을 채우기 위해 항목을 늘리거나 범위를 벗어나지 않도록 항목을 축소합니다.
가장 중요한 것은 Flexbox 레이아웃은 일반 레이아웃( 수직 방향의 블록과 수평 방향의 인라인 요소).
일반 마크업 요소는 페이지에서 잘 작동하지만 유연성이 부족합니다( 그리고 이것은 말장난이 아닙니다.) 크고 복잡한 애플리케이션 지원( 특히 방향, 치수, 늘이기, 축소 등을 변경할 때).
참고: Flexbox 레이아웃은 애플리케이션 구성 요소 및 작은 레이아웃에 가장 적합하고 그리드 레이아웃은 더 큰 레이아웃에 가장 적합합니다.
기본 개념 및 용어
Flexbox는 개별 속성이 아닌 전체 모듈이므로 전체 속성 집합을 포함하여 많은 요소가 포함됩니다. 그 중 일부는 컨테이너( 플렉스 컨테이너로 알려진 부모 요소), 다른 것들은 어린이들에게 적용되어야 합니다( 그것들을 플렉스 아이템이라고 부르자).
기존 마크업이 상자 및 인라인 방향을 기반으로 하는 반면 플렉스 마크업은 플렉스 흐름 방향을 기반으로 합니다. 플렉스 마크업의 기본 개념을 설명하려면 사양에서 아래 다이어그램을 참조하세요.
기본적으로 요소는 주축( 포인트 메인 스타트에서 메인 엔드까지) 또는 가로축을 따라( 교차 시작 지점에서 교차 끝으로):
- 기본 축은 플렉스 항목이 배치되는 플렉스 컨테이너의 기본 축입니다. 조심하세요. 수평일 필요는 없습니다. 위치는 flex-direction 속성에 따라 다릅니다(아래 참조).
- 메인 스타트 | main-end - 플렉스 항목은 기본 시작 지점에서 시작하여 기본 끝 지점에 도달하는 컨테이너 내부에 있습니다.
- 기본 크기는 기본 크기에 따라 플렉스 항목의 너비 또는 높이입니다. 기본 크기 속성은 너비 또는 높이로 설정할 수 있습니다.
- 교차 축 - 주축에 수직인 교차 축. 그 방향은 주축의 방향에 따라 다릅니다.
- 크로스 스타트 | 크로스 엔드 - 플렉스 라인은 항목으로 채워지고 크로스 시작 측면에서 시작하여 크로스 엔드 측면을 향해 컨테이너에 배치됩니다.
- 교차 크기 - 선택한 치수에 따라 플렉스 항목의 너비 또는 높이. 속성은 가로 치수의 너비 또는 높이 값을 가질 수 있습니다.
상위 클래스 속성(플렉스 컨테이너)
표시하다
이 속성은 값 집합에 따라 플렉스 컨테이너를 인라인 또는 블록으로 정의합니다. 또한 모든 직계 자손에 대한 플렉스 컨텍스트를 허용합니다.
컨테이너(디스플레이: flex; / * 또는 inline-flex * /)
CSS 열은 플렉스 컨테이너에 영향을 미치지 않습니다.
플렉스 방향
이 속성은 플렉스 항목이 플렉스 컨테이너에 배치되는 방향을 결정하는 주 축을 설정합니다. 플렉스박스( 옵션 포장 제외)는 단방향 마크업의 개념입니다.플렉스 항목이 주로 수평 또는 수직 열에 위치한다고 상상해보십시오.
컨테이너(플렉스 방향: 행 | 행 역방향 | 열 | 열 역방향;)
- 행(기본값): ltr의 경우 왼쪽에서 오른쪽으로; rtl의 경우 오른쪽에서 왼쪽으로;
- 행 역방향: in ltr의 경우 오른쪽에서 왼쪽으로; rtl의 경우 왼쪽에서 오른쪽으로;
- 열: 행과 동일하지만 위에서 아래로;
- column-reverse: row-reverse와 같지만 아래에서 위로.
플렉스 랩
기본적으로 플렉스 항목은 한 줄로 압축하려고 합니다. 이 속성을 변경하고 원하는 대로 요소를 래핑할 수 있습니다. 새 라인이 있는 방향이 여기서 역할을 합니다.컨테이너(flex-wrap: nowrap | wrap | wrap-reverse;)
- nowrap(기본값): 한 줄 / ltr의 경우 왼쪽에서 오른쪽으로; rtl의 경우 오른쪽에서 왼쪽으로;
- 줄 바꿈: 여러 줄 / ltr의 경우 왼쪽에서 오른쪽으로; rtl의 경우 오른쪽에서 왼쪽으로;
- wrap-reverse: 여러 줄 / ltr의 경우 오른쪽에서 왼쪽으로; rtl의 경우 왼쪽에서 오른쪽으로.
flex-flow (플렉스 컨테이너의 부모에 적용)
이것은 flex-direction 및 flex-wrap 속성의 축약형으로, 함께 플렉스 컨테이너의 기본 축과 교차 축을 정의합니다. 기본값은 row nowrap입니다.
플렉스 플로우:<‘flex-direction’> || <‘flex-wrap’>
정당화-내용
이 속성은 주 축을 따라 정렬을 설정합니다. 이는 행의 모든 플렉스 항목이 유연하지 않거나 유연하지만 최대 크기에 도달한 경우 초과 여유 공간을 할당하는 데 도움이 됩니다. 또한 이 속성을 사용하면 요소가 선 경계를 넘어갈 때 요소의 정렬을 제어할 수 있습니다.컨테이너(정렬 내용: flex-start | flex-end | 중심 | space- between | space-around;)
- flex-start(기본값): 항목이 줄의 시작 부분에 맞춰 정렬됩니다.
- flex-end: 항목이 줄 끝에 정렬됩니다.
- center: 항목이 선의 중앙에 정렬됩니다.
- space- between: 요소가 줄에 고르게 분포되어 있습니다. 첫 번째 요소는 줄의 시작 부분에, 마지막 요소는 끝 부분에 위치합니다.
- space-around: 항목이 동일한 간격으로 줄에 균등하게 배치됩니다.
항목 정렬
이 속성은 현재 줄의 교차 축과 관련하여 기본적으로 플렉스 항목이 배치되는 방식을 결정합니다. justify-content( 메인에 수직):컨테이너(align-items: flex-start | flex-end | center | 기준선 | stretch;)
- flex-start: 교차 시작 항목의 경계가 교차 시작 라인에 있습니다.
- flex-end: 교차 시작 항목의 경계가 교차 끝 선에 위치합니다.
- center: 항목이 교차 축의 중앙에 배치됩니다.
- 기준선: 요소가 기준선에 따라 정렬됩니다.
- stretch(기본값): 컨테이너를 채우기 위해 요소가 늘어납니다( 주어진 최소 너비 / 최대 너비).
콘텐츠 정렬
이 속성을 사용하면 justify-content 속성이 개별 항목을 기본 축에 정렬하는 방식과 유사하게 교차 축에 여유 공간이 있을 때 플렉스 컨테이너 내에서 라인을 정렬할 수 있습니다.참고: 이 속성은 플렉스 항목 행이 하나만 있는 경우 작동하지 않습니다.
컨테이너(align-content: flex-start | flex-end | center | space- between | space-around | stretch;)
- flex-start: 줄은 컨테이너의 시작 부분에 위치합니다.
- flex-end: 라인은 컨테이너의 끝에 위치합니다.
- center: 라인은 컨테이너의 중앙에 위치합니다.
- space-between: 줄 간격이 균일합니다. 첫 번째 줄은 컨테이너의 시작 부분에 있고 마지막 줄은 끝에 있습니다.
- space-around: 선이 서로 같은 거리에 균일하게 배치됩니다.
- stretch(기본값): 나머지 공간을 채우기 위해 줄이 늘어납니다.
자식 속성
(플렉스 아이템)
주문하다
기본적으로 플렉스 항목은 소스 순서대로 정렬됩니다. 그러나 order 속성은 항목이 플렉스 컨테이너에 표시되는 순서를 제어합니다.항목(주문:
플렉스 성장
이 속성을 사용하면 플렉스 항목이 필요에 따라 "성장"할 수 있습니다. 비율로 작용하는 무차원 값을 취합니다. 이 값은 항목이 차지할 수 있는 플렉스 컨테이너 내부의 사용 가능한 공간을 결정합니다.모든 항목의 flex-grow가 1로 설정된 경우 각 자식 항목은 컨테이너 내에서 동일한 크기로 설정됩니다. 자식 요소 중 하나를 2로 설정하면 다른 요소보다 두 배의 공간을 차지합니다.
항목(플렉스 성장:
플렉스 수축
이 속성은 플렉스 항목을 필요에 따라 축소합니다.
항목(플렉스 수축:
음수는 허용되지 않습니다.
플렉스 기반
이 속성은 나머지 공간을 할당하기 전에 요소의 기본 크기를 결정합니다.
항목(플렉스 기반:
몸을 풀다
이 속성은 flex-grow, flex-shrink 및 flex-basis 조합의 약어입니다. 두 번째 및 세 번째 매개변수(flex-shrink 및 flex-basis)는 선택 사항입니다. 기본값: 0 1 자동:
항목(플렉스: 없음 | [<"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }
스스로 정렬
이 속성을 사용하면 기본 정렬( 또는 align-items 속성으로 정의) 개별 플렉스 항목의 경우.align-items 속성에 대한 설명에서 사용 가능한 값을 찾을 수 있습니다.
항목(align-self: auto | flex-start | flex-end | center | 기준선 | stretch;)
float, clear 및 vertical-align은 flex 요소에서 작동하지 않습니다.
의 예
아주 시작하자 간단한 예, 거의 매일의 문제 해결: 완벽한 중심 정렬. flexbox를 사용하면 이보다 더 쉬울 수 없습니다.
부모(디스플레이: flex; 높이: 300px; / * 또는 무엇이든 * /) .child(너비: 100px; / * 또는 무엇이든 * / 높이: 100px; / * 또는 무엇이든 * / margin: auto; / * Magic ! * / )
이 예제는 자동으로 설정된 margin 속성이 추가 공간을 소비한다는 사실을 기반으로 합니다. 따라서 이러한 들여쓰기는 요소를 두 축의 중심에 정확히 정렬합니다.
이제 몇 가지 속성을 더 사용해 보겠습니다. 6개의 요소 목록이 있고 모두 고정 크기( 미학을 위해), 그러나 자동 채우기 옵션이 있습니다.
브라우저 창의 크기를 조정할 때 모든 것이 보기 좋게 표시되도록 가로 축을 따라 균일한 간격으로 보기 좋게 만들려고 합니다( 미디어 쿼리를 사용하지 않고):
Flex-container (/ * 먼저 플렉스 레이아웃 컨텍스트를 만듭니다. * / display: flex; / * 그런 다음 흐름 방향을 정의하고 항목을 래핑하려는 경우. * 다음과 동일함을 기억하십시오. * flex-direction : row; * flex-wrap: wrap; * / flex-flow: row wrap; / * 이제 남은 공간을 할당하는 방법을 정의합니다. * / justify-content: space-around;)
준비가 된! 나머지는 모두 이미 디자인 문제입니다. 다음은 이 예제의 데모입니다. 링크를 따라 창 크기를 조정하여 어떤 일이 일어나는지 확인하십시오.
HTML:
CSS:
플렉스 컨테이너(패딩: 0, 여백: 0, 목록 스타일: 없음, 디스플레이: -webkit-box, 디스플레이: -moz-box, 디스플레이: -ms-flexbox, 디스플레이: -webkit-flex, 디스플레이: flex, -webkit-flex-flow: 행 줄 바꿈; justify-content: space-around;) .flex-item (배경: 토마토, 패딩: 5px, 너비: 200px, 높이: 150px, margin-top: 10px, line-height: 150px, 색상: 흰색, 글꼴 두께: 굵게, 글꼴 크기: 3em, 텍스트 정렬: 가운데;)
한 가지 더 시도해 보겠습니다. 웹 사이트 맨 위에 오른쪽 정렬된 탐색 메뉴가 있지만 중간 크기 화면의 중앙에 있고 작은 화면 장치의 경우 한 열에 배치되기를 원한다고 가정해 보겠습니다. 모든 것이 매우 간단합니다.
CSS:
/ * 큰 화면 * / .navigation (디스플레이: flex; flex-flow: 행 줄 바꿈; / * 주축을 따라 줄 끝에 항목 정렬 * / justify-content: flex-end;) / * 중간 화면 * / @media all and (max-width: 800px) (.navigation (/ * 중간 화면의 경우 요소 사이의 여유 공간을 균등하게 분배하는 요소를 가운데에 배치합니다. * / justify-content: space-around;)) / * 작은 화면 * / @media all 및 (최대 너비: 500px) (.navigation(/ * 작은 화면우리는 행이 아니라 열로 방향을 사용합니다 * / flex-direction: column; ))
HTML:
CSS:
탐색(목록 스타일: 없음, 여백: 0, 배경: deepskyblue, 디스플레이: -webkit-box, 디스플레이: -moz-box, 디스플레이: -ms-flexbox, 디스플레이: -webkit-flex, 디스플레이: flex, -webkit -flex-flow: 행 줄 바꿈; justify-content: flex-end;) .navigation a (텍스트 장식: 없음; 표시: 블록; 패딩: 1em; 색상: 흰색;) .navigation a: hover (배경: 어둡게( deepskyblue, 2%);) @media all 및 (최대 너비: 800px) (.navigation(justify-content: space-around;)) @media all 및 (최대 너비: 600px) (.navigation(-webkit- flex-flow: 열 줄 바꿈, flex-flow: 열 줄 바꿈, 패딩: 0;) 탐색 a (텍스트 정렬: 가운데, 패딩: 10px, 테두리 위쪽: 1픽셀 솔리드 rgba(255,255,255,0.3), 테두리 아래쪽: 1px solid rgba (0,0,0,0.1);) Navigation li: last-of-type a (border-bottom: none;))
플렉스 아이템의 '유연성'을 가지고 놀면서 더 잘 해보자. 전체 너비 머리글과 바닥글이 있는 3열 모바일 레이아웃은 어떻습니까? 그리고 소스 코드에 의해 주어진 순서와 독립적인 요소의 출력으로:
CSS:
Wrapper (display: flex; flex-flow: row wrap;) / * 모든 항목을 100% 너비로 설정 * / .header, .main, .nav, .aside, .footer (flex: 1 100%;) / * In 이 경우에 초점을 맞추기 위해 모바일 기기우리는 원래 순서에 의존합니다: * 1.header * 2.navigation * 3.base * 4.sidebar * 5.footer * / / * Medium screens * / @media all and (min-width: 600px) (/ * 모두 사이드바는 같은 줄에 있습니다. * / .aside (flex: 1 auto;)) / * 큰 화면 * / @media all 및 (min-width: 800px) (/ * 첫 번째 사이드바와 본문의 표시 순서를 반전하고, 그리고 메인 요소가 두 개의 사이드바보다 최대 두 배의 공간을 차지하도록 지시합니다. * / .main (flex: 2 0px;) .aside-1 (order: 1;) .main (order: 2;) .aside- 2(순서: 3;) .바닥글(순서: 4;))
HTML:
Pellentesque 서식지 morbi tristique senectus et netus et malesuada 명성 ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. 마우리스 플라세라트 엘리펜드 레오.
CSS:
래퍼(디스플레이: -webkit-box, 디스플레이: -moz-box, 디스플레이: -ms-flexbox, 디스플레이: -webkit-flex, 디스플레이: flex, -webkit-flex-flow: 행 랩, flex-flow: 행 랩) ; font-weight: bold; text-align: center;) .wrapper> * (패딩: 10px; flex: 1 100%;) .header (배경: 토마토;) .footer (배경: 연녹색;) .main (텍스트 -align: 왼쪽; 배경: deepskyblue;) .aside-1(배경: 금색;) .aside-2(배경: 핫핑크) @media all 및 (최소 너비: 600px) (.aside(flex: 1 auto; )) @media all 및 (최소 너비: 800px) (.main(flex: 2 0px;) .aside-1(순서: 1;) .main(순서: 2;) .aside-2(순서: 3; ) .바닥글(순서: 4;))
flexbox 접두사 사용
Flexbox를 사용하려면 대부분의 브라우저에서 공급업체 접두사를 지원해야 합니다. 여기에는 속성 앞에 공급업체 접두사를 사용하는 것뿐만 아니라 완전히 다른 속성 이름과 값이 포함됩니다.
이는 flexbox 사양이 "이전", "트위너"(중급) 및 "새" 버전을 생성하면서 시간이 지남에 따라 진화했기 때문입니다.
아마도 이 상황에서 가장 좋은 방법은 새로운(최종) 구문을 사용하여 코드를 작성하고 롤백을 매우 잘 처리하는 Autoprefixer를 통해 CSS를 실행하는 것입니다.
또는 다음은 어떤 작업을 수행해야 하는지에 대한 아이디어를 제공하는 일부 접두사에 대한 도움말을 위한 Sass 메서드 @mixin입니다.
SCSS:
@mixin flexbox() (디스플레이: -webkit-box, 디스플레이: -moz-box, 디스플레이: -ms-flexbox, 디스플레이: -webkit-flex, 디스플레이: flex;) @mixin flex($ 값) (-webkit- box-flex: $ values; -moz-box-flex: $ values; -webkit-flex: $ values; -ms-flex: $ values; flex: $ values;) @mixin order ($ val) (-webkit- box-ordinal-group: $ val, -moz-box-ordinal-group: $ val, -ms-flex-order: $ val, -webkit-order: $ val, order: $ val;) .wrapper(@include flexbox();) .item(@include 플렉스(1 200px), @include 주문(2);)
브라우저 지원
flexbox "버전"으로 다음과 같이 나뉩니다.
- (new) - 사양의 최신 구문에 대한 지원을 의미합니다(예: display: flex;
CSS 플렉스박스 (Flexible Box 레이아웃 모듈)- 유연한 컨테이너 레이아웃 모듈 - 축의 개념을 기반으로 요소를 배열하는 방법입니다.
플렉스박스는 플렉스 컨테이너그리고 플렉스 아이템... Flex 항목은 행이나 열로 정렬할 수 있으며 나머지 여유 공간은 다양한 방식으로 이들 사이에 분배됩니다.
flexbox 모듈을 사용하면 다음 작업을 수행할 수 있습니다.
- 항목을 왼쪽에서 오른쪽, 오른쪽에서 왼쪽, 위에서 아래 또는 아래에서 위로의 네 가지 방향 중 하나로 정렬합니다.
- 항목의 표시 순서를 재정의합니다.
- 사용 가능한 공간에 맞게 요소의 크기를 자동으로 조정합니다.
- 수평 및 수직 센터링으로 문제를 해결하십시오.
- 내용물이 넘치지 않도록 용기 안에 포장하십시오.
- 동일한 높이의 기둥을 만듭니다.
- 페이지 하단에 고정된 만들기를 만듭니다.
Flexbox는 1차원 레이아웃(예: navbar) 생성과 같은 특정 문제를 해결합니다. 플렉스 항목은 축 중 하나를 따라 배치될 수 있기 때문입니다.
현재 모듈 문제 및 브라우저 간 솔루션 목록은 Philip Walton의 기사를 참조하십시오.
플렉스박스란?
브라우저 지원
즉: 11.0, 10.0 -ms-
파이어폭스: 28.0, 18.0 -모즈-
크롬: 29.0, 21.0 -웹킷-
원정 여행: 6.1 -웹킷-
오페라: 12.1 -웹킷-
iOS 사파리: 7.0 -웹킷-
오페라 미니: 8
안드로이드 브라우저: 4.4, 4.1 -웹킷-
안드로이드용 크롬: 44
1. 기본 개념
쌀. 1. 플렉스박스 모델
특정 용어 집합은 Flexbox 모듈을 설명하는 데 사용됩니다. flex-flow 값 및 쓰기 모드는 이러한 용어가 물리적 방향(상단/우측/하단/좌측), 축: 수직/수평 및 치수: 너비/높이에 대응하는 방식을 정의합니다.
주축- 플렉스 아이템이 배치되는 축. 그것은 주요 차원에서 확장됩니다.
메인 시작과 메인 엔드- 플렉스 항목이 배치되는 기준으로 플렉스 컨테이너의 시작 및 끝 면을 정의하는 라인(메인 시작에서 메인 끝으로 시작).
메인 사이즈) - 플렉스 컨테이너 또는 플렉스 항목의 너비 또는 높이 중 기본 차원에 있는 것이 플렉스 컨테이너 또는 플렉스 항목의 기본 크기를 결정합니다.
교차 축- 주축에 수직인 축. 측면으로 확장됩니다.
교차 시작 및 교차 종료- 플렉스 항목이 배치되는 교차 축의 시작 및 끝 면을 정의하는 선입니다.
크로스 사이즈- 플렉스 컨테이너 또는 플렉스 항목의 너비 또는 높이 중 가로 치수에 있는 것이 가로 치수입니다.
쌀. 2. 행 및 열 모드
2. 플렉스 컨테이너
플렉스 컨테이너는 콘텐츠에 대한 새로운 유연한 서식 컨텍스트를 설정합니다. 플렉스 컨테이너는 블록 컨테이너가 아니므로 float, clear, vertical-align과 같은 CSS 속성은 자식 요소에 대해 작동하지 않습니다. 또한 플렉스 컨테이너는 텍스트에 열을 생성하는 column- * 속성과 :: first-line 및 :: first-letter 의사 요소의 영향을 받지 않습니다.
flexbox 레이아웃 모델은 자식 상자를 포함하는 부모 html 요소의 display CSS 속성에 있는 특정 값에 바인딩됩니다. 이 모델을 사용하여 요소를 제어하려면 다음과 같이 display 속성을 설정해야 합니다.
Flex-container(/ * 블록 수준 플렉스 컨테이너 생성 * / display: -webkit-flex; display: flex;) Flex-container(/ * 행 수준 플렉스 컨테이너 생성 * / display: -webkit-inline- 플렉스; 디스플레이: 인라인 플렉스;)
이러한 속성 값을 설정한 후 각 자식은 자동으로 플렉스 항목이 되어 한 행(주 축을 따라)에 정렬됩니다. 그러나 블록 및 인라인 자식은 동일하게 동작합니다. 블록의 너비는 요소의 패딩과 테두리를 고려하여 해당 콘텐츠의 너비와 같습니다.
쌀. 3. flexbox 모델에서 항목 정렬부모 블록에 래퍼가 없는 텍스트나 이미지가 포함되어 있으면 익명의 플렉스 항목이 됩니다. 텍스트는 컨테이너 블록의 상단 가장자리에 정렬되고 이미지 높이는 블록 높이와 같아집니다. 변형됩니다.
3. 플렉스 아이템
Flex 항목은 흐름에서 Flex 컨테이너의 내용을 나타내는 블록입니다. 플렉스 컨테이너는 다음 기능을 제공하는 콘텐츠에 대한 새로운 형식 지정 컨텍스트를 설정합니다.
- 플렉스 항목의 경우 표시 속성 값이 잠겨 있습니다. 표시 값: 인라인 블록; 및 표시: 테이블 셀; 디스플레이에서 계산됨: 블록; ...
- 항목 사이의 공백이 사라집니다. 항목 간 텍스트가 익명의 플렉스 항목으로 래핑되더라도 자체 플렉스 항목이 되지 않습니다. 익명 플렉스 항목의 내용은 자체적으로 스타일을 지정할 수 없지만 플렉스 컨테이너에서 글꼴 설정과 같은 내용을 상속합니다.
- 절대 위치의 플렉스 항목은 플렉스 레이아웃의 레이아웃에 참여하지 않습니다.
- 인접한 플렉스 항목의 여백 필드는 축소되지 않습니다.
- 여백 및 패딩 백분율은 포함하는 블록의 내부 크기에서 계산됩니다.
- 여백: 자동; 확장하여 해당 차원의 추가 공간을 흡수합니다. 인접한 플렉스 항목을 정렬하거나 확장하는 데 사용할 수 있습니다.
- 플렉스 항목의 기본 자동 최소 크기는 콘텐츠의 최소 크기입니다. 즉, min-width: auto; ... 스크롤 컨테이너의 경우 자동 최소 크기는 일반적으로 0입니다.
4. 플렉스 항목의 표시 순서 및 방향
플렉스 컨테이너의 내용은 임의의 방향과 순서로 배치할 수 있습니다(컨테이너 내에서 플렉스 항목을 재정렬하면 시각적 렌더링에만 영향을 줍니다).
4.1. 주축 방향: 굴곡 방향
속성은 플렉스 컨테이너에만 해당됩니다. 현재 쓰기 모드에 따라 플렉스 항목이 쌓이는 주 축의 방향을 제어합니다. 상속되지 않습니다.
플렉스 방향 | |
---|---|
값: | |
열 | 기본값은 왼쪽에서 오른쪽입니다(rtl에서는 오른쪽에서 왼쪽). Flex 항목은 한 줄에 배치됩니다. 주축의 주 시작 및 주 끝 방향은 인라인 축의 인라인 시작 및 인라인 끝과 일치합니다. |
행 반전 | 오른쪽에서 왼쪽 방향(rtl에서 왼쪽에서 오른쪽으로). Flex 항목은 컨테이너의 오른쪽 가장자리를 기준으로 한 줄에 배치됩니다(rtl - 왼쪽). |
열 | 위에서 아래로 방향. Flex 항목은 열에 배치됩니다. |
열 반전 | 아래에서 위로 역순으로 요소가 있는 열입니다. |
초기의 | |
상속하다 |
쌀. 4. 왼쪽에서 오른쪽으로 쓰는 언어의 flex-direction 속성
통사론
Flex-container (디스플레이: -webkit-flex; -webkit-flex-direction: row-reverse; display: flex; flex-direction: row-reverse;)
4.2. 플렉스 컨테이너의 여러 줄 제어: flex-wrap
속성은 플렉스 컨테이너가 단일 라인인지 다중 라인인지를 결정하고 플렉스 컨테이너의 새 라인이 쌓이는 방향을 결정하는 교차 축 방향도 설정합니다.
기본적으로 플렉스 항목은 주 축을 따라 한 줄에 쌓입니다. 오버플로되면 플렉스 컨테이너의 경계 상자 밖으로 이동합니다. 속성은 상속되지 않습니다.
쌀. 5. LTR 언어용 Flex-Wrap 속성으로 여러 줄 제어
통사론
Flex-container(디스플레이: -webkit-flex; -webkit-flex-wrap: 랩; 디스플레이: flex; flex-wrap: 랩;)
4.3. 방향 및 여러 줄의 약어: flex-flow
이 속성을 사용하면 기본 및 교차 축의 방향을 정의할 수 있을 뿐만 아니라 필요한 경우 여러 줄에 걸쳐 플렉스 항목을 래핑하는 기능도 정의할 수 있습니다. flex-direction 및 flex-wrap 속성의 약어입니다. 기본 flex-flow: row nowrap; ... 속성은 상속되지 않습니다.
통사론
Flex-container(디스플레이: -webkit-flex; -webkit-flex-flow: 행 줄 바꿈, 디스플레이: flex, flex-flow: 행 줄 바꿈;)
4.4. 플렉스 항목의 표시 순서: order
속성은 플렉스 항목이 플렉스 컨테이너 내에서 표시되고 배치되는 순서를 결정합니다. 플렉스 항목에 적용됩니다. 속성은 상속되지 않습니다.
처음에는 모든 플렉스 항목의 순서가 0입니다. ... 요소에 -1 사이의 값을 지정하면 타임라인의 시작 부분으로 이동하고 값 1은 끝 부분으로 이동합니다. 여러 플렉스 항목이 동일한 주문 값을 갖는 경우 원래 순서에 따라 표시됩니다.
통사론
Flex-container (디스플레이: -webkit-flex; 디스플레이: flex;) .flex-item (-webkit-order: 1; order: 1;)
쌀. 6. 플렉스 아이템 표시 순서
5. 플렉스 아이템의 유연성
유연한 레이아웃의 정의 측면은 기본 차원의 사용 가능한 공간을 채우기 위해 너비/높이(주축에 있는 크기에 따라 다름)를 변경하여 플렉스 항목을 "접는" 기능입니다. 이것은 flex 속성을 사용하여 수행됩니다. 플렉스 컨테이너는 컨테이너를 채우기 위해 자식 사이에 여유 공간을 할당하거나(플렉스 성장 비율에 비례하여) 오버플로를 방지하기 위해 자식을 축소합니다(플렉스 축소 비율에 비례하여).
flex-grow 및 flex-shrink 값이 0이면 플렉스 항목은 완전히 유연하지 않고, 그렇지 않으면 플렉스합니다.
5.1. 하나의 속성으로 유연한 크기 조정: flex
이 속성은 flex-grow, flex-shrink 및 flex-basis 속성의 약어입니다. 기본값: 플렉스: 0 1 자동; ... 하나 또는 세 가지 속성 값을 모두 지정할 수 있습니다. 속성은 상속되지 않습니다.
통사론
Flex-container(디스플레이: -webkit-flex; 디스플레이: flex;) .flex-item(-webkit-flex: 3 1 100px; -ms-flex: 3 1 100px; flex: 3 1 100px;)
5.2. 성장률: 플렉스 성장
속성은 양의 공백을 할당할 때 플렉스 컨테이너의 다른 플렉스 항목에 비해 하나의 플렉스 항목이 얼마나 커질지 제어합니다. 한 행에 있는 flex 항목의 flex-grow 값의 합이 1보다 작으면 여유 공간의 100% 미만을 차지합니다. 속성은 상속되지 않습니다.
쌀. 7. flex-grow로 탐색 모음의 여유 공간 관리하기통사론
Flex-container(디스플레이: -webkit-flex; 디스플레이: flex;). Flex-item(-webkit-flex-grow: 3; flex-grow: 3;)
5.3. 수축 비율: 플렉스 수축
속성은 음수 공백을 할당할 때 플렉스 항목이 다른 플렉스 항목에 비해 얼마나 축소되는지 지정합니다. 플렉스 기반 기본 크기를 곱합니다. 음수 공간은 항목이 축소될 수 있는 정도에 비례하여 할당되므로 예를 들어 작은 플렉스 항목은 더 큰 플렉스 항목이 눈에 띄게 줄어들 때까지 0으로 축소되지 않습니다. 속성은 상속되지 않습니다.
쌀. 8. 플렉스 항목을 연속으로 좁히기
통사론
Flex-container(디스플레이: -webkit-flex; 디스플레이: flex;). Flex-item(-webkit-flex-shrink: 3, flex-shrink: 3;)
5.4. 기본 크기: 플렉스 기반
이 속성은 플렉스 비율에 따라 여유 공간이 할당되기 전에 플렉스 항목의 초기 기본 크기를 설정합니다. auto와 content를 제외한 모든 값에 대해 기본 플렉스 크기는 가로 쓰기 모드에서 너비와 같은 방식으로 정의됩니다. 백분율은 플렉스 컨테이너의 크기에 상대적이며 크기가 지정되지 않은 경우 flex-basis에 사용되는 값은 콘텐츠의 크기입니다. 상속되지 않습니다.
통사론
Flex-container(디스플레이: -webkit-flex; 디스플레이: flex;) Flex-item(-webkit-flex-basis: 100px; flex-basis: 100px;)
6. 정렬
6.1. 주축 정렬: justify-content
이 속성은 플렉스 항목을 플렉스 컨테이너의 기본 축에 정렬하여 플렉스 항목이 차지하지 않는 여유 공간을 분배합니다. 항목이 플렉스 컨테이너로 변환될 때 플렉스 항목은 기본적으로 함께 그룹화됩니다(여백이 설정되어 있지 않은 경우). margin 및 flex-grow 값을 계산한 후 간격이 추가됩니다. 항목에 0이 아닌 flex-grow 또는 margin이 있는 경우: auto; , 속성은 영향을 미치지 않습니다. 속성은 상속되지 않습니다.
값: | |
플렉스 스타트 | 기본값. Flex 항목은 Flex 컨테이너의 시작 라인에서 멀어지는 방향으로 배치됩니다. |
플렉스 엔드 | Flex 항목은 Flex 컨테이너의 끝선에서 멀어지는 방향으로 배치됩니다. |
센터 | Flex 항목은 Flex 컨테이너의 중앙에 정렬됩니다. |
사이의 공백 | 플렉스 아이템은 라인을 따라 고르게 분포됩니다. 첫 번째 플렉스 항목은 시작 라인의 가장자리와 같은 높이에 배치되고, 마지막 플렉스 항목은 끝 라인의 가장자리와 같은 높이에 위치하며, 줄의 나머지 플렉스 항목은 두 개의 인접한 항목 사이의 공간이 되도록 간격을 둡니다. 는 ~와 마찬가지로. 나머지 공백이 음수이거나 한 줄에 하나의 플렉스 항목만 있는 경우 이 값은 flex-start 매개변수와 동일합니다. |
스페이스 어라운드 | 한 줄의 Flex 항목은 두 개의 인접한 플렉스 항목 사이의 거리가 동일하고 첫 번째 / 마지막 플렉스 항목과 플렉스 컨테이너의 가장자리 사이의 거리는 플렉스 항목 사이 거리의 절반이 되도록 간격을 두고 있습니다. |
초기의 | 속성 값을 기본값으로 설정합니다. |
상속하다 | 부모 요소에서 속성 값을 상속합니다. |
쌀. 9. Justify-Content 속성을 사용하여 항목 정렬 및 여유 공간 할당
통사론
플렉스 컨테이너(디스플레이: -webkit-flex; -webkit-justify-content: flex-start, 디스플레이: flex, justify-content: flex-start;)
6.2. 교차 축 정렬: align-items 및 align-self
Flex 항목은 Flex 컨테이너의 현재 행의 교차 축에 정렬할 수 있습니다. align-items는 익명의 플렉스 항목을 포함한 모든 플렉스 컨테이너 항목에 대한 정렬을 설정합니다. align-self를 사용하면 개별 플렉스 항목에 대해 이 정렬을 재정의할 수 있습니다. 플렉스 항목의 가로 여백이 자동인 경우 align-self는 효과가 없습니다.
6.2.1. 항목 정렬
익명의 플렉스 항목을 포함한 플렉스 항목을 교차 축을 따라 정렬합니다. 상속되지 않습니다.
값: | |
플렉스 스타트 | |
플렉스 엔드 | |
센터 | |
기준선 | 정렬에 관련된 모든 플렉스 항목의 기준선은 동일합니다. |
뻗기 | |
초기의 | 속성 값을 기본값으로 설정합니다. |
상속하다 | 부모 요소에서 속성 값을 상속합니다. |
통사론
플렉스 컨테이너(디스플레이: -webkit-flex; -webkit-align-items: flex-start, 디스플레이: flex, align-items: flex-start;)
6.2.2. 스스로 정렬
속성은 단일 플렉스 항목을 플렉스 컨테이너의 높이에 정렬하는 역할을 합니다. align-items에 의해 지정된 정렬을 재정의합니다. 상속되지 않습니다.
값: | |
자동 | 기본값. 플렉스 항목은 플렉스 컨테이너의 align-items 속성에 지정된 정렬을 사용합니다. |
플렉스 스타트 | 플렉스 항목의 상단 가장자리는 교차 축의 원점을 통과하는 플렉스 라인(또는 요소의 지정된 여백과 테두리가 주어지면 간격)과 같은 높이로 배치됩니다. |
플렉스 엔드 | 플렉스 항목의 아래쪽 가장자리는 교차 축의 끝을 통과하는 플렉스 라인(또는 항목의 여백과 테두리가 주어지면 간격)과 같은 높이로 배치됩니다. |
센터 | 플렉스 항목의 여백은 플렉스 라인 내의 교차 축 중앙에 있습니다. |
기준선 | 플렉스 항목은 기준선에 맞춰 정렬됩니다. |
뻗기 | 플렉스 항목의 교차 크기 조정이 자동이고 교차 여백이 자동이 아닌 경우 항목이 늘어납니다. 기본값. |
초기의 | 속성 값을 기본값으로 설정합니다. |
상속하다 | 부모 요소에서 속성 값을 상속합니다. |
쌀. 11. 개별 플렉스 항목 정렬
통사론
Flex-container(디스플레이: -webkit-flex; 디스플레이: flex;) Flex-item(-webkit-align-self: center, align-self: center;)
6.3. 플렉스 컨테이너의 행 정렬: align-content
이 속성은 justify-content 속성을 사용하여 기본 축에 개별 항목을 정렬하는 것과 유사하게 교차 축에 추가 공간이 있을 때 플렉스 컨테이너의 행을 정렬합니다. 이 속성은 한 줄짜리 플렉스 컨테이너에 영향을 주지 않습니다. 상속되지 않습니다.
값: | |
플렉스 스타트 | 라인은 플렉스 컨테이너의 시작 부분을 향해 쌓입니다. 첫 번째 라인의 가장자리는 플렉스 컨테이너의 가장자리에 가깝게 배치되고, 각 후속 라인은 이전 라인에 가깝게 배치됩니다. |
플렉스 엔드 | 라인은 플렉스 컨테이너의 끝을 향해 쌓입니다. 마지막 줄의 가장자리는 플렉스 컨테이너의 가장자리에 가깝게 배치되고 각 이전 줄은 다음 줄에 가깝게 배치됩니다. |
센터 | 라인은 플렉스 컨테이너의 중심을 향해 쌓입니다. 행은 서로 가깝고 플렉스 컨테이너 콘텐츠의 시작 가장자리와 첫 번째 줄 사이, 그리고 플렉스 컨테이너 콘텐츠의 끝 가장자리와 마지막 줄 사이에 동일한 간격으로 플렉스 컨테이너의 중심에 정렬됩니다. |
사이의 공백 | 라인은 플렉스 컨테이너에서 균일한 간격으로 배치됩니다. 남은 여유 공간이 음수이거나 플렉스 컨테이너에 플렉스 라인이 하나만 있는 경우 이 값은 flex-start와 동일합니다. 그렇지 않으면 첫 번째 줄의 가장자리는 플렉스 컨테이너 콘텐츠의 시작 가장자리에 가깝게 배치되고 마지막 줄의 가장자리는 플렉스 컨테이너 콘텐츠의 후행 가장자리에 가깝게 배치됩니다. 나머지 선은 인접한 두 선 사이의 거리가 동일하도록 분포됩니다. |
스페이스 어라운드 | 라인은 양쪽 끝에 절반의 공간이 있는 플렉스 컨테이너에 균일한 간격으로 배치됩니다. 남은 여유 공간이 음수이면 이 값은 중심 센트와 동일합니다. 그렇지 않으면 두 개의 인접한 줄 사이의 간격이 동일하도록 줄 간격이 지정되고 첫 번째/마지막 줄과 플렉스 컨테이너 콘텐츠의 가장자리 사이의 간격은 줄 사이의 간격의 절반이 됩니다. |
뻗기 | 기본값. 플렉스 항목의 행은 사용 가능한 모든 공간을 채우기 위해 균등하게 늘어납니다. 남은 여유 공간이 음수이면 이 값은 flex-start와 동일합니다. 그렇지 않으면 여유 공간이 모든 선 사이에 균등하게 나누어져 가로 크기가 늘어납니다. |
초기의 | 속성 값을 기본값으로 설정합니다. |
상속하다 | 부모 요소에서 속성 값을 상속합니다. |
통사론
Flex-container(디스플레이: -webkit-flex; -webkit-flex-flow: 행 랩; -webkit-align-content: flex-end; 디스플레이: flex; flex-flow: 행 랩; align-content: flex-end ; 높이: 100px;)