패스트캠퍼스 강의를 정리한 내용입니다.
"The RED : 견고한 UI 설계를 위한 마크업 가이드 by 정찬명"
https://drafts.csswg.org/css2/#float-position
float을 해제하지 않은 경우, 플로팅된 박스는 부모 박스의 요소를 증가시키지 않고 플로팅 되지 않은 요소들의 높이만 부모에게 인지됨
float 된 요소와 다른 주변에 흐르는 요소들의 높이가 모두 반영되어 부모에게 인지됨
부모 요소에 float 속성 추가
<p class="container">
<span class="float">floating element</span>
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
</p>
<style>
.container {
float: left;
}
.float {
float: left;
}
</style>
자식 요소의 가장 마지막에 빈 element를 추가 후, 빈 element에 clear 속성 적용
<p class="container">
<span class="float">floating element</span>
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
<span class="blank"></span>
</p>
<style>
.float {
float: left;
}
.blank {
display: block; // clear 속성은 block 요소에만 적용 가능
clear: both;
}
</style>
부모 요소에 'overflow:hidden;' 속성을 적용
<p class="container">
<span class="float">floating element</span>
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
</p>
<style>
.container {
overflow: hidden;
}
.float {
float: left;
}
</style>
부모 요소의 display 속성을 'inline-block'으로 변경
<p class="container">
<span class="float">floating element</span>
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
</p>
<style>
.container {
display: inline-block;
}
.float {
float: left;
}
</style>
가상 요소 선택자 'after'를 사용하여, 부모 요소에 가상의 'blank element'를 만들고 그 요소를 clear하는 방법
<p class="container">
<span class="float">floating element</span>
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
</p>
<style>
.container::after {
content: '';
display: block;
clear: both;
}
.float {
float: left;
}
</style>
부모 요소의 display 속성을 'flow-root'로 변경
⚠ IE 브라우저에서 미지원
<p class="container">
<span class="float">floating element</span>
동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세
</p>
<style>
.container {
display: flow-root;
}
.float {
float: left;
}
</style>
CSS Lint 규칙 설명
규칙(Rule) ID: display-property-grouping이 규칙은 사용하고 있는 display 속성에 적합하지 않은 다른 속성들을 정리하는 것을 목표로 하고 있습니다. 이를 통해서 불필요한 코드를 제거하여 더 작고 깔끔한 CSS 파일을 만들어낼 수 있습니다. CSS Lint는 다음의 경우를 오류로 판단합니다.
- display: inline이 width, height, margin, margin-top, margin-bottom, float와 함께 쓰인 경우 경고
- display: inline-block이 float와 함께 쓰인 경우 경고
- display: block이 vertical-align와 함께 쓰인 경우 경고
- display: table-* 이 margin(및 그 변형들)또는 float와 함께 쓰인 경우 경고
float을 컬럼 배치용으로 많이 사용하지만 이는 원래 컬럼 적용 속성이 아니므로, float을 사용하지 않고 컬럼 레이아웃을 배치하는 방법 알아보기
columns 속성을 사용하여 div나 p 요소를 여러개 만들지 않고 하나의 div 또는 하나의 p 요소에 텍스트를 담아서 원하는 만큼의 컬럼 수를 만들어 배치 가능
<'column-width'> || <'column-count'>
→ 값으로 column-width, column-count 둘 중 하나, 또는 둘 다 사용 가능
https://www.w3.org/TR/css-multicol-1/#the-multi-column-model
<style>
.container {
max-width: 640px;
columns: 310px 2; /* <'column-width'> || <'column-count'> */
column-gap: 20px; /* column의 여백 */
column-rule: 20px solid #0002; /* column 사이 여백 스타일 */
background: #eee;
}
</style>
컬럼 내용이 중간에서 잘리지 않도록 설정하는 속성
<div class="container">
<section>
<h2>제목</h2>
<p>장문의 내용 .......</p>
</section>
<section>
<h2>제목</h2>
<p>장문의 내용 .......</p>
</section>
<section>
<h2>제목</h2>
<p>장문의 내용 .......</p>
</section>
<section>
<h2>제목</h2>
<p>장문의 내용 .......</p>
</section>
</div>
<style>
.container {
max-width: 640px;
columns: 310px 2; /* <'column-width'> || <'column-count'> */
column-gap: 20px; /* normal == 1em */
background: #eee;
}
section {
margin-bottom: 1em;
break-inside: avoid;
background: #ddd;
}
</style>