HTML 레퍼런스 북
레이아웃 05
전체 영역이 들어간 구조이며 실제 사이트에서 이런 구조를 많이 사용하고 컨테이너를 만들어 가운데 영역을 설정하고 그런 다음 float, flex , grid 방식 중 하나를 선택해 구역을 분류한다.
Float을 이용한 레이아웃
레이아웃의 틀을 잡을 때 <div> 태그가 사용되며 해당 태그는
Block 형식이므로 가로로 나란히 정렬이 불가능하다.
이때 나란히 정렬해주고자 하는 요소의 CSS 속성에 float: left;를
적어주면 나란히 정렬이 가능하다.
단, 이 속성을 쓰게 될 경우, 속성을 썼던 아래의 footer의 height값이 0이 되어
보이지 않게 되는 버그가 발생하는데 이럴 때에는 보이지 않는 해당 요소에 clear: both;를
적어놓으면 해결된다.
clear: both; 외에도 overflow: hidden; 방식과 clearfix 설정 방식이 있는데
이 중 가장 완벽한 방법은 clearfix 방식이며 사용 방법은 아래에 기재되어 있다.
* {
margin: 0;
padding: 0;
}
#wrap {}
#header {
width: 100%;
height: 100px;
background-color: #eeebe9;
}
#nav {
width: 100%;
height: 100px;
background-color: #B9AAA5;
}
#main {
width: 100%;
height: 780px;
background-color: #886F65;
}
#footer {
width: 100%;
height: 100px;
background-color: #4E342E;
}
.container {
width: 1200px;
height: inherit;
margin: 0 auto;
overflow: hidden;
background-color: rgba(0, 0, 0, 0.15);
}
.contents .cont1 {
width: 100%;
height: 100px;
background-color: #74574A;
}
.contents .cont2 {
width: 100%;
height: 200px;
background-color: #684D43;
}
.contents .cont3 {
width: 50%;
height: 480px;
background-color: #594139;
float: left;
}
.contents .cont4 {
width: 50%;
height: 480px;
background-color: #4A352F;
float: left;
}
/*
float으로 인한 영역 깨짐 방지법
1. 깨지는 영역에 clear: both;를 설정한다.
2. 부모박스 영역에 onerflow: hidden;을 설정한다. (애니메이션 사용 시 불리함)
3. clearfix를 설정한다. 가장 완벽한 방법!
*/
.clearfix::before,
.clearfix::after {
content: '';
display: block;
line-height: 0;
}
.clearfix::after {
clear: both;
}
/* 미디어쿼리 쓸 때는 width 퍼센테이지로 전환할것 */
@media(max-width:1220px) {
.container {
width: 96%;
}
.contents .cont1 {
width: 30%;
height: 780px;
float: left;
}
.contents .cont2 {
width: 70%;
height: 390px;
float: left;
}
.contents .cont3 {
width: 35%;
height: 390px;
}
.contents .cont4 {
width: 35%;
height: 390px;
}
}
@media(max-width:768px) {
.container {
width: 100%;
}
.contents .cont1 {
width: 30%;
height: 780px;
}
.contents .cont2 {
width: 70%;
height: 260px;
}
.contents .cont3 {
width: 70%;
height: 260px;
}
.contents .cont4 {
width: 70%;
height: 260px;
}
}
@media(max-width:480px) {
.contents .cont1 {
width: 100%;
height: 150px;
}
.contents .cont2 {
width: 100%;
height: 210px;
}
.contents .cont3 {
width: 100%;
height: 210px;
}
.contents .cont4 {
width: 100%;
height: 210px;
}
}
결과
Flex를 이용한 레이아웃
flex로 레이아웃 정렬 시에는 먼저 html에서는 시맨틱 태그를 사용해야 하고 부모 박스가 반드시 필요하며 그 부모 박스 안에 display: flex; 와 flex-wrap: wrap; 설정을 해 주어야 한다.
* {
margin: 0;
padding: 0;
}
#wrap {
width: 100%;
}
#header {
width: 100%;
height: 100px;
background-color: #EEEBE9;
#nav {
width: 100%;
height: 100px;
background-color: #B9AAA5;
#menu {
width: 100%;
height: 780px;
background-color: #886F65;
}
#footer {
width: 100%;
height: 100px;
background-color: #4E342E;
.container {
width: 1200px;
height: inherit;
margin: 0 auto;
background-color: rgba(0,0,0,0.3);
}
.contents {
display: flex;
flex-wrap: wrap;
}
.contents .right {
width: 1200px;
}
.contents .cont1 {
width: 100%;
height: 100px;
background-color: #74574A;
.contents .left {
width: 1200px;
display: flex;
flex-wrap: wrap;
}
.contents .cont2 {
width: 100%;
height: 200px;
background-color: #684D43;
}
.contents .cont3 {
width: 50%;
height: 480px;
background-color: #594139;
}
.contents .cont4 {
width: 50%;
height: 480px;
background-color: #4A352F;
@media (max-width: 1220px){
.container {
width: 96%;
}
.contents {
display: flex;
flex-wrap: wrap;
}
.contents .left {
width: 30%;
}
.contents .cont1 {
width: 100%;
height: 780px;
}
.contents .right {
width: 70%;
display: flex;
flex-wrap: wrap;
}
.contents .cont2 {
width: 100%;
height: 390px;
}
.contents .cont3 {
width: 50%;
height: 390px;
}
.contents .cont4 {
width: 50%;
height: 390px;
}
}
@media (max-width: 768px){
.container {
width: 100%;
}
}
@media (max-width: 480px){
.contents {
flex-wrap: wrap;
}
.contents .left {
width: 100%;
}
.contents .cont1 {
width: 100%;
height: 150px;
}
.contents .right {
width: 100%;
flex-wrap: wrap;
}
.contents .cont2 {
width: 100%;
height: 210px;
}
.contents .cont3 {
width: 100%;
height: 210px;
}
.contents .cont4 {
width: 100%;
height: 210px;
}
}
결과
Grid를 이용한 레이아웃
table처럼 레이아웃을 잡을 수 있는 방법 중 하나입니다. display: grid;로 Grid 사용을 활성화하며, grid-template-columns에서는 요소 배치 가로 길이를, grid-template-rows에서는 세로 길이를 지정해줍니다.
* {
margin: 0;
}
#header {
height: 100px;
background-color: #EEEBE9;
}
#nav {
height: 100px;
background-color: #B9AAA5;
}
#main {
height: 780px;
background-color: #886F65;
}
#footer {
height: 100px;
background-color: #4E342E;
}
.container {
width: 1200px;
height: inherit;
margin: 0 auto;
background-color: rgba(0,0,0,0.3);
}
.contents {
display: grid;
grid-template-areas:
"cont1 cont1"
"cont2 cont2"
"cont3 cont4";
grid-template-columns: 50% 50%;
grid-template-rows: 100px 200px 480px;
}
.contents .cont1 {
background-color: #74574A;
grid-area: cont1;
}
.contents .cont2 {
background-color: #684D43;
grid-area: cont2;
}
.contents .cont3 {
background-color: #594139;
grid-area: cont3;
}
.contents .cont4 {
background-color: #4A352F;
grid-area: cont4;
}
@media (max-width: 1220px) {
.container {
width: 96%;
}
.contents {
display: grid;
grid-template-areas:
"cont1 cont2 cont2"
"cont1 cont3 cont4";
/* grid-template-columns: 33.3333% 33.3333% 33.3333% */
/* grid-template-columns: 1fr 1fr 1fr; */
grid-template-columns: repeat(3, 1fr); /* 자동 3등분 */
/* grid-template-rows: repeat(2, 390px); */
grid-template-rows: repeat(2, 1fr);
}
}
@media (max-width: 768px) {
.container {
width: 100%;
}
.contents {
display: grid;
grid-template-areas:
"cont1 cont2"
"cont1 cont3"
"cont1 cont4";
grid-template-columns: 30% 70%;
grid-template-rows: repeat(3, 1fr);
}
}
@media (max-width: 480px) {
.contents {
display: grid;
grid-template-areas:
"cont1"
"cont2"
"cont3"
"cont4";
grid-template-columns: 100%;
grid-template-rows: 150px 210px 210px 210px;
}
}