1. 程式人生 > >子元素浮動造成父元素坍塌的原因分析和解決方法

子元素浮動造成父元素坍塌的原因分析和解決方法

現象:

在製作網頁的導航欄的時候,往往會在父元素.nav 中加入一個logo或者標題 h1 再來加入一個導航列表 ul,這個時候會分別給他們加上 float:left / right 樣式。使用chrome的盒子模型檢視的時候會發現.nav 高度為0,也就是“坍塌”了。

用chrome的盒子模型檢視我下面的寫的程式碼時發現,.container 出現了坍塌現象,而 .nav 卻沒有。

<div class="nav">
  <div class="container"> 
    <h1>科普之家</h1>
    <ul>
      <li><a href="#news">    新聞之框  </a></li>
      <li><a href="#common">  常識科普  </a></li>
      <li><a href="#video">   精彩視訊  </a></li>
      <li><a href="#article"> 書籍文章  </a></li>
    </ul>
  </div>
</div>
.nav {
  position: fixed;  
  width: 100%;
  z-index: 1000;
  background: #ccc;
}

.container {
  margin: auto 10%;
}

.nav h1 {
  float: left;  
  line-height: 86.4px;
  font-size: 2.5em;
  font-weight: bolder;
  font-family: "方正舒體";
  color: #eee;
}

.nav ul {
  float: right;
  list-style: none;  
}

.nav li {
  float: left;
  margin: 10px auto;
}

.nav li a {
  display: block;
  padding: 20px;
  text-decoration: none;
  font-size: 1em;
  font-weight: bold;
}

分析:

回想學習時提到的,子元素設定浮動,便脫離了文件流(不會影響在文件流的文字)。父元素沒有設定固定的高度,子元素影響不了父元素無法為父元素撐開高度,便造成了坍塌現象。這便是為什麼 .container 沒有高度的原因;那為什麼  .container 的父元素 .nav 卻會有高度呢?我猜想是我為 .nav 設定 fixed 之後與它脫離了文件流,在同樣都脫離了文件流的情況下 h1 和 ul 會與其產生影響,便為其撐開了高度。為了驗證這個猜想我把 fixed 屬性去掉,果不其然, .nav 也出現了坍塌現象。

結論:

1、坍塌現象產生的原因:子元素設定浮動,脫離文件流,不再影響父元素,而父元素沒有設定高度,沒有其他元素為父元素“撐”開高度,便產生坍塌現象。

2、脫離文件流的元素不會影響在文件流內的元素;而脫離文件流的元素之間可能會互相影響(很明顯絕對定位元素之間不會影響,以後找機會探討一下。)

解決:

既然是浮動引起的問題,那問題就自然變成如何消除浮動。

搜尋引擎總結的幾個常見的方法:(原諒我現在並不全懂,儘量以後慢慢理解每個方法= =)

1、父元素也設定浮動或絕對定位;

2、父元素設定 overflow:hidden / auto 屬性;

3、在子元素最後增加新元素,或在父元素的下一個元素,並應用 clear:both  屬性;

    4、使用 :class 偽類;(這個貌似是最拉風的?)

相關推薦

元素浮動造成元素坍塌原因分析解決方法

現象: 在製作網頁的導航欄的時候,往往會在父元素.nav 中加入一個logo或者標題 h1 再來加入一個導航列表 ul,這個時候會分別給他們加上 float:left / right 樣式。使用chrome的盒子模型檢視的時候會發現.nav 高度為0,也就是“坍塌”了。 用

用axis2解析xml失敗的原因分析解決方法

和同事之間調介面時遇到了如下的問題,同事用的LotusScript(wsdl檔案是由他那邊提供的),我用的是Java,我這邊通過axis2去解析該wsdl,但解析時報下面這樣的錯。 More than one part for message XMLMAINRequest

api-ms-win-crt**.dll缺失原因分析解決方法

  系統是否安裝了此類更新,可以通過檢視“系統資訊”來判斷,操作:Win鍵+R,輸入 cmd  /k  systeminfo.exe 確定。當然,也可以通過開啟控制面板或使用第三方工具來檢視。   如果系統中未安裝KB2999226、KB3118401更新,則利用系統Windows Update掃描更新

關於元素的margin-top溢出元素浮動元素高度影響解決方案

20px oat -- 外邊距 生成 round border top display 以下是個人學習筆記,僅供學習參考。 1.關於子元素的margin-top作用在無margin-top-border的父元素上導致子元素的margin-top溢出問題。 在給沒有margi

元素浮動元素塌陷解決辦法

父元素沒有給固定高度,子元素設有固定的高度,但是父雲素也沒有被子元素的高度撐開。子元素浮動了,而浮動屬性會使元素脫離文件流,即子元素設定float屬性後,當前的html文件會當作元素不存在一樣,所以可以看作父元素內根本沒有內容,高度當然也就撐不開。  解決辦法: 

