다음은 CSS를 사용하여 HTML div 요소를 나란히 배치하는 3가지 방법입니다.
(클릭하면 각 섹션으로 이동)
- 플로트 방식
- 플렉스박스 방식
- CSS 그리드 방식
플로트 메소드
float 메서드에서 다음 HTML 마크업을 사용합니다.
<div class="float-container">
<div class="float-child">
<div class="green">Float Column 1</div>
</div>
<div class="float-child">
<div class="blue">Float Column 2</div>
</div>
</div>
.float-container
.float-child
를 모두 포함하는 단순히 부모 요소입니다. 요소.
div를 나란히 가져오기 위해 다음 CSS 규칙을 사용합니다.
.float-container {
border: 3px solid #fff;
padding: 20px;
}
.float-child {
width: 50%;
float: left;
padding: 20px;
border: 2px solid red;
}
결과 코드는 다음과 같습니다.
div에 테두리와 패딩을 추가하여 진행 상황을 더 쉽게 확인할 수 있습니다. 외부의 두꺼운 실선 흰색 테두리는 .float-container
입니다. 20px의 패딩이 있는 div.
그런 다음 각 .float-child
요소에는 더 얇은 빨간색 테두리와 더 많은 패딩이 있습니다. 그러면 실제 색상 블록은 .float-child
의 자식 요소입니다. 집단. (이유는 잠시 후에 알게 될 것입니다.)
div를 나란히 배치하려면 float
를 사용합니다. 각 .float-child
부동 소수점 속성 요소를 왼쪽으로 이동합니다.
둘 다 왼쪽에 떠 있기 때문에 둘 다 들어갈 충분한 공간이 있으면 나란히 표시됩니다. 두 개의 .float-child
가 있기 때문에 적합합니다. div, 각각 너비가 50%입니다.
그리고 div 사이의 공간은 각 .float-child
에 패딩을 추가하여 생성됩니다. div에 색상 블록이 포함됩니다.
외부 div의 각 열을 중첩하여 열 사이에 공백 추가
색상 블록에는 외부 div(.float-child
) 공간을 추가하고 두 블록을 나란히 맞추기 위해.
.float-child
만 있다면 어떨까요? 패딩 없이 div를 만들고 대신 margin-right
를 넣어 공간을 추가하려고 했습니다. 이 같은 첫 번째 블록의 값은?
HTML:
<div class="float-container">
<div class="float-child green">
Float Column 1
</div>
<div class="float-child blue">
Float Column 2
</div>
</div>
CSS:
.float-child.green {
margin-right: 20px;
}
이 경우 .float-child
요소는 전체 너비의 50%를 차지합니다. 그러나 첫 번째 녹색 요소의 여백도 20px입니다.
이것은 두 블록이 50% + 20px + 50% 너비를 차지함을 의미합니다. 너비가 100%보다 20픽셀 더 크므로 둘 다 나란히 놓을 공간이 충분하지 않습니다.
그러면 두 번째 파란색 블록이 첫 번째 블록 아래의 다음 행으로 줄 바꿈되고 왼쪽에 떠 있습니다.
너비를 조정하여 너비를 48% 또는 50% 미만이 되도록 조정할 수 있습니다. 하지만 정확하지는 않습니다.
그래서 개인적으로 50% 너비로 설정된 외부 div에 블록을 래핑하고 div 사이에 공간을 추가하기 위해 패딩을 사용하는 것을 좋아합니다.
요즘에는 CSS에서 다른 새로운 메서드를 사용하여 float 대신 div를 나란히 배치하는 것이 더 쉽습니다.
다음 중 하나인 flexbox 메서드를 살펴보겠습니다.
플렉스박스 방식
flexbox를 사용하면 두 개의 div 요소를 정렬하는 보다 직관적인 방법을 사용할 수 있습니다.
HTML:
<div class="flex-container">
<div class="flex-child magenta">
Flex Column 1
</div>
<div class="flex-child green">
Flex Column 2
</div>
</div>
CSS:
.flex-container {
display: flex;
}
.flex-child {
flex: 1;
border: 2px solid yellow;
}
.flex-child:first-child {
margin-right: 20px;
}
flexbox를 사용하여 display: flex
를 설정했습니다. 상위 .flex-container
에서 요소. 이렇게 하면 플렉스박스가 켜집니다.
그런 다음 각 .flex-child
에서 요소에서 flex: 1
을 설정하고 있습니다. . 이 숫자는 부모 플렉스 요소에서 각 자식의 너비를 비교하는 비율과 같습니다.
동일하므로 사용 가능한 공간이 동일하게 분할됩니다. 그리고 두 개의 자식 요소가 있으므로 각각 50%를 차지합니다.
결과 코드는 다음과 같습니다.
여백을 사용하여 div 사이에 공간을 추가하면 여전히 맞을 것입니다!
margin-right: 20px
를 추가하여 공간을 추가했습니다. 첫 번째 .flex-child
에만 요소. 그러나 flexbox는 사용 가능한 나머지 너비를 나눌 때 추가 20px를 고려할 만큼 충분히 지능적입니다.
즉, 정확한 픽셀을 계산하지 않고도 여백이 있는 공간을 추가할 수 있습니다. Flexbox는 귀하의 콘텐츠에 적합합니다!
이것이 제가 flexbox를 좋아하는 큰 이유 중 하나입니다.
그러나 반응형 그리드에 배치하려는 여러 요소가 있는 경우 요소 사이에 해당 공간을 추가해야 하는 위치를 항상 알 수 없습니다.
우리의 경우 모바일용으로 두 div를 서로 쌓고 싶다면 margin-right
를 제거해야 합니다. 모바일 너비에 대한 속성입니다.
또는 각 .flex-child
에 대해 추가 외부 요소와 패딩을 추가할 수 있습니다. float 메서드로 수행한 것과 유사한 요소입니다.
100% 직관적이지는 않지만 여전히 작동합니다. flexbox로 더 복잡한 반응형 레이아웃을 만들어야 하는 경우 이 점을 염두에 두어야 합니다.
이제 div를 나란히 배치하는 데 사용할 수 있는 최신 방법인 CSS 그리드를 살펴보겠습니다.
CSS 그리드 방식
CSS 그리드를 사용하여 두 div를 나란히 배치하는 방법은 다음과 같습니다.
HTML:
<div class="grid-container">
<div class="grid-child purple">
Grid Column 1
</div>
<div class="grid-child green">
Grid Column 2
</div>
</div>
CSS:
.grid-container {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 20px;
}
코드는 다음과 같습니다.
그리드의 한 가지 큰 변경 사항은 먼저 그리드 템플릿의 모양을 결정한다는 것입니다. 레이아웃에 원하는 열 및/또는 행 수를 의미합니다.
우리의 경우 너비가 같은 두 개의 열이 필요합니다. 따라서 상위 .grid-container
에서 요소에서 display: grid
로 그리드를 켭니다. . 그런 다음 grid-template-columns
를 사용하여 레이아웃에 원하는 열 수를 추가합니다. 재산.
너비가 같은 두 개의 열이 필요하므로 1fr 1fr
로 설정합니다. . 이것은 브라우저에 2열 레이아웃을 생성하도록 지시하고 각 열은 1fr
을 차지합니다. (fr =분수 단위) 공간.
fr 단위는 flex: 1
과 유사하게 각 열 대 다른 열의 비율입니다. flexbox 메서드에서 사용한 규칙입니다. 열을 1fr 1fr
로 설정하기 각 열이 동일한 양의 공간을 차지함을 의미합니다.
grid-gap 속성을 사용하여 그리드 항목 사이에 공백 추가
CSS 그리드 사용의 한 가지 큰 이점은 그리드 항목 사이에 공간을 추가하기 위해 패딩이나 여백을 사용할 필요가 없다는 것입니다.
grid-gap
을 사용할 수 있습니다. (또는 gap
최신 브라우저에서) 그리드 템플릿에 공간을 자동으로 추가합니다.
grid-gap
을 설정했습니다. 20px로 늘리면 브라우저는 모든 항목이 나란히 놓여 있든 쌓여 있든 20px의 공간을 추가하는 것을 알 수 있습니다.
그리드의 모든 CSS 속성이 상위 .grid-container
요소. 실제로 자식 .grid-child
에 대한 CSS를 작성할 필요가 없었습니다. 요소!