
CSS Layout은
웹 페이지의 구조와 배치를 설정하는 방법을 설명해주며, 이를 통해 다양한 기법들을 사용하여 웹 페이지의 요소들을 원하는 위치에 배치할 수 있다.
Layout을 위한 주요 기법들 알아보기
display이 속성을 사용하면, 요소가 가지고 있는
block,inline등을 변경할 수 있다.
(1) block
width를 지정하지 않으면 전체 너비를 차지한다..example {
display: block;
} /* `.example` 클래스의 요소를 `block`으로 변경한다. */
(2) inline
margin, padding의 top과 bottom만 설정할 수 있다..example {
display: inline;
} /* `.example` 클래스의 요소를 `inline`으로 변경한다. */
(3) inline-block
block과 inline의 특성을 모두 가진다.block의 특성으로 height를 지정할 수 있다.inline의 특성으로 가로로 배치된다..example {
display: inline;
} /* `.example` 클래스의 요소를 `inline-block`으로 변경한다. */
요소를 안 보이게 하는 방법으로는
display속성의none과visibility속성의hidden이 있다.
(4) display: none;
.example {
display: none;
} /* `.example` 클래스의 요소를 `none`으로 변경하여 안 보이게 해준다. */
(참고) visibility: hidden;
.example {
visibility: hidden;
} /* `.example` 클래스의 요소를 `hidden`으로 변경하여 안 보이게 해준다. */
float요소를 좌우 방향으로 띄우는 역할을 담당한다.
float: none;이라는 값을 가지고 있다.요소의 레이아웃을 변경하지 않았을 때의 배치하는 방법에 관해 설명한 것이다. float와 매우 밀접한 개념!
🩵 모든 요소가 필수적으로 가지는 속성이라면, 별도로 정렬 속성을 사용하지 않아도 될 것 같은데요?!
🩶 과거에는 float 속성을 이용해 요소들을 정렬하는 방식이 일반적이었지만, 현재는 권장되지 않는 방식입니다.
float 속성의 주요 역할은 요소의 흐름을 지정하는 것인데요. 만약 모든 요소의 float 속성을 none이 아닌 다른 값으로 지정하면, 요소의 흐름이 계속 바뀌면서 주변 요소의 배치를 방해할 수 있습니다. 결과적으로 레이아웃이 복잡해지고 예상치 못한 결과를 초래할 수 있습니다.
또한 float 속성을 사용하면 클리어링이라는 추가 작업이 필요한데, 이를 위해 추가적인 HTML/CSS 코드를 작성해야 하므로 불필요한 코드 생성을 유발할 수 있습니다.
🩵 그렇다면 대체 어느 속성을 사용해야 하나요..?
🩶 Grid나 Flexbox 같은 더욱 유연한 레이아웃 도구들을 활용하면 효과적으로 레이아웃을 제어할 수 있습니다. 특히 반응형 웹 디자인을 구현하려 할 때는 float 속성이 레이아웃의 유연성을 제한하므로 사용을 피하는 것이 좋습니다.
🩵 그래도 사용해보고 싶어요!
float 속성의 사용 방법속성: 값 | 설명 |
|---|---|
float: left; | 요소를 왼쪽으로 띄웁니다. 왼쪽에 공간이 없다면 다음 줄로 내려갑니다. |
float: right; | 요소를 오른쪽으로 띄웁니다. 오른쪽에 공간이 없다면 다음 줄로 내려갑니다. |
float: none; | float 속성을 적용하지 않습니다. 이는 기본값입니다. |
float: inherit; | 부모 요소의 float 속성 값을 상속받습니다. |
<html>
<head>
<style>
img {
float: right;
}
</style>
</head>
<body>
<p>여기에 긴 텍스트가 있습니다. 여기에 긴 텍스트가 있습니다.
여기에 긴 텍스트가 있습니다. 여기에 긴 텍스트가 있습니다.
여기에 긴 텍스트가 있습니다. 여기에 긴 텍스트가 있습니다.</p>
<img src="google.png" alt="예시 이미지">
</body>
</html>

position요소의 위치를 설정할 수 있으며,
float와 비슷하게 요소의 흐름을 이용하는 속성이다.
일반적인 문서 흐름에 따라 배치한다.
(1) static
static은 일반적인 문서 흐름에 따라 배치해준다.top, left, rigth, bottom, z-index가 적용되지 않는다.<div style="position: static;">position은 relative이며 왼쪽에서 10px 떨어지고, 위에서 20px 내려간다.</div>

