1. 程式人生 > >子元素浮動讓父元素塌陷解決辦法

子元素浮動讓父元素塌陷解決辦法

父元素沒有給固定高度,子元素設有固定的高度,但是父雲素也沒有被子元素的高度撐開。子元素浮動了,而浮動屬性會使元素脫離文件流,即子元素設定float屬性後,當前的html文件會當作元素不存在一樣,所以可以看作父元素內根本沒有內容,高度當然也就撐不開。 
解決辦法: 
1.設定父元素float屬性;這樣,父元素也是脫離當前文件流,子元素和父元素一起脫離,並且子元素仍在父元素內,父元素內容不空了,所以高度會適應子元素高度。 
2.不要浮動,子元素使用display:inline-block; 
3.在最後一個設定浮動的子元素後加一個空div,清除浮動; 
4.父元素設定overflow:hidden屬性; 
5 .使用after偽物件清除浮動 ;

推薦後面3種方法。

針對方案4還可以這樣: 
如果在父元素內要左右排列且不讓父元素坍塌,可以這樣改,將左邊的子類設定為float,右邊的子類設定為overflow:hidden屬性。如下程式碼所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <style>
    .left{
        float:left;
        width:200px;
        margin-right: 20px;
        background-color
: #aaaaaa
; }
.parent{ overflow: hidden; background-color: antiquewhite; } @media screen and (max-width: 500px) { .left{ float: none; width: auto; margin-right: 0; margin-bottom
: 20px
; background-color: #aaaaaa; }
}
</style> </head> <body> <div class="parent"> <div class="left"><p>DEMO</p></div> <div class="right"><p>DEMO</p></div> </div> <p>DEMODEMODEMODEMO</p> </body> </html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
0

父元素沒有給固定高度,子元素設有固定的高度,但是父雲素也沒有被子元素的高度撐開。子元素浮動了,而浮動屬性會使元素脫離文件流,即子元素設定float屬性後,當前的html文件會當作元素不存在一樣,所以可以看作父元素內根本沒有內容,高度當然也就撐不開。 
解決辦法: 
1.設定父元素float屬性;這樣,父元素也是脫離當前文件流,子元素和父元素一起脫離,並且子元素仍在父元素內,父元素內容不空了,所以高度會適應子元素高度。 
2.不要浮動,子元素使用display:inline-block; 
3.在最後一個設定浮動的子元素後加一個空div,清除浮動; 
4.父元素設定overflow:hidden屬性; 
5 .使用after偽物件清除浮動 ;

推薦後面3種方法。

針對方案4還可以這樣: 
如果在父元素內要左右排列且不讓父元素坍塌,可以這樣改,將左邊的子類設定為float,右邊的子類設定為overflow:hidden屬性。如下程式碼所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <style>
    .left{
        float:left;
        width:200px;
        margin-right: 20px;
        background-color: #aaaaaa;
    }
        .parent{
            overflow: hidden;
            background-color: antiquewhite;
        }
        @media screen  and (max-width: 500px) {
            .left{
                float: none;
                width: auto;
                margin-right: 0;
                margin-bottom: 20px;
                background-color: #aaaaaa;
            }
        }
    </style>
</head>
<body>
<div class="parent">
    <div class="left"><p>DEMO</p></div>
    <div class="right"><p>DEMO</p></div>
</div>
<p>DEMODEMODEMODEMO</p>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34