Flex로 만들 수 있는 레이아웃
1.수평수직 중앙정렬
table, table-cell 또는 absolute 로 했던 수평수직 센터정렬을 flex로 할 수 있습니다.
justify-content로 수평정렬, align-items로 수직정렬을 합니다.
HTML
<div class="wrap">
<div class="box">
<div class="login">
<h2 class="login__title">LOGIN</h2>
<div class="login__box">
</div>
</div>
</div>
</div>
CSS
<style>
.wrap {
height:100vh;
}
.box {
display:flex;
height:100%;
justify-content:center;
align-items:center;
}
.login {
flex-basis:450px;
}
.login__title {
padding:15px 25px;
background:#1f278f;
color:#fff;
}
.login__box {
height:100px;
padding:5px;
border:1px solid #ccc;
background:#eee;
}
</style>
RESULT
2.고정한 넓이값을 가진 제목영역
수상내역, 연혁등 리스트내에 제목과 내용형태를 가진 레이아웃에 쓰입니다.
이전에는 제목 요소에 absolute를 사용해 고정했습니다.
flex-basis로 넓이값을 주고, flex-shrink로 넓이가 유동적이기 않게 처리했습니다.
HTML
<h1>영화 [기생충]의 수상 내역</h1>
<ul class="list">
<li>
<h2 class="title">
제92회 아카데미상
</h2>
<p class="desc">
Lorem ipsum dolor sit amet,
consectetur adipisicing elit. Ad commodi cumque distinctio
doloremque eaque eius error laborum maiores, mollitia nisi quo sequi sint
</p>
</li>
<li>
<h2 class="title">
AARP's 무비 포 그로운업스 어워드
</h2>
<p class="desc">
Lorem ipsum dolor sit amet,
consectetur adipisicing elit. Ad commodi cumque distinctio
doloremque eaque eius error laborum maiores, mollitia nisi quo sequi sint
</p>
</li>
<li>
<h2 class="title">
아프리카계 미국인 영화 비평가 협회
</h2>
<p class="desc">
Lorem ipsum dolor sit amet,
consectetur adipisicing elit. Ad commodi cumque distinctio
</p>
</li>
</ul>
CSS
<style>
.list {
border-bottom:1px solid #ccc;
}
.list li {
display:flex;
border-top:1px solid #ccc;
}
.title {
flex:0 0 250px;
/* flex-grow:0; */
/* flex-shrink:0; */
/* flex-basis:250px; */
padding:20px;
background:#eaecf0;
}
.desc {
padding:20px;
}
</style>
RESULT
2.세로순서대로 나열되는 갤러리
세로형태로 나열되는 갤러리입니다
기존에는 ul > li 가로형태로 배치했습니다.
flex-direction으로 세로배치를 하고 flex-wrap으로 넘치는 부분을 처리했습니다.
메인축이 바뀌게 되므로 width와 flex-basis 값이 반대로 적용됩니다.
HTML
<ul class="list">
<li style="background:#0080cc;">
1
Lorem ipsum dolor sit amet.
</li>
<li style="background:#cc3a2f;">
2
Lorem ipsum.
</li>
<li style="background:#01cc49;">
3
Lorem ipsum dolor sit amet.
</li>
<li style="background:#cca514;">
4
Lorem ipsum dolor sit amet, consectetur adipisicing.
</li>
<li style="background:#9a25cc;">
5
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum, pariatur?
</li>
<li style="background:#607D8B;">
6
Lorem ipsum dolor.
</li>
</ul>
CSS
<style>
.list {
display:flex;
height:100vh;
flex-wrap:wrap;
flex-direction:column;
/* flex-flow:column wrap; */
box-sizing:border-box;
}
.list li {
width:33.33%;
flex-basis:50%;
padding:20px;
box-sizing:border-box;
color:#fff;
}
</style>
RESULT
4.항상 하단에 붙는 푸터
기존에는 fixed나 absolute로 고정된 푸터를 사용했습니다.
flex-grow로 풀로 차게 해줍니다.
flex 아이템에서 margin의 auto는 해당 여백을 최대로 확장시키는 역할을 합니다.
HTML
<div class="box">
<div class="footer">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsam, vitae!
</div>
</div>
CSS
<style>
.box {
display:flex;
height:100vh;
background:#eee;
text-align:center;
}
.footer {
flex-grow:1;
margin-top:auto;
padding:15px 0;
background:#333;
color:#eee;
text-align:center;
}
</style>
RESULT
5.균등분할 정렬
기존에는 justify 정렬과 :after에 요소를 추가해서 균등분할 정렬을 했습니다.
justify-content로 쉽게 균등분할 정렬이 가능합니다.
HTML
<div class="box">
<div class="item" style="background:#0080cc">
Lorem ipsum dolor sit amet.
</div>
<div class="item" style="background:#01cc49">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque, officia.
</div>
<div class="item" style="background:#cca514">
Lorem ipsum dolor sit amet, consectetur adipisicing.
</div>
</div>
CSS
<style>
.box {
display:flex;
background:#eee;
justify-content:space-between;
}
.item {
flex-basis:25%;
padding:20px;
color:#fff;
}
</style>
RESULT
6.폼 제목 세로 정렬
앞의 내용들과 이어지는 예제입니다.
입력폼과 제목영역에서 제목을 세로 정렬합니다.
위에서 사용했던 flex-basis로 고정될 수 있게 처리합니다.
HTML
<ul class="form">
<li>
<span class="title">이름</span>
<span class="input">
<input type="text" class="ipt">
</span>
</li>
<li>
<span class="title">비밀번호</span>
<span class="input">
<input type="password" class="ipt">
</span>
</li>
</ul>
CSS
<style>
.form li {
display:flex;
margin:10px 0;
}
.input {
flex-grow:1;
}
.title {
flex-shrink:0;
flex-basis:120px;
align-self:center;
font-weight:bold;
}
.ipt {
display:block;
width:100%;
height:50px;
border:1px solid #0080cc;
border-radius:5px;
outline:none;
}
</style>