CSS元素浮動導致元素高度塌陷問題

       根據W3C標準,在頁面中元素都有一個隱含的屬性叫做 Block Formatting Context,簡稱 BFC,該屬性可以設定開啟或者關閉,預設是關閉的。 當開啟元素的BFC以後,元素會具有以下特性:    1.父元素的垂直外邊距不會和子元素重疊  

css之元素浮動導致元素高度塌陷解決方案

問題引入:在製作導航欄時,若父元素ul不給出高度的具體數值,只給背景。而子元素li又用到了float:left。 那麼,這種情況就會導致父元素的背景“消失”,因為浮動元素脫離文件流,不佔據空間,因此相當於父列表沒有內容。 解決方案: 一:新增進行清理浮動的元素(但書中說,這

清除盒子內元素浮動導致元素塌陷的5種方法

before -s rfi 方便 css float 需要 for 通過 更詳細的解釋請移動到:   地址1:http://www.cnblogs.com/chedabang/p/5973601.html   地址2:https://www.cnblogs.com/libi

CSS中子元素浮動導致元素高度塌陷解決方案

<style type="text/css"> #container { border: 1px solid green; } .div1 { float: left; width: 100px; height: 100px; } .div2 {

MySQL Err 1418 的原因分析解決方法

mysql 1418 MySQL的有個參數log_bin_trust_function_creators,官方文檔對這個參數的介紹、解釋如下所示: This variable applies when binary logging is enabled. It controls whether st

Error:Minimum supported Gradle version is 2.14.1. Current version is 2.10.原因分析解決

圖片 幫助 url err ... tle IT .net fcm 最近和主管一起開發項目一直出現這個問題: Error:Minimum supported Gradle version is 2.14.1. Current version is 12.10. If usi

POI讀取word時讀取${}分段了原因分析以及解決方法

POI讀取word內容的疑問 兩片內容相同的word,poi分割成XWPFRun集合的時候,發現相同的段落內容有空行。 word1列印的段落內容 word2列印的段落內容 造成兩次段落內容分割不同的情況我大致知道,word2每一行純手打,word1複製過來的。但是有

關於PHP的 PHP-FPM程序CPU 100%的一些原因分析解決方案

之前碰到過php-fpmCPU高達80%-90%,特此記錄下 1. 檢視是否是硬體問題   方式:top  命令   主要檢視:load average(平均負載),這是一個4核8G記憶體的伺服器   1分鐘平均負載:2.32;   5分鐘平均負載:2.18;   15分鐘平均負載:3.95;   loa

Connection reset原因分析解決方案

在使用HttpClient呼叫後臺resetful服務時,“Connection reset”是一個比較常見的問題,有同學跟我私信說被這個問題困擾很久了,今天就來分析下,希望能幫到大家。例如我們線上的閘道器日誌就會拋該錯誤: 從日誌中可以看到是Socket套接字

Webview載入 URL 失敗的原因分析解決辦法

在使用webview載入URL失敗的情況,檢查其他地方有沒有呼叫webview的pauseTimers 方法 public void pauseTimers () 此方法不僅僅針對當前的webview而是全域性的全應用程式的webview,它會暫停所有we

關於@Aspect 註解不起作用的原因之一,解決方法

在使用@Aspect 註解進行AOP程式設計時,如果專案中使用到了spring mvc 那麼如果你想使用AOP 來攔截controller層的方法時,你的AOP註解需要宣告在dispatcher-servlet.xml中與spring mvc的配置定義在一起!!!如果修改完後

import json後,報錯:AttributeError: 'module' object has no attribute 'dumps,原因分析解決方法

編寫python程式碼,import json後,報錯:AttributeError: 'module' object has no attribute 'dumps',如下圖所示: 報錯資訊為:模組沒有方法dumps 單步除錯: 單步除錯,發現報錯相同。 檢視json

ANR原因分析解決方法

內容目錄 1       ANR是如何產生的 1.1       ANR產生條件 ANR的產生需要同時滿足三個條件: 主執行緒:只有應用程式程序的主執行緒響應超時才會產生ANR;超時時間:產生ANR的上下文不同,超時時間也不同,但只要超過這個時間

簡訊驗證碼接收不到原因分析解決方案分析

簡訊驗證碼是通過傳送驗證碼到手機的一種有效的驗證碼系統。無論是大型網站尤其是購物網站,都提供有手機簡訊驗證碼功能,可以比較準確和安全地保證購物的安全性,驗證使用者的正確性。創藍253簡訊服務平臺上總結了簡訊驗證碼接收不到的幾個原因:(1)簡訊閘道器擁堵或出現異常在一些節假日或

Media start error原因分析解決方法

之前在專案的時候,遇到到Media Recorder在快速啟動停止等一系列操作的後,再次啟動時,會failed的問題,類似的Log如下: ERROR/MediaRecorder(9008): startfailed:-19