|
position은 요소의 위치를 지정하는 속성으로 top, right, bottom, left 속성, z-index 속성과 함께 사용된다. display는 요소의 박스 타입을 지정하는데 이용된다.
position:
- static: 디폴트 값. 요소를 문서의 흐름에 따라 순서대로 배치한다.
top, right, bottom, left, z-index 속성 효과가 적용되지 않는다.
- relative: 요소를 문서의 흐름에서 상대적 위치에 배치한다. 상대적 위치는 top, right, bottom, left에 의해 결정되며 z-index가 지정되면 새로운 스택오더가 만들어 진다.
- absolute: 문서의 흐름과 상관없이 가장 가까운 static이 아닌 부모 요소의 위치에 상대적으로 배치된다. z-index가 지정되면 새로운 스택 오더가 만들어 진다. 부모가 static이면 static이 아닌 다음 부모를 기준으로 한다.
- fixed: 문서의 흐름에 상관없이 화면에 상대적 위치에 배치된다. 따라서, 스크롤 되어도 움직이지 않는다.
- initial: display 속성을 디폴트 값으로 설정한다.
- inherit: 부모 요소로부터 속성을 상속 받는다.
- sticky: 특정 위치까지는 relative 속성을 유지하다가 특정 위치에 도달하면 fixed 속성이 됨.
relative, absolute, fixd의 위치값은 top, right, bottom, left로 지정하며 static은 이 속성이 적용되지 않는다. z-index를 쓰면 static을 제외하고 새로운 스택오더가 만들어진다. sticky는 좀 특이하다. 예를 들어, <div>를 position:sticky; top:30px; 로 설정한 경우 화면 스크롤로 top 30px에 도달하기 전까지는 relative이고 도달하면 fixed가 되어 화면 top 30px에 고정된다. 다만, IE11이나 엣지에서 동작 안 한다.
display:
- inline: 디폴트, 요소들을 가로로 배치한다.
- block: 요소들을 블록 요소처럼 동작하도록 한다.
- inline-block: 요소 내부는 블록으로 요소는 인라인 속성값이 적용된다.
- flex: 블록 레벨 flex 컨테이너로 설정한다. CSS3
- inline-flex: 인라인 레벨 flex 컨테이너로 설정한다. CSS3
- table: 요소를 테이블처럼 동작하도록 한다. table 디스플레이와 관련해서 더 많은 display 속성이 있으며 이를 나열하면 table-cell, table-column, talbe-row, table-caption, table-column-group, table-header-group, table-footer-group, talbe-row-group, table-cell, table-column, table-row가 있다.
- inline-table: 인라인 레벨 테이블처럼 동작하도록 한다.
- list-item: 요소를 <li> 요소처럼 동작하도록 설정한다.
- run-in: 문맥에 따라 요소를 블록 또는 인라인으로 표시한다.
- none: 요소를 보이지 않도록 설정한다. 영역을 유지하지 않으므로 영역을 유지하려면 visibility속성을 사용해야 한다.
- initial: 디폴트 값으로 설정한다.
- inherit: 부모 요소로부터 상속 받는다.
position과 display 외에도 여러가지 속성들이 있다.
visibility:
- visible | hidden: 영역을 유지함.
visibility로 요소의 영역은 유지하면서 보이게 하거나 감춘다. display: block | none은 이와 다르게 영역을 유지하지 않는다.
float:
- left | right | none| inherit
float는 컨테이너 내의 같은 레벨의 요소를 수평으로 배열시키며, 속성값에 따라 요소를 정렬한다. float 사용시 주의할 점은 요소 크기에 맞춰 부모 컴테이너의 사이즈가 증가되지 않는다는 것이다. 따라서, float 정렬하는 요소를 포함하는 <div> 컨테이너는 높이를 지정해 주어야, 다음 컨테이너와 겹치지 않는다.
clear:
- left | right | both | none | inherit
float 속성을 갖는 요소 다음에 오는 요소의 float 속성을 제거하기 위해 사용한다. both를 사용하면 left, right에 상관없이 float 속성값에 상관없이 속성이 해지된다.
overflow:
- visible: 오버플로우를 클립하지 않고, 박스의 바깥에 표시한다. 이 값이 디폴트이다.
- hidden: 오버플로우를 클립한다. 넘어간 부분은 보이지 않음.
- scroll: 오버플로우를 클립한다. 넘어간 부분을 위해 스크롤을 표시한다.
- auto: 오버플로우가 클립되면, 넘어간 부분을 위해 스크롤을 표시한다.
- initial: 디폴트 값으로 설정한다.
overflow는 콘텐츠가 박스의 범위를 넘어갈 때 어떻게 처리할지를 나타낸다.
n Example: relative, absolute, fixed, sticky test
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Position</title>
<style>
div {
width: 50px;
height: 50px;
font: bold 15px arial, sans-serif;
color: white;
}
.container1 {
width:300px;
height:100px;
background-color: AliceBlue;
}
.container2 {
position:relative;
width:300px;
height:100px;
background-color: WhiteSmoke;
}
.inline-box {
position: static;
display: inline-block;
background-color: Olive;
}
.relative-box {
display: inline-block;
position: relative;
top: 20px;
left: 20px;
background-color: Orange;
}
.absolute-box {
display: inline-block;
position: absolute;
top: 20px;
left: 20px;
background-color: Orange;
}
.fixed-box {
position: fixed;
top: 10px;
right: 10px;
background-color: DodgerBlue;
}
.sticky-box {
display: inline-block;
position: sticky;
top: 20px;
left: 20px;
background-color: OrangeRed;
}
</style>
</head>
<body>
<!-- relative -->
<div class="container1">
<div class="inline-box"></div>
<div class="inline-box"></div>
<!-- 바로 앞 div와 상대적 위치 -->
<div class="relative-box"></div>
<div class="inline-box"></div>
</div>
<br>
<!-- absolute -->
<div class="container2">
<div class="inline-box"></div>
<div class="inline-box"></div>
<!-- container2가 relatvie 면 이를 기준으로 함-->
<div class="absolute-box"></div>
<div class="inline-box"></div>
</div>
<!-- fixed -->
<div class="fixed-box"></div>
<br>
<!-- sticky -->
<div class="container1">
<div class="inline-box"></div>
<div class="sticky-box"></div>
</div>
</body>
</html>
n Example: float
<style>
div {
width: 50px;
height: 50px;
font: bold 15px arial, sans-serif;
color: white;
}
.container1 {
width:300px;
height:100px;
background-color: AliceBlue;
}
.float-box {
position: relative;
float: right;
display: inline-block;
background-color: Olive;
margin: 1px;
}
.no-float-box {
position: relative;
clear: both;
display: inline-block;
background-color: OliveDrab;
margin: 1px;
}
</style>
...
<div class="container1">
<div class="float-box">1</div>
<div class="float-box">2</div>
<div class="float-box">3</div>
<div class="no-float-box">4</div>
<div class="no-float-box">5</div>
<div class="no-float-box">6</div>
<div class="no-float-box">7</div>
<div class="no-float-box">8</div>
</div>
클래스 float-box는 float: left로 설정했으므로 왼쪽부터 배열된다. 클래스 no-float-box는 clear:both로 설정했으므로 float 속성이 지워지고 보통의 position:relative 블록처럼 동작한다. no-float-box에 display: inline-block 설정이 없다면 float-box의 수평 영역 아래에서부터 no-float-box의 위치가 시작된다.
블록 수평 중앙 정렬
방법1: 컨테이너 내의 블록 요소의 마진을 margin: 0 auto; 로 설정해 중앙 정렬할 수 있다. width를 반드시 지정해야 하며, display는 inline, inline-block을 사용하면 정렬되지 않는다.
방법2: 정렬할 블록 요소 내에 반드시 텍스트가 있을 경우로, 컨테이너에 text-align: center를 설정한다. 그리고, 정렬할 블록은 display: inline-block으로 설정한다. block으로 설정하면 정렬되지 않는다. 물론 블록 내 텍스트도 함께 중앙 정렬된다.
n Example: horizontal center – margin: 0 auto;
<style>
/* 수평 중앙 정렬 */
.container1 {
position: relative;
width:300px;
height:100px;
background-color: AliceBlue;
}
/* display를 inline, inline-xxxx로 설정하면 정렬 안됨*/
.h-center-box {
display: block;
background-color: Olive;
margin: 0 auto;
}
</style>
...
<div class="container1">
<div class="h-center-box "></div>
</div>
<br>
블록 수직 중앙 정렬
수직 중앙 정렬을 display를 테이블 타입으로 지정하고 테이블의 정렬 속성 vertical-align을 이용한다.
n Example: vertical center – table cell
<style>
/* 수직 중앙 정렬 - display:block인 하위 요소는 정렬 안됨
table-cell은 inline으로 배열 됨 */
.v-center-container {
display: table-cell;
vertical-align: middle;
width:300px;
height:100px;
background-color: AliceBlue;
}
.box {
display: inline-block;
background-color: Olive;
}
</style>
<div class="v-center-container">
<div class="box"></div>
</div>
블록 수직 수평 중앙 정렬
방법1: 정렬할 블록의 절대 위치와 마진을 조절하한다. display:absolute로 하고 부모의 중앙에 top-left 가 오도록 한 후에 마진 위치를 조정하여 정렬한다. margin을 지정하는 다른 방법으로 -25%로 지정할 수도 있다. % 길이의 기준은 컨테이너의 길이이다.
방법2: transform: tanslate(-50%, -50%)를 이용할 수도 있다. % 길이의 기준은 정렬할 box의 길이이다.
방법3: 블록에 텍스트를 포함하는 경우에 앞서 알아본 수평정렬-방법2와 수직 정렬 방법을 컨테이너에 적용한다.
n Example: vertical & horizontal center – absolute& margin
/* 수직 수평 중앙 정렬 1 */
.vh-center-box {
position:absolute; /* 부모 div는 position:relative로 설정*/
top: 50%;
left: 50%;
margin-top: -25%; /* -50px: height/2*/
margin-left: -25%; /* -50px: width/2*/
width: 100px;
height: 100px;
}
n Example: vertical & horizontal center – absolute& transform
/* 수직 수평 중앙 정렬 2 */
.vh-center-box {
position:absolute; /* 부모 div는 position:relative로 설정*/
display: inline-block;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 100px;
height: 100px;
}
n Example: vertical & horizontal center – table-cell
/* 수직 중앙 정렬 - display:block인 하위 요소는 정렬 안됨
table-cell은 inline으로 배열 됨 */
.vh-center-container {
/* 수평 정렬 */
text-align: center;
/* 수직 정렬 */
vertical-align: middle;
display: table-cell;
width:300px;
height:100px;
background-color: AliceBlue;
font: bold 15px arial, sans-serif;
color: white;
}
display: table-cell인 요소가 연속으로 오면 수평으로 배열된다.
완쪽, 오른쪽, 위, 아래 정렬
왼쪽, 오른쪽, 위, 아래는 position:absolute와 top, right, bottom, left를 이용한다. 예를 들어,
/* 오른쪽 정렬 */
.right {
position:absolute;
right: 0px;
}
블록 안의 텍스트 정렬
블록 안의 텍스트를 수평, 수직 정렬하는 방법은 블록의 정렬과 같은 방법을 이용한다.
n Example: text align
<style>
.text-vh-center-container {
/* 수평 정렬 */
text-align: center;
/* 수직 정렬 */
vertical-align: middle;
display: table-cell;
width:200px;
height:100px;
background-color: OliveDrab;
font: bold 15px arial, sans-serif;
color: white;
}
</style>
...
<div class="text-vh-center-container">
<p>TextA</p><p>TextB</p>
</div>
다른 방법으로 display: table-cell을 이용하지 않는 경우, 텍스트의 높이를 컨테이너 영역의 높이와 같이 설정하여 방법도 있다. text-align: center는 유지한다. 단, 여러 줄의 텍스트를 쓸 수 없다.
.text-fit-height {
padding: 0px;
height: 100px;
line-height: 100px;
}
...
<div class="text-h-center-container">
<p class="text-fit-height">Text</p>
</div>
블록과 텍스트의 정렬
n Example: text and div
Display | Display |
CSS div { display: inline-block; position: relative; vertical-align: middle; border: 1px solid red; font-size: 1em; margin: 0; height: 3em; } | CSS div { display: inline-block; position: relative; vertical-align: middle; border: 1px solid red; font-size: 1em; padding: 1em; box-sizing: border-box; margin: 0 height: 3em; } |
HTML
PlainText<div>Block Text</div>PlainText
div의 vertical-align: middle은 div를 중앙으로 정렬한다. div 안의 텍스트를 중앙으로 정렬하려면 “수직 패딩” + font-size = div height 이도록 설정하거나 line-height = div height 이도록 설정한다.
외부 텍스트와 div 텍스트 라인을 맞추려면 vertical-align: baseline으로 한다.
n Example: text and button
Display | Display |
CSS button { display: inline-block; position: relative; font-size: 1em; vertical-align: middle; padding: 0; margin: 0; height: 3em; } | CSS vertical-align: baseline;
|
HTML
PlainText<button>Button Text</button>PlainText
button의 vertical-align: middle은 button을 중앙 정렬한다. button은 버튼 안의 텍스트를 중앙으로 자동 정렬한다. 중앙 정렬된 버튼 텍스트는 외부 텍스트 라인보다 약간 밑으로 내려간다. 버튼 텍스트와 외부 텍스트를 맞추려면 vertical-align: baseline으로 한다.
n Example: inside button
Display
vertical-align: middle; | |
vertical-align: baseline; |
HTML
PlainText<button>
<img src="./img/home.png">
<span class="icon_calendar"></span>
PlainText
<span>SpanText</span>
<a href="#">AText</a>
</button>PlainText
버튼 안의 모든 요소들이 vertical-align: middle 혹은 baseline인 경우이다. middle 경우에는 모두 중앙으로 정렬된다. 따라서, baseline에 정렬되에 있는 버튼 내의 “PlainText” 보다는 약간 밑에 온다. baseline 경우에는 일반 텍스트를 포함해 모두 baseline에 정렬된다.
n Example: inside button
Display
| ||
CSS |
|
|
.button0 { vertical-align: middle; height: 1.5em; margin: 0; padding: 0; } .span0 { vertical-align: baseline; hegith: 1em; line-height: 1em; font-size: 1em; margin: 0; padding: 0; border: 1px solid red; } | .button1 { vertical-align: middle; height: 1.5em; margin: 0; padding: 0; } .span1 { vertical-align: middle; hegith: 1em; line-height: 1em; font-size: 1em; margin: 0; padding: 0; border: 1px solid red; } | .button2 { vertical-align: middle; height: 1em; margin: 0; padding: 0; } .span2 { vertical-align: middle; hegith: 1em; line-height: 1em; font-size: 1em; margin: 0; padding: 0; border: 1px solid red; } |
(button0): 버튼의 크기가 작은 경우 baseline으로 정렬해야 버튼 내의 요소가 버튼 내부에 들어간다.
(button1): middle로 하면 밑으로 살짝 내려간다.
(button3): 텍스트와 크기와 비교해 버튼이 0.5쯤 커야 텍스트를 다 담을 수 있다.
블록의 실제 사이즈는 width, height 뿐만 아니라 마진과 패딩 사이즈도 영향을 미친다.
|
| border | |
|
|
|
|
Margin | Padding | 내용 |
|
|
|
|
|
|
|
|
padding: top right bottom left;
padding: top&bottom right&left;
margin: top right bottom left;
margin: top&bottom right&left;
예를 들어,
/* 실제 사이즈: width + padding + margin, height + padding + margin */
div {
width: 100px;
height: 100px;
padding: 20px;
border: 10px soild black;
}
이러한 박스의 실제 너비는 width + padding-left & right width + border left & right width이다. 높이도 마찬가지다. 즉, 박스 사이즈가 늘어난다. 그러나, box-sizing을 이용하면 이러한 점을 해결할 수 있다. box-sizing: border-box를 이용하면 패딩과 보더 사이즈를 width, height 내에 포함시킨다. 위 div에 이 속성을 추가하면 padding과 border는 박스 width, height 설정 내로 들어가서 실제 사이즈를 증가시키지 않는다. border-box 대신 content-box 속성값을 주면 기본 박스 사이징 동작을 한다(이 값이 디폴트 값).
/* 실제 사이즈: width, height */
div {
width: 100px;
height: 100px;
padding: 20px;
border: 10px soild black;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
z-index는 요소의 쌓이는 순서를 정하는 속성으로 z-index 값이 높을수록 앞쪽에 쌓인다. z-index에 의해 쌓이는 컨텍스트를 만들어 내는 요소들은
- html 루트
- position이 absoulte, relative, fixed로 설정된 요소들
- z-index 값이 auto가 아닌 flex 요소
- 투명도가 1보다 작게 지정된 요소
컨테이너 안의 자식 요소들은 컨테이너 안에서 자식들끼리의 새로운 z-index 쌍임 컨텍스트를 만든다.
n Example: z-index
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Position</title>
<style>
div {
width: 100px;
height: 100px;
font: bold 13px arial, sans-serif;
color: white;
line-height: 100px;
padding: 0px 5px;
}
.container-1 {
display: block;
position: relative;
background-color: OliveDrab;
z-index: 7;
}
.container-2 {
display: block;
position: absolute;
top: 150px;
background-color: LightBlue;
z-index: 1;
}
.container-3 {
display: block;
position: absolute;
top: 75px;
left: 50px;
background-color: Orange;
z-index: 5;
}
</style>
</head>
<body>
<div id="1" class="container-1">id:1 - z-index:7</div>
<div id="2" class="container-2">id:2 - z-index:1</div>
<div id="3" class="container-3">id:3 - z-index:5</div>
</body>
</html>
flex는 요소들의 너비나 높이를 공간에 맞게 늘리거나 줄여 화면을 구성하는데 편리한 기능을 제공한다. display 속성 값으로 flex나 inline-flex 지정해 flex 요소로 만들 수 있다. 브라우저 별 display 값은 플렉스 속성들에서 flex를 대신할 접두어로도 사용된다.
display: -webkit-box; display: -moz-box; display: -webkit-flex; display: -ms-flexbox; display: flex; | display: -webkit-inline-box; display: -moz-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; display: inline-flex; |
flex 또는 flex-inline인 선언된 요소를 플렉스 컨테이너로 플렉스 컨테이너 안의 요소들을 플렉스 아이템이라고 부를 것이다. flex-inline은 플렉스 컨테이너를 인라인으로 배치한다는 의미이다. 컨테이너 안의 플렉스 아이템 배치를 위한 속성으로 다음과 같은 것들이 있다. 공통으로 initial, inherit 값이 있으며 생략한다.
Container Properties
- flex-direction: row | row-reverse | column | column-reverse
기본값은 row이다. 이 속성은 플렉스 아이템을 플렉스 컨테이너에 위치시키는 방향을 설정한다. 방향이라 함은 메인 축의 방향을 의미한다. row는 가로, column은 세로가 메인축 방향이다. *-reverse는 해당 축 위에서 아이템의 배치 시작 위치가 반대이다. row-reverse는 우에서 좌로 column-reverse는 아래에서 위로 배치시킨다.
- flex-wrap: nowrap | wrap | wrap-reverse
기본값은 nowrap이다. 이 속성은 플렉스 컨테이너 내의 아이템들이 한 줄로 배치(nowrap)될지 여러 줄로 배치(wrap)될지에 대해 설정한다. wrap이 위쪽을 다 채우면 아랫 줄로 넘기는 반면 wrap-reverse는 아래쪽을 다 채우면 윗 줄로 넘긴다. wrap이 설정되어 다음 줄로 넘어간 아이템은 컨테이버의 영역을 넘어가며 다른 컨테이너 위에 있을 수도 있다.
- flex-flow: flex-direction value flex-wrap value
기본값은 row nowrap이다. 이 속성은 flex-direcction과 flex-flow를 한 번에 설정하기 위한 속성이다.
Item Properties
- flex-grow: number≥0
기본값은 0이다. 이 속성은 플렉스 컨테이너의 공간이 남을 때 아이템의 크기를 증가시키기 위한 비율이다. number는 다른 아이템보다 큰 비율이다. 예를 들어, 다른 아이템들은 flex-grow:1인데 한 아이템만 flex-grow:2면 그 아이템은 다른 아이템보다 크기가 2배이다. 0인 값은 공간이 있더라도 원래 크기를 유지한다. 다만, 남는 공간이 없는 경우 flex-grow에 상관없이 같은 크기가 된다.
- flex-shrink: number≥0
기본값은 1이다. 이 속성은 flex-grow와 반대로 플렉스 컨터이너 공간이 부족할 때 아이템의 크기를 줄이기 위한 비율이다. number는 1/number 크기를 의미한다. 다만, 남는 공간이 있는 경우 flex-shrink에 상관없이 원래 크기가 된다.
- flex-order: number
기본값은 0이다. 플렉스 아이템의 순서는 보통 아이템 태그가 선언된 순서이다. 그 순서를 바꾸고자 할 때, flex-order를 이용한다. 작은 값일수록 순서가 앞이다. 임의의 아이템을 먼저 나오게 하고 싶다면 flex-order: -1;을 지정하면 된다.
- flex-basis: number
기본값은 auto이다. 이 속성은 플렉스 아이템의 기본 크기(width)이다. 예를 들어, auto면 flex-grow, flex-shrink에 따라 크기가 줄어들거나 늘어난다. 하지만, flex-grow:0, flex-shrink:0이고 flex-basis를 설정하면 아이템의 크기는 flex-basis에 명시한 크기가 된다.
- flex: flex-grow flex-shrink flex-basis | auto
기본값은 0 1 auto이다. flex-grow,shrink,basis를 한 번에 설정하기 위한 속성이다. 브라우저 버전별 속성 이름은 display와 같이 –webkit-box, -mox-box, -webkit-flex, -ms-flexbox이다.
정렬 속성의 경우 브라우저 버전별 –webkit-box, -mox-box, -webkit-flex, -ms-flexbox가 아니라 속성값마다 다르기 때문에 함께 표시한다.
Alignment Properties
- justify-content: flex-start | flex-end | center | space-between | space-around
기본값은 flex-start로 컨테이너 속성이다. 이 속성은 메인축(가로)을 따라 아이템들을 정렬 방식을 설정한다. -webkit-box-pack, -moz-box-pack, -ms-flex-pack, -webkit-justify-content.
- align-items: flex-start | flex-end | center | baseline | stretch
기본값은 stretch로 컨테이너 속성이다. 이 속성은 크로스 축(세로)을 따라 아이템을 정렬하는 방식을 설정한다. stretch는 정렬 대신 수직 채우기를 한다.
-webkit-box-align, -moz-box-align, -ms-flex-align, -webkit-align-items.
- align-self: auto | flex-start | flex-end | center | baseline | stretch
기본값은 auto로 아이템 속성이다. 이 속성은 플렉스 아이템에서 수직 정렬 방식을 설정한다. 컨테이너에서 사용한 align-items 속성을 아이템에서 사용한 align-self 속성이 덮어쓴다.
-webkit-align-self, -ms-flex-item-align.
- align-content: flex-start | flex-end | center | space-between | space-around| stretch
기본값은 stretch로 컨테이너 속성이다. flex-wrap 속성에 의해 여러 라인이 된 아이템들의 수직 정렬 방식을 설정한다. align-items가 라인은 그대로 두고 아이템을 정렬한다면 align-content는 라인을 정렬한다. -webkit-align-content, -ms-flex-line-pack
n Example: flex container
모두 같은 아이템을 사용했고 아이템의 숫자는 HTML 페이지에서 아이템 태그가 나열된 순서이다.
.item {
background-color: OliveDrab;
}
.container1 { display: flex; flex-direction:row; background-color: AliceBlue; } | |
.container2 { display: flex; flex-direction:row-reverse; background-color: AliceBlue; } | |
.container3 { display: flex; flex-direction:row-reverse; flex-wrap: wrap; background-color: AliceBlue; }
| |
.container4 { display: flex; flex-direction: column; flex-wrap: wrap; background-color: AliceBlue; } |
n Example: flex item
모두 같은 컨테이너를 사용했다. 아이템 숫자는 HTML 페이지에서의 아이템 태그 순서이다.
.container {
display: flex;
width:300px;
height:70px;
background-color: AliceBlue;
}
.item-g1 { flex-grow: 1; background-color: OliveDrab; } .item-g2 { flex-grow: 4; background-color: Orange; } .item-g3 { flex-grow: 0; background-color: DodgerBlue; } | |
.item-s1 { flex-shrink: 1; background-color: OliveDrab; } .item-s2 { flex-shrink: 2; background-color: Orange; } | |
/* flex: flex-grow flex-shrink flex-basis */ .item-f1 { flex: 1 1 auto; background-color: OliveDrab; } .item-f2 { flex: 2 1 auto; background-color: Orange; } .item-f3 { flex: 1 2 auto; background-color: DodgerBlue; }
<div class="container"> <div class="item-f1">1</div> <div class="item-f2">2</div> <div class="item-f3">3</div> </div> <div class="container"> <div class="item-f1">1</div> <div class="item-f3">2</div> <div class="item-f1">3</div> <div class="item-f1">4</div> <div class="item-f1">5</div> <div class="item-f1">6</div> </div>
|
n Example: Alignment
container-alignment2와 container-alignment3에서 align-items와 align-content의 차이를 알 수 있을 것이다. align-items은 라인은 유지하면서 아이템을 정렬하고 align-content는 라인을 정렬한다.
.container-alignment1 { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; width:250px; height:100px; background-color: AliceBlue; } | |
.container-alignment2 { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; width:250px; height:250px; background-color: AliceBlue; } | |
.container-alignment3 { display: flex; flex-wrap: wrap; justify-content: center; align-content: center; width:250px; height:250px; background-color: AliceBlue; } |