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
이 적용되어 있다.