레이아웃

  • 사전적 의미 : 배치, 정리
  • 기술적 의미 : 구성요소를 제한된 공간에 효율적으로 배치하는 것을 의미

화면 배치 방법(형식) : display 속성

  • 요소가 화면에 어떻게 보여질지 형식을 지정하는 속성
    • block : 화면을 수직 분할(행을 나눔) + width / height 사용 가능
    • inline : 화면을 수평 분할 + width / height 사용 불가
    • inline block : inline의 수평 분할 + block 크기 조정
    • none : 화면에 요소가 표시되지는 않으나 존재하고 있는 상태
    • flex : 요소의 정렬되는 방향, 요소간의 간경을 유연하게 처리하는 방식
# HTML

  <h3>block 형식의 요소(div)를 inline으로 변경</h3>
  <div class="area1 inline">1번 영역</div>
  <div class="area2 inline">2번 영역</div>
  <div class="area3 inline">3번 영역</div>
  <div class="area4 inline">4번 영역</div>
  <div class="area5 inline">5번 영역</div>
 
  <h3>block 형식의 요소(span)를 block으로 변경</h3>
  <span class="area1 block">1번 영역</span>
  <span class="area2 block">2번 영역</span>
  <span class="area3 block">3번 영역</span>
  <span class="area4 block">4번 영역</span>
  <span class="area5 block">5번 영역</span>

  <h3>inline-block 확인하기</h3>
  <span class="area1 block lnline-block">1번 영역</span>
  <span class="area2 block lnline-block">2번 영역</span>
  <span class="area3 block lnline-block">3번 영역</span>
  <span class="area4 block lnline-block">4번 영역</span>
  <span class="area5 block lnline-block">5번 영역</span>
# CSS

.area1{background-color: red;}
.area2{background-color: orange;}
.area3{background-color: yellow;}
.area4{background-color: green;}
.area5{background-color: blue;}

.inline {
  display: inline;
}

.block {
  display: block;
  width: 70px;
  height: 70px;
}

.lnline-block {
  display: none;
}

화면(영역) 분할

상하 2분할

준비물

  • 감싸는 영역 요소
  • 내부에 영역을 분할할 요소
  • display : block
  • 크기 단위(고정(px) / 가변(%))
# HTML

  <!-- 감싸는 영역 요소 -->
<div id="container-1">
  <!-- 내부에 영역을 분할할 요소 -->
   <div class="div-1"></div>
   <div class="div-1"></div>
</div>
# CSS

/* 감싸는 영역 요소 */
#container-1 {
  border: 3px solid black;
  width: 323px;
  height: 472px;
}

/* 내부에 영역을 분할할 요소 */
.div-1 {
  height: 50%;
  width: 100%;
  border: 1px dashed hotpink;
}

#container-1 > .div-1:first-of-type {
  height: 30%;
  background-color: red;
}

#container-1 > .div-1:last-of-type {
  height: 70%;
  background-color: blue;
}

상하 3분할

  • 감싸는 영역요소 : id="container-2"
  • 화면 분할 내부 요소 : class="div-2"
  • 분할 비율 -> 20:30:50
  • 배경색 자유롭게
# HTML

  <!-- 감싸는 영역 요소 -->
<div id="container-2">
  <!-- 내부에 영역을 분할할 요소 -->
   <div class="div-2"></div>
   <div class="div-2"></div>
   <div class="div-2"></div>
</div>
# CSS

/*
block 형식의 요소는 별도의
width가 지정되지 않으면 항상 부모요소의 100% */

/* 감싸는 영역 요소 */
#container-2 {
  border: 3px solid black;
  width: 300px;
  height: 440px;
}

/* 내부에 영역을 분할할 요소 */
#container-2 > .div-2:nth-of-type(1) {
  height: 20%;
  background-color: purple;
}

#container-2 > .div-2:nth-of-type(2) {
  height: 30%;
  background-color: yellow;
}

#container-2 > .div-2:nth-of-type(3) {
  height: 50%;
  background-color: brown;
}

