CSS3 플렉스 박스(플렉스...로그인

CSS3 플렉스 박스(플렉스 박스)

레이아웃은 웹 애플리케이션의 스타일 디자인에서 매우 중요한 부분입니다. 레이아웃은 페이지에 있는 다양한 구성 요소와 요소의 크기와 위치를 결정하는 데 사용됩니다. 반응형 사용자 인터페이스의 인기로 인해 웹 애플리케이션은 일반적으로 다양한 장치 크기와 브라우저 해상도에 적응해야 합니다. 반응형 사용자 인터페이스 디자인의 가장 중요한 측면은 레이아웃입니다. 창 크기에 따라 레이아웃을 조정해야 하며, 최상의 디스플레이 효과를 얻으려면 구성 요소의 크기와 위치를 변경해야 합니다. 이는 또한 레이아웃 논리를 더욱 복잡하게 만듭니다.

이 기사에서는 CSS3 사양에 도입된 새로운 레이아웃 모델인 플렉스 박스 모델을 소개합니다. Flexbox 모델은 간단한 방법으로 여러 가지 일반적인 복잡한 레이아웃 요구 사항을 충족할 수 있습니다. 장점은 개발자가 특정 구현 방법을 제공하지 않고 레이아웃이 가져야 하는 동작만 선언한다는 것입니다. 브라우저는 실제 레이아웃을 담당합니다. 이 레이아웃 모델은 주요 브라우저에서 지원됩니다.


CSS3 유연한 상자 콘텐츠

Flexible 상자는 Flex 컨테이너와 Flex 항목으로 구성됩니다.

플렉서블 컨테이너는 디스플레이 속성 값을 flex 또는 inline-flex로 설정하여 플렉서블 컨테이너로 정의됩니다.

유연한 컨테이너에는 하나 이상의 유연한 하위 요소가 포함되어 있습니다.

참고: 유연한 컨테이너 외부와 유연한 하위 요소 내에서는 정상적으로 렌더링됩니다. 플렉스 박스는 플렉스 하위 요소가 플렉스 컨테이너 내에 배치되는 방식만 정의합니다.

Flexible 하위 요소는 일반적으로 Flexbox 내 한 행에 표시됩니다. 기본적으로 컨테이너당 하나의 행만 있습니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style> 
.flex-container {
    display: -webkit-flex;
    display: flex;
    width: 400px;
    height: 150px;
    background-color: yellow;
}
.flex-item {
    background-color: cornflowerblue;
    width: 100px;
    height: 100px;
    margin: 10px;
}
</style>
</head>
<body>
<div class="flex-container">
  <div class="flex-item"> 1</div>
  <div class="flex-item"> 2</div>
  <div class="flex-item"> 3</div>  
</div>
</body>
</html>


flex-direction property

상위 컨테이너에서 플렉스 박스 객체의 하위 요소 위치를 설정하거나 검색합니다.

Syntax

flex-direction: 행 | 행 역방향 | 열 | 열 역방향

행: 왼쪽에서 오른쪽으로(왼쪽 정렬) 정렬됩니다.

row-reverse: 가로 배열을 반대로 합니다(오른쪽 정렬, 뒤에서 앞으로, 마지막 항목이 앞에 옵니다.

column: 세로 배열.

row-reverse: 세로 배열을 반대로 합니다. 뒤로 앞으로는 마지막 항목이 맨 위에 있습니다.

Firefox, Opera 및 Chrome은 flex-direction 속성을 지원합니다


justify-content 속성

주축(가로축) 방향으로 Flexbox 요소의 정렬을 설정하거나 검색합니다.

이 속성은 Flexbox 행의 모든 ​​하위 요소를 축소할 수 없거나 최대 크기에 도달한 경우에 도움이 될 수 있습니다. 이 속성은 정렬도 제어합니다. 요소가 행을 오버플로하는 경우.

Syntax

justify-content: flex-start | flex-end | center | space-around


flex-start: 행 위치 정렬. 행의 첫 번째 자식의 기본 시작 가장자리는 행의 기본 시작 가장자리와 정렬되고 모든 후속 Flex 항목은 이전 항목과 정렬됩니다.

flex-end: 플렉스 박스 요소가 행의 끝을 향해 정렬됩니다. 행의 첫 번째 하위 요소의 기본 끝 가장자리는 행의 기본 끝 가장자리와 정렬되고 모든 후속 플렉스 항목은 이전 항목과 정렬됩니다.

center: Flexbox 요소가 행 중앙에 정렬됩니다. 행의 하위 요소는 서로 정렬되고 행 내 중심에 배치됩니다. 첫 번째 요소는 행의 기본 시작 위치에서 마지막 요소가 행의 기본 끝 위치에서 갖는 만큼의 여백을 갖습니다(나머지 공간이 있는 경우). 음수이면 양쪽 끝에서 동일한 길이의 오버플로가 유지됩니다.

space-between: Flexbox 요소가 행에 고르게 분산됩니다. 가장 왼쪽에 남은 공간이 음수이거나 행에 하위 항목이 하나만 있는 경우 이 값은 'flex-start'와 동일합니다. 다른 경우에는 첫 번째 요소의 여백은 줄의 기본 시작 여백과 정렬되고, 마지막 요소의 여백은 줄의 기본 끝 여백과 정렬되며, 나머지 플렉스 항목은 고르게 분포됩니다. 둘.

space-around: Flexbox 요소는 행에 균등하게 분산되어 양쪽 끝의 하위 요소 사이에 공간의 절반을 남깁니다. 가장 왼쪽의 남은 공간이 음수이거나 행에 Flexbox 항목이 하나만 있는 경우 이 값은 'center'와 동일합니다. 다른 경우에는 플렉스 박스 항목이 균등한 간격으로 배치되어 항목 사이에 동일한 공백이 있으며 첫 번째 요소 앞의 공간은 절반이고 마지막 요소 뒤의 공간은 항목 사이의 공간이 절반입니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
margin:0;padding:10px;list-style:none;background-color:#eee;}
.box li{width:100px;height:100px;border:1px solid #aaa;text-align:center;}
#box{
-webkit-flex-direction:row;
flex-direction:row;
}
#box2{
-webkit-flex-direction:row-reverse;
flex-direction:row-reverse;
}
#box3{
height:500px;
-webkit-flex-direction:column;
flex-direction:column;
}
#box4{
height:500px;
-webkit-flex-direction:column-reverse;
flex-direction:column-reverse;
}
</style>
</head>
<body>
    <h2>flex-direction:row</h2>
    <ul id="box" class="box">
    <li>a</li>
    <li>b</li>
    <li>c</li>
    </ul>
    <h2>flex-direction:row-reverse</h2>
    <ul id="box2" class="box">
    <li>a</li>
    <li>b</li>
    <li>c</li>
    </ul>
    <h2>flex-direction:column</h2>
    <ul id="box3" class="box">
    <li>a</li>
    <li>b</li>
    <li>c</li>
    </ul>
    <h2>flex-direction:column-reverse</h2>
    <ul id="box4" class="box">
    <li>a</li>
    <li>b</li>
    <li>c</li>
    </ul>