(2) relative
relative는 일반적인 문서 흐름에 따라 배치해주며, 상대를 지정하여 이를 기준으로 자신을 움직여서 배치할 수 있다.top, left, rigth, bottom을 사용하여 움직일 수 있다. <div style="position: relative; left: 10px; top: 20px;">position은 relative이며 왼쪽에서 10px 떨어지고, 위에서 20px 내려간다.</div>

➡️ `static`에서 위치가 달라진 것을 확인할 수 있다.
➡️ 왼쪽에서는 `10px` 만큼 오른쪽으로 이동. (음수인 경우에는 왼쪽으로 이동한다.)
➡️ 위에서는 `20px`만큼 아래로 이동. (음수인 경우에는 위로 이동한다.)
(3) absolute
absolute는 일반적인 문서 흐름에서 제거하고, 가장 가까운 조상(position 속성이 static이 아닌 요소)을 기준으로 요소가 배치된다.position 속성이 static이 아닌 요소)body)을 기준으로 위치를 잡는다<div style="position: absolute; top: 50px; left: 100px;">position은 absolute 왼쪽에서 100px 떨어지고, 위에서 200px 내려간다.</div>

➡️ `body`를 기준으로 위치를 잡아서 배치됨.
➡️ 왼쪽에서는 `100px` 만큼 오른쪽으로 이동. (음수인 경우에는 왼쪽으로 이동한다.)
➡️ 위에서는 `200px`만큼 아래로 이동. (음수인 경우에는 위로 이동한다.)
<!-- 부모가 있음 -->
<div style="position:relative">
<div style="position: absolute; top: 50px; left: 100px; color:red;">position은 absolute 왼쪽에서 100px 떨어지고, 위에서 200px 내려간다.</div>
</div>
<!-- 부모가 Body -->
<div style="position: absolute; top: 50px; left: 100px;">position은 absolute 왼쪽에서 100px 떨어지고, 위에서 200px 내려간다.</div>

➡️ 부모 요소에 따라 배치된 위치가 다르다는 걸 확인할 수 있다.
(4) fixed
💫 간단 정리
relative자기 기준으로 /absoult는 부모 기준으로 /fixed는 뷰포트를 기준으로
(5) sticky
relative와 fixed 특성을 모두 가진다.relative 특성으로 자기 위치를 기준으로 지정할 수 있다.fixed 특성으로 특정 위치를 지정할 수 있다.z-index요소의 스택 순서를 지정할 때 사용하여, 요소의 '쌓임' 순서를 지정한다.
position속성이static이 아닌 요소에만 적용된다.
여러 개의 요소가 겹치는 경우 어떤 요소가 다른 요소의 앞이나 뒤에 표시될지를 결정하는 순서를 의미한다.
(3차원 공간에서의 Z축과 동일하다.)
<div style="position: relative; z-index: 1;">This element is beneath the other one.</div>
<div style="position: relative; z-index: 2;">
➡️ z-index가 2인 요소가 z-index가 1인 요소 위에 나타난다.
overflow요소의 콘텐츠가 지정한 박스의 너비와 높이를 벗어났을 때 어떻게 처리할 지 결정한다.
overflow-y와overflow-x를 사용하여 높이(y), 너비(x)를 각각 설정할 수 있다.
(1) visible
<div style="width: 200px; height: 50px; overflow: visible; background: skyblue">
overflow:visible 테스트중인뎅ㅇㄹ미뢰ㅏㅇ너리;마ㅓㄴㅇ리ㅓㅇ민러ㅣㅁ어니러ㅣㅇㄴ머리;ㅓㅇㄴ미ㅓㄹ
</div>

(2) hidden
<div style="width: 200px; height: 50px; overflow: hidden; background: skyblue">
overflow:hidden 테스트중인뎅ㅇㄹ미뢰ㅏㅇ너리;마ㅓㄴㅇ리ㅓㅇ민러ㅣㅁ어니러ㅣㅇㄴ머리;ㅓㅇㄴ미ㅓㄹ
</div>

(3) scroll
<div style="width: 200px; height: 50px; overflow: scroll; background: skyblue">
overflow:scroll 테스트중인뎅ㅇㄹ미뢰ㅏㅇ너리;마ㅓㄴㅇ리ㅓㅇ민러ㅣㅁ어니러ㅣㅇㄴ머리;ㅓㅇㄴ미ㅓㄹ
</div>

(4) auto
visible이 적용되어 있다.