좌우 2분할

  • 감싸는 영역요소
  • 내부 분할 요소
  • 크기 단위
  • display : inline-block (약간 문제점 있음)
# HTML
<div id="container-3">
  <div class="div-3"></div><div class="div-3"></div>
  <!-- 내부의 두 요소 사이에 엔터(공백) == 한칸 -->
</div>
# CSS

#container-3 {
  border: 5px solid red;
  width: 400px;
  height: 200px;
}

.div-3 {
  width: 50%;
  height: 100%;
  display: inline-block;
}

#container-3 > .div-3:first-of-type {
  background-color: pink;
}

#container-3 > .div-3:last-of-type {
  background-color: darkgreen;
}

display : none

  • 요소는 존재하지만 화면에는 보이지 않음 (투명 X)
    -> visibility : hidden; (투명 O)
# HTML
<div class="div-4">test</div>
<div class="div-4" id="test4">test</div>
<div class="div-4">test</div>
# CSS

.div-4 {
  border: 3px solid black;
  height: 100px;
}

#test4 {
  background-color: deeppink;
  /* display: none; */
  visibility: hidden;
}

요소의 영역(여백) 관련 속성

  • HTML 요소는 총 4가지의 영역으로 구성되어있다.
  1. content 영역
    요소의 내용이 작성되는 영역
    (시작태그와 종료태그 사이 작성되는 내용)
  1. padding 영역
    content 영역과 border 영역 사이
  1. border 영역
    요소의 테두리가 지정되는 영역
    content 보다 바깥쪽에서 content를 감싸고 있음
  1. margin 영역
    다른 요소와의 간격을 나타내는 영역
# HTML
<div class="box">내용입니다</div>

<h3>content 영역</h3>
<div class="box content">내용입니다</div>

<h3>border 영역</h3>
<div class="box border">내용입니다</div>

<h3>padding 영역</h3>
<div class="box padding">내용입니다</div>

<h3>margin 영역</h3>
<div class="box margin">내용입니다</div>
<div class="box margin" id="m1">내용입니다</div>
# CSS

.box {
  width: 100px;
  height: 100px;
  background-color: lightblue;
}

.content {
  width: 150px;
  height: 150px;

  /* width / height 속성
    기본적으로 content 영역의
    크기를 지정하는 속성
  */
}

.border {
  border: 10px solid red;
}

.padding {
  padding: 30px;
}

.margin {
  margin: 50px;
}

#m1 {
  margin: 100px;
}
/* 서로 다른 요소의 margin이 겹칠 경우
   더 큰 margin을 가진 요소의 값을 따른다. */

padding, border, margin의 방향성

  • padding, border, margin은 방향에 따라 크기를 지정할 수 있다.

000-top
000-bottom
000-left
000-right

# HTML
<h3>padding 테스트</h3>
<div class="box padding-test">내용입니다</div>

<h3>border 테스트</h3>
<div class="box border-test">내용입니다</div>

<h3>margin : auto; 테스트</h3>
 <div class="box-container">
 <div class="box margin-auto"></div>
</div>
# CSS

.padding-test {
  /*
  padding-top: 20px;
  padding-bottom: 50px;
  padding-left: 30px;
  padding-right: 100px; */

  /* padding 속성 : 
    작성법에 따라 padding 특정 방향에 
    크기를 지정할 수 있다. */

  /* 값 1개 : 상하좌우 */
  /* padding: 30px; */

  /* 값 2개 : 상하, 좌우 */
  /* padding: 50px 100px; */

  /* 값 3개 : 상, 좌우, 하 */
  /* padding: 10px 50px 100px; */

  /* 값 4개 : 상, 우, 하, 좌 */
  padding: 10px 20px 30px 40px;
}

.border-test {
  /*border 속성은 상하좌우 방향을
    별도로 지정할 수 없음 
    border : 1px 2px 3px 4px solid red; XX */

    border-top: 3px solid black;
    border-bottom: 5px dashed magenta;
    border-left: 10px dotted blue;
    border-right: 10px double orange;
}