</body>
</html>


align-items 속성

플렉스 박스 요소의 교차축(세로축) 방향 정렬을 설정하거나 검색합니다.

Syntax

align-items: flex-start | flex-end | center | Stretch 위치의 경계는 행의 교차축 시작 경계에 바로 인접합니다.

flex-end: 플렉스박스 요소의 가로축(세로축) 시작 위치의 경계가 행의 가로축 끝 경계에 가깝습니다.

center: Flexbox 요소는 행의 교차축(세로축) 중앙에 위치합니다. (행의 크기가 Flexbox 요소의 크기보다 작으면 양방향으로 동일한 길이로 오버플로됩니다.)

baseline: 플렉스 박스 요소의 인라인 축과 측면 축이 동일한 경우 이 값은 'flex-start'와 동일합니다. 그렇지 않으면 이 값이 기준선 정렬에 참여하게 됩니다.

stretch: 교차 축 크기를 지정하는 속성 값이 'auto'인 경우 해당 값은 항목의 여백 상자 크기를 행 크기에 최대한 가깝게 만들지만 동시에 'min/ 최대 너비/높이' 속성 제한.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
width:400px;height:100px;margin:0;padding:0;border-radius:5px;list-style:none;background-color:#eee;}
.box li{margin:5px;padding:10px;border-radius:5px;background:#aaa;text-align:center;}
#box{
-webkit-justify-content:flex-start;
justify-content:flex-start;
}
#box2{
-webkit-justify-content:flex-end;
justify-content:flex-end;
}
#box3{
-webkit-justify-content:center;
justify-content:center;
}
#box4{
-webkit-justify-content:space-between;
justify-content:space-between;
}
#box5{
-webkit-justify-content:space-around;
justify-content:space-around;
}
</style>
</head>
<body>
<ul id="box" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>justify-content:flex-end</h2>
<ul id="box2" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>justify-content:center</h2>
<ul id="box3" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>justify-content:space-between</h2>
<ul id="box4" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>justify-content:space-around</h2>
<ul id="box5" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</body>
</html>


