대열과 탈대열
이전 안내서에서 제가 일반 대열 속 블록 및 인라인 레이아웃에 대해 설명하였습니다. 대열에 속한 모든 요소는 이 메서드를 사용하여 배치됩니다.
다음 예제에서는 머리글, 단락, 목록 및 strong
요소가 포함된 마지막 단락이 있습니다. 머리글과 단락은 블록 레벨이며, strong
요소는 인라인입니다. 목록은 플렉스박스를 사용하여 항목을 행 내부로 정렬하지만 블록 및 인라인 레이아웃에도 참여하고 있습니다. 컨테이너는 외곽에 display
유형이 block
대열에 참여하고 있습니다.
요소 무리 전체는 대열에 속해 있다고 말할 수 있습니다. HTML 소스에 나타나는 순서대로 요소 무리들이 웹페이지에 등장합니다.
항목을 대열 밖으로 빼내기
대열에 속한 모든 요소는 다음과 구분된다:
- 부동 항목
position: absolute
속성이 부여된 항목 (아울러position: fixed
속성이 딸린 항목도 마찬가지로 동작합니다.)- 뿌리 요소(
html
)
대열에서 벗어난 항목은 새로운 블록 서식 상황(BFC)를 생성하므로, 그 안에 있는 모든 것은 페이지의 나머지 부분과는 구분되는 소형 레이아웃으로 볼 수 있다. 따라서 뿌리 요소는 우리 문서의 모든 내용에 해당하는 컨테이너이기 때문에 대열을 벗어나 있으며 당 문서에 대한 블록 서식 상황을 수립합니다.
부동 항목
이 예제에서 나는 div
를 가지고 있고, 그 다음 두 단락을 갖고 있다. 문단에 배경색을 추가한 다음 div
요소를 왼쪽으로 부동시켰다. 이제 div
는 대열에서 벗어났다.
부동체는 우선 일반 대열에 속했던 애초의 위치를 기준으로 배치되었고, 그 뒤 대열에서 벗어나 최대한 왼쪽으로 이동합니다.
여러분은 부동체 밑에 펼쳐지고 있는 다음 단락의 배경색을 볼 수 있습니다. 동 단락의 라인 상자 무리만 부동체 주변 콘텐츠를 둘러싸는 효과를 위해 축소되었습니다. 우리 단락 형태의 상자는 여전히 일반 대열이라는 규칙에 따라 표시되고 있습니다. 바로 그런 까닭에 부동 항목 주위에 공간을 만들려면 동 항목에 여백을 추가해서 그 여백으로부터 라인 상자 무리를 밀려나도록 해야하는 겁니다. 대열에 속한 다음 순번 콘텐츠에는 그 어떤 것을 적용한다고 해도 그런 효과를 달성할 수 없습니다.
절대 위치잡기
어떤 항목에 position: absolute
나 position: fixed
를 부여하면 동 항목이 대열에서 제거되며, 그것이 점유하고 있던 모든 공간이 제거됩니다. 다음 예제에서 나는 세 개의 단락 요소를 가지고 있으며, 두 번째 요소는 position
와 absolute
임에 더해 간격띄우기 값이 top: 30px
에 right: 30px
해당됩니다. 그 (두 번째) 요소는 문서 대열에서 제거되었습니다.
position: fixed
를 사용해 대열에서 항목을 제거하지만, 간격띄우기는 컨테이너 블록이 아닌 브라우저 뷰포트가 기준입니다.
위치잡기를 통해 대열에서 항목을 빼내면 콘텐츠의 중복 가능성을 관리해야 합니다. 대열에서 벗어나면 페이지의 다른 요소는 더 이상 요소가 존재한다는 것을 알지 못하므로 이에 반응하지 않습니다.
상대 위치잡기와 대열
어떤 항목에 position: relative
위치잡기를 부여하면 그것은 대열에 잔류하지만, 당신은 간격띄우기 값을 사용하여 동 항목을 주변으로 밀어낼 수 있습니다. 그러나 아래 예제에서 볼 수 있듯이 그것이 일반 대열 위치에 그대로 남아 있게 됩니다.
일반 대열에 속해 있었던 어떤 항목을 제거하거나 이동할 때, 해당 항목 주변의 콘텐츠를 겹치지 않도록 관리해야 할 필요성이 있다는 것을 예상할 수밖에 없을 겁니다. 말하자면 부동체를 정리하거나 position: absolute
가 적용된 요소가 여타 콘텐츠에 올라타지 않도록 담보해야 합니다. 이러한 이유로 요소 무리를 대열 속에서 제거하는 메서드는 그들 메서드가 가져올 영향을 파악한 상태에서 사용되어야 합니다.
요약정리
참조 항목
- 서식 학습하기: 위치잡기