首頁 web前端 css教學 CSS-float詳細介紹clear:both

CSS-float詳細介紹clear:both

Jul 26, 2017 pm 03:34 PM
clear

首先要知道,p是區塊級元素,在頁面中獨佔一行,自上而下排列,也就是傳說中的流。
CSS-float詳細介紹clear:both
可以看出,即使p1的寬度很小,頁面中一行可以容下p1和p2,p2也不會排在p1後邊,因為p元素是塊級,獨佔一行的。注意,以上這些理論,是指標準流中的p。
無論多麼複雜的佈局,其基本出發點均為:「如何在一行中顯示多個p元素」。浮動可以理解為讓某個p元素脫離標準流,漂浮在標準流之上,和標準流不是一個層次,所以叫float。
如,假設上圖中的p2浮動,那麼它將脫離標準流,但p1、p3、p4仍然在標準流當中,所以p3會自動向上移動,佔據p2的位置,重新組成一個流。如圖:
CSS-float詳細介紹clear:both
從圖中可以看出,由於對p2設定浮動,因此它不再屬於標準流,p3自動上移頂替p2的位置,p1、p3、p4依序排列,成為一個新的流。又因為浮動是漂浮在標準流之上的,因此p2擋住了一部分p3,p3看起來變「矮」了
這裡p2用的是左浮動(float:left;),可以理解為漂浮起來後靠左排列,右浮動(float:right;)當然就是靠右排列。這裡的靠左、靠右是說頁面的左、右邊緣。
如果我們把p2採用右浮動,會是如下效果:
CSS-float詳細介紹clear:both
此時p2靠頁面右邊緣排列,不再遮擋p3,讀者可以清晰的看到上面所講的p1 、p3、p4組成的流。
目前為止我們只浮動了一個p元素,多個呢?
下面我們把p2和p3都加上左浮動,效果如圖:
CSS-float詳細介紹clear:both
同理,由於p2、p3浮動,它們不再屬於標準流,因此p4會自動上移,與p1組成一個「新」標準流,而浮動是漂浮在標準流之上,因此p2又擋住了p4。
咳咳,到重點了,當同時對p2、p3設定浮動之後,p3會跟隨在p2之後,不知道讀者有沒有發現,一直到現在,p2在每個例子中都是浮動的,但並沒有跟隨到p1之後。因此,我們可以得到一個重要結論:
假如某個p元素A是浮動的,如果A元素的上一個元素也是浮動的,那麼A元素會跟隨在上一個元素的右邊(如果一行放不下這兩個元素,那麼A元素會被擠到下一行);如果A元素上一個元素是標準流中的元素,那麼A的相對垂直位置不會改變,也就是說A的頂部總是和上一個元素的底部對齊。簡單講,2個float:left才會橫向排列,如果第一個是標準流,第二個是float:left,那麼第二個還是會排在第一個的下邊
p的順序是HTML代碼中p的順序決定的。
靠近頁面邊緣的一端是前,遠離頁面邊緣的一端是後。
為了幫助讀者理解,再舉幾個例子。
假如我們把p2、p3、p4都設定成左浮動,效果如下:
CSS-float詳細介紹clear:both
根據上邊的結論:先從p4開始分析,它發現上邊的元素p3是浮動的,所以p4會跟隨在p3之後;p3發現上邊的元素p2也是浮動的,所以p3會跟隨在p2之後;而p2發現上邊的元素p1是標準流中的元素,因此p2的相對垂直位置不變,頂部仍然和p1元素的底部對齊。由於是左浮動,左邊靠近頁面邊緣,所以左邊是前,因此p2在最左邊。
假如把p2、p3、p4都設定成右浮動,效果如下:
CSS-float詳細介紹clear:both

道理和左浮動基本上一樣,只不過需要注意一下前後對應關係。由於是右浮動,因此右邊靠近頁面邊緣,所以右邊是前,因此p2在最右邊。