flex-wrap attribute

플렉스 박스 객체의 하위 요소가 상위 컨테이너를 초과할 때 래핑할지 여부를 설정하거나 검색합니다.

Syntax

flex-wrap: nowrap | Wrap | Wrap-reverse


nowrap: 하위 요소가 상위 컨테이너를 오버플로할 때 래핑하지 마세요.

wrap: 하위 요소가 상위 컨테이너를 오버플로하면 자동으로 래핑됩니다.

wrap-reverse: 랩 배열을 반대로 합니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
width:200px;height:100px;margin:0;padding:0;border-radius:5px;list-style:none;background-color:#eee;}
.box li{margin:5px;border-radius:5px;background:#aaa;text-align:center;}
.box li:nth-child(1){padding:10px;}
.box li:nth-child(2){padding:15px 10px;}
.box li:nth-child(3){padding:20px 10px;}
#box{
-webkit-align-items:flex-start;
align-items:flex-start;
}
#box2{
-webkit-align-items:flex-end;
align-items:flex-end;
}
#box3{
-webkit-align-items:center;
align-items:center;
}
#box4{
-webkit-align-items:baseline;
align-items:baseline;
}
#box5{
-webkit-align-items:strecth;
align-items:strecth;
}
</style>
</head>
<body>
<h2>align-items:flex-start</h2>
<ul id="box" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>align-items:flex-end</h2>
<ul id="box2" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>align-items:center</h2>
<ul id="box3" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>align-items:baseline</h2>
<ul id="box4" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>align-items:strecth</h2>
<ul id="box5" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</body>
</html>


align-content 속성

flexbox 스택 flex 행의 정렬을 설정하거나 검색합니다.

Syntax

align-content: flex-start | space-around | Stretch


flex-start: 컨테이너 시작 위치가 스택되었습니다. Flexbox 컨테이너에 있는 첫 번째 행의 교차축 시작 가장자리는 Flexbox 컨테이너의 교차축 시작 가장자리에 인접하고 각 후속 행은 이전 행에 인접합니다.

flex-end: 각 행은 플렉스 박스 컨테이너의 끝을 향해 쌓입니다. Flexbox 컨테이너의 마지막 행의 교차축 끝 경계는 Flexbox 컨테이너의 교차축 끝 경계에 가깝고 각 후속 행은 이전 행에 가깝습니다.

center: 각 행은 Flexbox 컨테이너의 중앙을 향해 쌓입니다. 행은 2개씩 정렬되고 Flex 컨테이너의 중앙에 배치되어 Flex 컨테이너의 교차축 시작 콘텐츠 가장자리와 첫 번째 행 사이의 거리와 컨테이너의 교차축 끝 콘텐츠 가장자리와 마지막 행 사이의 거리를 유지합니다. 거리는 동일합니다. (남은 공간이 음수인 경우 행은 양방향으로 동일한 거리로 쏟아집니다.)

