BFC/clear/::after擬似要素は高度崩壊を解決し、::beforeは外距離オーバーラップを解決する(clearfixは高度陥没と外距離オーバーラップを同時に解決する)(css)
24026 ワード
BFC/clear/::after擬似要素は高度崩壊を解決し、::beforeは外距離オーバーラップを解決する(clearfixは高度陥没と外距離オーバーラップを同時に解決する)(css)
高度に集約された問題:
BFC(Block Formatting Context)ブロックレベルフォーマット環境
overfiow
を非visible
の値に設定overflow: hidden
を設けるBFCを開き、フローティング要素clear(他の要素のフローティングの影響で要素の位置を変更したくない場合は、clearプロパティを使用して、フローティング要素が現在の要素に与える影響を明らかにできます)
left
左側のフローティング要素が現在の要素に与える影響をクリア
right
右側のフローティング要素が現在の要素に与える影響をクリア
both
両側で最大の影響を及ぼす側をクリア
::after
擬似元素高度崩壊を解決
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>after title>
head>
<style>
.box1{
border: 10px red solid;
}
.box2{
width: 100px;
height: 100px;
background-color: #bbffaa;
float: left;
}
.box1::after{ /* box1 box2 */
content: '';
display: block;
clear: both;
}
style>
<body>
<div class="box1">
<div class="box2">div>
div>
body>
html>
::before
外距離オーバーラップ問題の解決
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>::before title>
head>
<style>
.box1{
width: 200px;
height: 200px;
background-color: #bfa;
}
.box1::before{
content: '';
display: table;
}
.box2{
width: 100px;
height: 100px;
background-color: orange;
margin-top: 100px;
}
style>
<body>
<div class="box1">
<div class="box2">div>
div>
body>
html>
clearfixは高度崩壊と外距離の重なりの問題を同時に解決する
/* clearfix */
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>clearfix title>
head>
<style>
.box1{
width: 200px;
height: 200px;
background-color: #bfa;
}
.box2{
width: 100px;
height: 100px;
background-color: orange;
margin-top: 100px;
}
.clearfix::before,
.clearfix::after{
content: '';
display: table;
clear: both;
}
style>
<body>
<div class="box1 clearfix">
<div class="box2">div>
div>
body>
html>
/*clearfix */
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>clearfix title>
head>
<style>
.box1{
border: 10px red solid;
}
.box2{
width: 100px;
height: 100px;
background-color: #bfa;
float: left;
}
.clearfix::before,
.clearfix::after{
content: '';
display: table;
clear: both;
}
style>
<body>
<div class="box1 clearfix">
<div class="box2">div>
div>
body>
html>