假如我們把p2、p4左浮動,效果圖如下:
CSS-float詳細介紹clear:both

依然是根據結論,p2、p4浮動,脫離了標準流,因此p3將會自動上移,與p1組成標準流。 p2發現上一個元素p1是標準流中的元素,因此p2相對垂直位置不變,與p1底部對齊。 p4發現上一個元素p3是標準流中的元素,因此p4的頂部和p3的底部對齊,並且總是成立的,因為從圖中可以看出,p3上移後,p4也跟著上移,p4總是保證自己的頂部和上一個元素p3(標準流中的元素)的底部對齊。

至此,恭喜讀者已經掌握了添加浮動,但還有清除浮動,有上邊的基礎清除浮動非常容易理解。

經過上邊的學習,可以看出:在元素浮動之前,也就是在標準流中,是垂直排列的,而浮動之後可以理解為橫向排列。
清除浮動可以理解為打破橫向排列。
清除浮動的關鍵字是clear,官方定義如下:
語法:

clear : none | left | right | both

取值:




CSS-float詳細介紹clear:both

CSS-float詳細介紹clear:both


CSS-float詳細介紹clear:both


CSS-float詳細介紹clear:both

## none : 預設值。允許兩邊都可以有浮動物件


left : 不允許左邊有浮動物件
CSS-float詳細介紹clear:bothright : 不允許右邊有浮動物件

both : 不允許有浮動物件


定義非常容易理解,但是讀者實際使用時可能會發現不是這麼回事。

定義沒有錯,只不過它描述的太模糊,讓我們不知所措。

根據上邊的基礎,假如頁面中只有兩個元素p1、p2,它們都是左浮動,場景如下:
CSS-float詳細介紹clear:both
此時p1、p2都浮動,根據規則,p2會跟隨在p1後邊,但我們仍然希望p2能排列在p1下邊,就像p1沒有浮動,p2左浮動那樣。 這時候就要用到清除浮動(clear),如果單純根據官方定義,讀者可能會嘗試這樣寫:在p1的CSS樣式中添加clear:right;,理解為不允許p1的右邊有浮動元素,由於p2是浮動元素,因此會自動下移一行來滿足規則。 其實這種理解是不正確的,這樣做沒有任何效果。

對於CSS的清除浮動(clear),一定要牢記:這個規則只能影響使用清除的元素本身,不能影響其他元素。 ######怎麼理解呢?就拿上邊的例子來說,我們是想讓p2移動,但我們卻是在p1元素的CSS樣式中使用了清除浮動,試圖透過清除p1右邊的浮動元素(clear:right;)來強迫p2下移,這是不可行的,因為這個清除浮動是在p1中呼叫的,它只能影響p1,不能影響p2。 ######要想讓p2下移,就必須在p2的CSS樣式中使用浮動。本範例p2的左邊有浮動元素p1,因此只要在p2的CSS樣式中使用clear:left;來指定p2元素左邊不允許出現浮動元素,這樣p2就被迫下移一行。 ###############那麼假如頁面中只有兩個元素p1、p2,它們都是右浮動呢?讀者此時應該已經能自己推測場景,如下:############此時如果要讓p2下移到p1​​下邊,要如何做呢? ######我們希望移動的是p2,就必須在p2的CSS樣式中呼叫浮動,因為浮動只能影響呼叫它的元素。 ######可以看出p2的右邊有一個浮動元素p1,那麼我們可以在p2的CSS樣式中使用clear:right;來指定p2的右邊不允許出現浮動元素,這樣p2就被迫下移一行,排到p1下邊。 ############後邊來延伸一下:###如果不加clear:both效果是這樣的:#########灰色的背景色並沒有加到第二行,因為第二行都是float的,和.ob-body不在一個層面上,第二行浮在.ob-body上層,用了偽類:after就是為了讓第二行回到地面上來## ##########
<head>
    <style>
        .ob-title{
            background-color: orange;
        }
        .ob-body{
            background-color: #ddd;
        }
        .ob-body .menu{
            float: left;
            width: 200px;
            background-color: pink;
        }
        .ob-body .content{
            float: left;
            background-color: aquamarine;
        }
        .clearfix:after{    /*在.clearfix后边追加一个隐藏的block,带一个clear:both属性*/
            content: "";
            display: block;  /*block宽度会横向填充满屏幕,在父元素的最后追加一个height:0,占满屏幕的看不见的细长条*/
            line-height: 0;
            clear: both;  /*这个最下边细长条左右两边都清除float*/
        }
    </style></head><body style="margin: 10px;">
    <p class="ob-title">头部信息</p>
    <p class="ob-body clearfix">   <!--此处调用尾类-->
        <p class="menu">左侧菜单</p>
        <p class="content">右侧内容</p>
        <!--<p style="clear: both;"></p>-->  <!--第二种写法,不用调用clearfix类-->
    </p></body>