space-between: 행은 Flexbox 컨테이너에 고르게 분포됩니다. 남은 공간이 음수이거나 Flex 컨테이너에 행이 하나만 있는 경우 이 값은 'flex-start'와 동일합니다. 다른 경우에는 첫 번째 행의 교차 축 시작 가장자리가 Flex 컨테이너의 교차 시작 콘텐츠 가장자리에 있고, 마지막 행의 교차 축 끝 가장자리가 Flex 컨테이너의 교차 축 끝 가장자리에 있고, 나머지 행은 다음과 같이 배열됩니다. Flexbox 창 사이의 공간이 동일하도록 합니다.

space-around: 각 행은 Flexbox 컨테이너에 고르게 분산되어 양쪽 끝의 하위 요소 사이에 공간의 절반을 남겨 둡니다. 남은 공간이 음수이거나 Flexbox 컨테이너에 행이 하나만 있는 경우 이 값은 'center'와 동일합니다. 다른 경우에는 행 사이의 공간이 동일하고 첫 번째 행 앞과 마지막 행 뒤의 공간이 다른 행 공간의 절반이 되는 방식으로 행이 Flexbox 컨테이너에 배열됩니다.

늘이기: 각 행이 늘어나 나머지 공간을 차지합니다. 남은 공간이 음수인 경우 이 값은 'flex-start'와 동일합니다. 다른 경우에는 교차축 크기를 확장하기 위해 남은 공간을 모든 행에 균등하게 나누어줍니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
width:220px;margin:0;padding:10px;list-style:none;background-color:#eee;}
.box li{width:100px;height:100px;border:1px solid #aaa;text-align:center;}
#box{
-webkit-flex-wrap:nowrap;
flex-wrap:nowrap;
}
#box2{
-webkit-flex-wrap:wrap;
flex-wrap:wrap;
}
#box3{
-webkit-flex-wrap:wrap-reverse;
flex-wrap:wrap-reverse;
}
</style>
</head>
<body>
<ul id="box" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>flex-wrap:wrap</h2>
<ul id="box2" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
<h2>flex-wrap:wrap-reverse</h2>
<ul id="box3" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</body>
</html>


order 속성

Flexbox 모델 객체의 하위 요소가 나타나는 순서를 설정하거나 검색합니다.

Syntax

order: <integer>

<integer>: 앞에 작은 값을 포함하여 정렬 순서를 정의하려면 정수 값을 사용하세요. 부정적일 수 있습니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
-webkit-flex-wrap:wrap;
flex-direction:wrap;
width:200px;height:200px;margin:0;padding:0;border-radius:5px;list-style:none;background-color:#eee;}
.box li{margin:5px;padding:10px;border-radius:5px;background:#aaa;text-align:center;}
#box{
-webkit-align-content:flex-start;
align-content:flex-start;
}
#box2{
-webkit-align-content:flex-end;
align-content:flex-end;
}
#box3{
-webkit-align-content:center;
align-content:center;
}
#box4{
-webkit-align-content:space-between;
align-content:space-between;
}
#box5{
-webkit-align-content:space-around;
align-content:space-around;
}
#box6{
-webkit-align-content:strecth;
align-content:strecth;
}
</style>
</head>
<body>
<h2>align-content:flex-start</h2>
<ul id="box" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<h2>align-content:flex-end</h2>
<ul id="box2" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<h2>align-content:center</h2>
<ul id="box3" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<h2>align-content:space-between</h2>
<ul id="box4" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<h2>align-content:space-around</h2>
<ul id="box5" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
<h2>align-content:strecth</h2>
<ul id="box6" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
</body>
</html>


align-self 속성

flexbox 요소 자체의 교차축(세로축) 방향 정렬을 설정하거나 검색합니다.

Syntax

align-self: auto | flex-end | center | Stretch


auto: 'auto' 그런 다음 요소 상위 요소의 'align-items' 값으로 평가되고, 상위 요소가 없는 경우 'stretch'로 평가됩니다.

flex-start: 플렉스박스 요소의 교차축(세로축) 시작 위치의 경계가 행의 교차축 시작 경계에 가깝습니다.

flex-end: 플렉스박스 요소의 교차축(세로축) 시작 위치의 경계가 행의 교차축 끝 경계에 가깝습니다.