.box-container {
  border: 2px solid black;
  width: 500px;
  height: 300px;
}

.margin-auto {
  /* margin-top: 100px; */
  /* margin-left: 200px; */
  margin: auto;
  /*
  좌우 요소간의 간격을 자동으로 지정하여 가운데 정렬
  -> 갑자기 margin-top 무시
  -> 왜? margin 속성에 자체가 상하좌우 동시에 지정하는 속성이라
  상(top) 부분에도 auto가 지정되어 이전 100px 덮어쓰기 함
  */
  margin-top: 100px; /* 얘를 auto 밑으로 보내면 됨! */
}

box-sizing 속성

  • 요소의 영역 중 실제로 화면상에 보여지는 부분인
    content, padding, border는 각각 크기를 지정할 수 있음
    -> 이 때 각각 크기를 따로 지정하다보니
    전체적인 크기를 한눈에 파악하고 설정하기 힘들다.
  • 요소의 크기를 계산하는 방식을 결정하는 속성.
# HTML

<div class="box" id="box-sizing">내용입니다</div>
# CSS

#box-sizing {
  /*
  테두리 10px, 패딩 20px, 내용 나머지
  전체 요소 크기가 너비/높이 300px인
  정사각형 만들기
  */

  border: 10px solid black;
  padding: 20px;

  width: 300px;
  height: 300px;

  box-sizing: border-box;
  /*
  width/height에 padding, border가 포함됨
  */
}

배치 관련 스타일(position)

position은 요소의 위치를 지정하는 속성

position : relative; (상대적인)

  • 지정된 요소 내부에 다른 요소가 상대적인 위치를 지정할 수 있도록
    기준이 되게 만드는 속성.

position : absolute; (절대적인)

  • 기본 요소의 배치 순서를 무시하고 지정된 절대 위치에 요소를 배치하는 속성.
  • 내부에 작성되는 요소에 위치 지정 시 top, bottom, left, right 속성을 사용할 수 있음.

position : fixed; (고정된)

  • 항상 고정된 위치에 요소를 배치함.
    (화면이 움직이든 말든 항상 같은 위치)

position : sticky; (스티커)

  • 요소가 기본적으로 relative처럼 동작하다가, 특정 스크롤 위치에 도달하면 고정됨.
# HTML

<div class="container-1">
  <div class="first">first</div>
  <div class="second">second</div>
  <div class="third">third</div>
</div>
# CSS

div {
  border: 1px solid black;
  box-sizing: border-box;
}

.container-1 {
  border: 2px dashed red;
  position: relative;
}

.first {
  width: 300px;
  height: 300px;
  background-color: yellow;
}

.second {
  width: 200px;
  height: 200px;
  background-color: green;

  position: absolute;
>
  top: 50px;
  left: 50px;
}

.third {
  width: 100px;
  height: 100px;
  background-color: red;

  position: absolute;

  top: 100px;
  left: 100px;
}

요소를 영역 정가운데에 배치하기

# HTML

<div class="container-2">
<div id="center"></div>
</div>
# CSS

/* 정가운데 배치하기 */
.container-2 {
  width: 300px;
  height: 300px;
  position: relative;
}

#center {
  width: 50px;
  height: 50px;
  background-color: pink;

  position: absolute;

  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  margin: auto;
}
# HTML

<div style="height: 500px;"></div>
<div class="fixed-area">
  <a href="#body-top">위쪽으로 이동</a>
</div>
# CSS

.fixed-area {
  width: 120px;
  background-color: yellow;
  color: white;

  position: fixed;

  bottom: 50px;
  right: 50px;
}

.fixed-area > a {
  text-decoration: none;
}

.fixed-area > a:visited{
  color: red;
}

/* 크롬, 사파리, 엣지 등 브라우저 전용 속성 중 하나
  글씨 테두리 색상과 두께를 한번에 지정.
  -webkit-text-stroke: 5px white;
  color : black;
*/

profile
인생은 변수

0개의 댓글