Front-end/HTML & CSS

[CSS] float속성과 overflow hidden속성 : 블록 요소 한 줄에 정렬하기

영벨롭 2022. 3. 31. 13:46

 우선 다음과 같이 코드를 작성해보겠습니다. 

 

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="main.css">
  <script defer src="./main.js"></script>
</head>

<body>
  <div class="hello">Hello</div>
  <div class="world">World</div>
</body>

</html>

 

 <div> 태그는 블록 요소로, 요소가 수직으로 쌓이는 것을 확인할 수 있습니다. 

 

 이 두 개의 <div> 태그를 각각 왼쪽, 오른쪽에 같은 줄에 위치시키기 위해선 어떤 속성을 부여해야할까요?

 

 먼저 text-align 속성을 사용해보겠습니다. 

 

.hello {
  font-size: 30px;
  font-weight: bold;

  text-align: left;
}

.world {
  font-size: 30px;
  font-weight: bold;

  text-align: right;
}

 

 

 각 요소들이 왼쪽, 오른쪽 정렬은 되었지만 여전히 다른 줄에 위치해있죠?

 

 블록 요소를 같은줄에 왼쪽, 오른쪽 정렬하기 위해선 float 속성을 사용합니다. 

 

 float 말 그대로 요소를 '둥둥 띄우는 것'입니다.

설명
none 띄우지 않음(default)
left 왼쪽으로 띄움
right 오른쪽으로 띄움
initial 기본값으로 설정
inherit 부모 요소로부터 상속

 

코드를 고쳐보겠습니다. 

 

.hello {
  font-size: 30px;
  font-weight: bold;

  float: left;
}

.world {
  font-size: 30px;
  font-weight: bold;

  float: right;
}

 한 줄에 잘 정렬이 된 것을 확인할 수 있습니다. 

 

 근데 이때 float의 문제점이 있습니다. 

 

 float 속성을 사용한 요소들은 '둥둥 띄어져있기' 때문에 다른 요소들과 겹칠 수 있습니다. 

 

<body>
  <div class="box">
    <div class="hello">Hello</div>
    <div class="world">World</div>
    <div class="name">My name is 홍길동</div>
  </div>
</body>

 

.box {
  border: 3px solid black;
  width: 400px;
  height: 200px;
}

.hello {
  font-size: 30px;
  font-weight: bold;

  float: left;
}

.world {
  font-size: 30px;
  font-weight: bold;

  float: right;
}

.name {
  font-size: 30px;
  color: blue;
}

 

 name 클래스 요소가 다음 줄에 작성되지 않고 hello와 world 요소와 겹쳐져 나오는 것을 확인할 수 있습니다. 

 

 이것을 막기 위해 float 속성을 사용한 요소에 overflow: hidden; 속성을 추가해줘야 합니다. 

 

 

<body>
  <div class="box">
    <div class="float-wrap">
      <div class="hello">Hello</div>
      <div class="world">World</div>
    </div>
    <div class="name">My name is 홍길동</div>
  </div>
</body>

 

.box {
  border: 3px solid black;
  width: 400px;
  height: 200px;
}

.float-wrap {
  overflow: hidden;
}

.hello {
  font-size: 30px;
  font-weight: bold;

  float: left;
}

.world {
  font-size: 30px;
  font-weight: bold;

  float: right;
}

.name {
  font-size: 30px;
  color: blue;
}

 

반응형