登入後複製
###加了clear:both之後的效果:#########最後解析一下:為什麼加了clearfix就ok了。兩種寫法其實一個意思,就是在.ob-body的最後加入一個空的###

###(只要是塊的就行,因為只有塊,才可以橫向撐滿),這個## #

###其實就是一個看不見的細長條,因為他在.ob-body的最下邊,並且並不是float的,一定會受到.ob-body的背景色的控制,他的存在定義了.ob-body的高度,所以高度範圍內都會被灰色的背景色影響到,雖然第二行依舊是飄在天空,但地面已經被鋪上了銀色。而這個最下邊的###

###必須要有clear:both,不然如果只是標準流,會緊貼在第一行的底部,當然不能涵蓋第二行了,其實這個例子裡使用clear:left也有效(因為第二行都是float:left),但為了通用性,就使用both吧.並且也驗證了:這個規則只能影響使用清除的元素本身,不能影響其他元素,clear了隱藏p的both。 ###

以上是CSS-float詳細介紹clear:both的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue團隊完成了完成,我知道這是一項巨大的努力,而且很長時間。所有新文檔也是如此。

您可以從瀏覽器獲得有效的CSS屬性值嗎? 您可以從瀏覽器獲得有效的CSS屬性值嗎? Apr 02, 2025 pm 06:17 PM

我有人寫了這個非常合法的問題。 Lea只是在博客上介紹瞭如何從瀏覽器中獲得有效的CSS屬性。那樣的是這樣。

在CI/CD上有點 在CI/CD上有點 Apr 02, 2025 pm 06:21 PM

我說的“網站”比“移動應用程序”更合適,但我喜歡Max Lynch的框架:

帶有粘性定位的堆疊卡和一點點的雜物 帶有粘性定位的堆疊卡和一點點的雜物 Apr 03, 2025 am 10:30 AM

前幾天,我發現了科里·金尼文(Corey Ginnivan)網站上的這一點,當您滾動時,彼此之間的卡片堆放集。

在WordPress塊編輯器中使用Markdown和本地化 在WordPress塊編輯器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我們需要直接在WordPress編輯器中向用戶顯示文檔,那麼最佳方法是什麼?

比較瀏覽器的響應式設計 比較瀏覽器的響應式設計 Apr 02, 2025 pm 06:25 PM

這些桌面應用程序中有許多目標是同時在不同的維度上顯示您的網站。因此,例如,您可以寫作

為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? 為什麼Flex佈局中的紫色斜線區域會被誤認為是'溢出空間”? Apr 05, 2025 pm 05:51 PM

關於Flex佈局中紫色斜線區域的疑問在使用Flex佈局時,你可能會遇到一些令人困惑的現象,比如在開發者工具(d...

如何將CSS網格用於粘頭和頁腳 如何將CSS網格用於粘頭和頁腳 Apr 02, 2025 pm 06:29 PM

CSS網格是一系列屬性的集合,旨在使佈局比以往任何時候都容易。像任何東西一樣,那裡有一點學習曲線,但是網格是

See all articles