center: Flexbox 요소는 행의 교차축(세로축) 중심에 있습니다. (행의 크기가 Flexbox 요소의 크기보다 작은 경우 양방향으로 동일한 길이로 오버플로됩니다.)

baseline: 플렉스 박스 요소의 인라인 축과 측면 축이 동일한 경우 이 값은 'flex-start'와 동일합니다. 그렇지 않으면 이 값이 기준선 정렬에 참여하게 됩니다.

stretch: 교차축 크기를 지정하는 속성 값이 'auto'인 경우 해당 값은 항목의 여백 상자 크기를 행 크기에 최대한 가깝게 만들지만 동시에 다음을 준수합니다. 'min/max-width/height' 속성 제한.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
margin:0;padding:10px;list-style:none;background-color:#eee;}
.box li{width:100px;height:100px;border:1px solid #aaa;text-align:center;}
#box li:nth-child(3){
-webkit-order:-1;
order:-1;
}
</style>
</head>
<body>
<ul id="box" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
</ul>
</body>
</html>


플렉스 속성

복합 속성. Flex Box 객체의 하위 요소가 공간을 할당하는 방법을 설정하거나 검색합니다.

약어가 flex:1인 경우 계산된 값은 다음과 같습니다. 1 1 0

Syntax

flex: none | - based ]


none: none 키워드의 계산된 값은 다음과 같습니다. 0 0 auto

[ flex-grow ]: 플렉스 박스 요소의 확장 비율을 정의합니다.

[ flex-shrink ]: 플렉스 박스 요소의 수축 비율을 정의합니다.

[ flex-basis ]: 플렉스 박스 요소의 기본 기준 값을 정의합니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"> 
<title>php.cn</title> 
<style>
.box{
display:-webkit-flex;
display:flex;
-webkit-align-items: flex-end;
height:100px;margin:0;padding:10px;border-radius:5px;list-style:none;background-color:#eee;}
.box li{margin:5px;padding:10px;border-radius:5px;background:#aaa;text-align:center;}
.box li:nth-child(1){
-webkit-align-self: flex-end;
align-self: flex-end;
}
.box li:nth-child(2){
-webkit-align-self: center;
align-self: center;
}
.box li:nth-child(3){
-webkit-align-self: flex-start;
align-self: flex-start;
}
.box li:nth-child(4){
-webkit-align-self: baseline;
align-self: baseline;
padding:20px 10px;
}
.box li:nth-child(5){
-webkit-align-self: baseline;
align-self: baseline;
}
.box li:nth-child(6){
-webkit-align-self: stretch;
align-self: stretch;
}
.box li:nth-child(7){
-webkit-align-self: auto;
align-self: auto;
}
</style>
</head>
<body>
<ul id="box" class="box">
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
<li>g</li>
<li>h</li>
<li>i</li>
</ul>
</body>
</html>


다음 섹션
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php.cn</title> <style> .box{ display:-webkit-flex; display:flex; margin:0;padding:10px;list-style:none;background-color:#eee;} .box li{width:100px;height:100px;border:1px solid #aaa;text-align:center;} #box{ -webkit-flex-direction:row; flex-direction:row; } #box2{ -webkit-flex-direction:row-reverse; flex-direction:row-reverse; } #box3{ height:500px; -webkit-flex-direction:column; flex-direction:column; } #box4{ height:500px; -webkit-flex-direction:column-reverse; flex-direction:column-reverse; } </style> </head> <body> <h2>flex-direction:row</h2> <ul id="box" class="box"> <li>a</li> <li>b</li> <li>c</li> </ul> <h2>flex-direction:row-reverse</h2> <ul id="box2" class="box"> <li>a</li> <li>b</li> <li>c</li> </ul> <h2>flex-direction:column</h2> <ul id="box3" class="box"> <li>a</li> <li>b</li> <li>c</li> </ul> <h2>flex-direction:column-reverse</h2> <ul id="box4" class="box"> <li>a</li> <li>b</li> <li>c</li> </ul> </body> </html>
코스웨어