1. 程式人生 > >理解CSS clear:both/left/right的含義以及應用

理解CSS clear:both/left/right的含義以及應用

前言:

       感覺是剛過春招,又要開始秋招,對於技術渣渣、學歷普通的我,憂愁再次降臨。開始準備秋招路途中……來溫故而知新,沉下心好好學習。貌似本人在清除浮動中第一次接觸clear:left/right,平時只用到clear:both,好像也只見到這個,這就尷尬了害羞

一、什麼是浮動,標準文件流又是個啥

       所謂的文件流,指的是元素排版佈局過程中,元素會自動從左往右,從上往下的流式排列。並最終窗體自上而下分成一行行, 並在每行中按從左至右的順序排放元素。脫離文件流即是元素打亂了這個排列,或是從排版中拿走。

      當前所知的脫離文件流的方式有兩種:浮動和定位

      在瞭解什麼是浮動之前,   首先要知道,div是塊級元素,在頁面中獨佔一行,自上而下排列,也就是傳說中的流。我們看看下面的效果:


      可以看出,即使div1的寬度很小,頁面中一行可以容下div1和div2,div2也不會排在div1後邊,因為div元素是獨佔一行的。以上這些理論,是指標準流中的div。無論多麼複雜的佈局,其基本出發點均是:“如何在一行顯示多個div元素”。

       顯然標準流已經無法滿足需求,這就要用到浮動。      

       浮動可以理解為讓某個div元素脫離標準文件流,漂浮在標準文件流之上,和標準文件流不是一個層次。

      例如,假設上圖中的div2左浮動(float:left),那麼它將脫離標準文件流,但div1、div3仍然在標準文件流當中,所以div3會自動向上移動,佔據div2的位置,重新組成一個流。如圖:


       從圖中可以看出,由於對div2設定左浮動(float:left;),因此它不再屬於標準文件流,div3自動上移頂替div2的位置,div1、div3、div4依次排列,成為一個新的流。又因為浮動是漂浮在標準流之上的,因此div2擋住了一部分div3,div3看起來變“矮”了。
       這裡div2用的是左浮動(float:left;),可以理解為漂浮起來後靠左排列,右浮動(float:right;)當然就是靠右排列。這裡的靠左、靠右是說頁面的左、右邊緣。
       如果我們把div2採用右浮動,會是如下效果:


         此時div2靠頁面右邊緣排列,不再遮擋div3,讀者可以清晰的看到上面所講的div1、div3組成的流。以上我們看到的是隻有一個div設定浮動,那麼如果設定多個div浮動,效果又是怎麼樣呢?

        我設定div2右浮動,div3左浮動,效果如下:


       同理,由於div2、div3浮動,它們不再屬於標準文件流,因此div4會自動上移,與div1組成一個“新”標準流,而浮動是漂浮在標準文件流之上,因此div2又擋住了div4。

       當同時對div2、div3設定浮動之後,div3會跟隨在div2之後,div2在每個例子中都是浮動的,但並沒有跟隨到div1之後。因此,我們可以得出一個重要結論:
       假如某個div元素A是浮動的,如果A元素上一個元素也是浮動的,那麼A元素會跟隨在上一個元素的後邊(如果一行放不下這兩個元素,那麼A元素會被擠到下一行);如果A元素上一個元素是標準流中的元素,那麼A的相對垂直位置不會改變,也就是說A的頂部總是和上一個元素的底部對齊。

2、清除浮動

      目前民間流傳的清除浮動方法:

  • clear語法:
        clear : none | left | right | both
  • 取值:
        none : 預設值。允許兩邊都可以有浮動物件
        left : 不允許左邊有浮動物件
        right : 不允許右邊有浮動物件
        both : 不允許有浮動物件

        我第一次看到這個定義的想法是,clear: left認為是“清除左浮動”,clear: right是清除右浮動。 定義非常容易理解,但是讀者實際使用時可能會發現不是這麼回事。

       在理解這個之前,請先記住一句話:“float是魔鬼,會影響其他相鄰元素;但是clear是小白,其只會影響自身,不會對其他相鄰元素造成影響!”---來自張鑫旭

       根據上邊的基礎,我們來看一個簡單的例子,假如頁面中只有兩個元素div1、div2,它們都是左浮動,場景如下:


       此時div1、div2都浮動,根據規則,div2會跟隨在div1後邊,但我們仍然希望div2能排列在div1下邊,就像div1沒有浮動,div2左浮動那樣。

       這時候就要用到清除浮動(clear),如果單純根據官方定義,讀者可能會嘗試這樣寫:在div1的CSS樣式中新增clear:right;,理解為不允許div1的右邊有浮動元素,由於div2是浮動元素,因此會自動下移一行來滿足規則。那我們來試一下剛才說的這個方法,結果還是原來的這個,並沒有起到效果,可見這種理解是錯誤的。

       所以呢,要想讓div2下移,就必須在div2的CSS樣式中使用浮動。本例中div2的左邊有浮動元素div1,因此只要在div2的CSS樣式中使用clear:left;來指定div2元素左邊不允許出現浮動元素,這樣div2就被迫下移一行。實踐效果如下:


         這樣就達到了效果,試想一下,如果兩個div都是右浮動,那麼要如何實現上下排列呢,也就是div2在div1的下面?


         可以看出div2的右邊有一個浮動元素div1,那麼我們可以在div2的CSS樣式中使用clear:right;來指定div2的右邊不允許出現浮動元素,這樣div2就被迫下移一行,排到div1下邊。

3、具體例子

       解析完了具體的理論知識,來進行實踐一下好了。假如現在需要完成下面的效果,大家想想你會用什麼佈局來實現呢?


       我的實現方法是,利用2個div,第一個div中包含頭像和姓名,第二個div中包含自我描述,然後第一個div左浮動,第二個div也是左浮動。雖然這種方法實現了這個效果,而且大家也都是這麼做的,但是這樣寫會顯得沒有那麼專業,首先這三個應該是屬於平級的,然而用我的實現方法來看,我們分成了2個級。那麼要如何用平級實現以上的效果,大家想想就知道啦,既然上文的內容是清除浮動,那麼就用這個實現。

     於是程式碼以及佈局如下:

<div style="width:500px;overflow:hidden;_zoom:1;">
    <div style="float:left;width:100px;">頭像</div>
    <p style="float:left;clear:left;">姓名</p>
    <div style="margin-left:106px;">自我描述</div>
 </div>

相關推薦

理解CSS clear:both/left/right含義以及應用

前言:        感覺是剛過春招,又要開始秋招,對於技術渣渣、學歷普通的我,憂愁再次降臨。開始準備秋招路途中……來溫故而知新,沉下心好好學習。貌似本人在清除浮動中第一次接觸clear:left/r

css之flex相關屬性集合以及應用

由於在日常工作中使用css或者bootstrap的柵格系統已經能很好的滿足業務需求,所以一直以來對css3的彈性佈局不是很感冒。近日有幸在一篇文章中領略了flex的魅力--簡潔優雅。隨試之。 /*容器*/ .flex{ displa

CSS中正確理解clear:both

原文地址:http://blog.sina.com.cn/s/blog_709475a10100wkdj.html 要注意以下幾點:  1、 浮動元素會被自動設定成塊級元素,相當於給元素設定了display:block(塊級元素能設定寬和高,而行內元素則不可以)。  2

理解閉包的含義以及他的使用

var urn 執行 標識 nbsp 函數 返回 con 訪問 1、什麽是閉包,  閉包就是能夠讀取其它函數內部的變量。首先我們來看一段代碼:function a(){ var n = 0; function inc() { n++;

每天CSS學習之top/left/right/bottom

abs 距離 css css學習 進行 ott tom 元素 position top:值域是數值或百分比,正負都可以。該值表示 距離頂部有多少像素。例如top:10px;即距離頂部10個像素。 left/right/bottom與top如出一轍,只是方向不一樣而已。 這些

【轉】css中float left與float right的使用說明

http://www.cnblogs.com/zcy_soft/archive/2011/02/12/1952513.html CSS中很多時候會用到浮動來佈局,也就是經常見到的float:left或者float:right,簡單點來說,前者是左浮動(往左側向前邊的非浮

簡述 left join、right join 以及inner join 的區別

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄  right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄 inner join(等值連線) 只返回兩個表中聯結欄位相等的行

CSS清除浮動_清除float浮——詳解overflow:hidden 與clear:both屬性

CSS清除浮動方法集合 一、浮動產生原因   -   TOP 一般浮動是什麼情況呢?一般是一個盒子裡使用了CSS float浮動屬性,導致父級物件盒子不能被撐開,這樣CSS float浮動就產生了。 浮動產生樣式效果截圖 本來兩個黑色物件盒子是在紅色盒子內,因為對兩個黑色盒子使用了float浮動,所以兩

CSSclear.both 的使用

在CSS中我們會經常要用到“清除浮動”Clear,比較典型的就是clear:both; CSS手冊上是這樣說明的:該屬性的值指出了不允許有浮動物件的邊。這個屬性是用來控制float屬性在文件流的物理位置的。 當屬性設定float(浮動)時,其所在的物理位置已經脫離文件流了,但是大多時候我們希望文件流能識別f

DIV+CSSclear:both的作用

DIV+CSS佈局的優點不用多說了,現在越來越多站都用這種佈局方式,表格佈局慢慢的越來越少人用了. 不過DIV+CSS還是有許多不便的,因為他比表格佈局難控制,稍做不好,不管是新手還是老手,一不小心都會整個版面走樣,或是在各瀏覽器中亂套.所以,DIV+CSS佈局一般應

css中float left與float right的使用說明

CSS中很多時候會用到浮動來佈局,也就是經常見到的float:left或者float:right,簡單點來說,前者是左浮動(往左側向前邊的非浮動元素飄,全是飄得元素的話,就按照流式來浮動從左到右,放不下則換行),後者是右浮(往右飄)動。但僅僅是如此嗎? (adsbygoogle =

hive執行報錯:Both left and right aliases encountered in JOIN 's1'

原因:兩個表join的時候,不支援兩個表的欄位 非相等 操作。 可以把不相等條件拿到 where語句中。 例如: right JOIN test.dim_month_date p2

SQL語句中left join、right join 以及inner join的區別

在SQL語句中使用的連線通常有以下三種連線: left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄 inner join(等值連線) 只返回兩個

div css float浮動用法(left right)

        在學習牛腩老師的視訊中,很深刻的體會了浮動帶來的效果的震撼,現在是對B/S這塊的知識是越來越喜歡,越來越願意學習,特別是現在看網頁的時候看到那些程式碼感覺很是熟悉,特別親切,只是下面自

深入理解css網頁布局細節

type aps 顯示 logs 20px red 不起作用 意義 新浪微博 在CSS網頁開發布局中,需要對浮動和定位有深刻的理解才能在開發中遊刃有余。 基於此,在博客園中做了本篇總結,這些總結來自實踐經驗和閱讀一些書籍後的理解總結,主要內容為浮動,清除浮動,定位。 一.

理解css+Div定位

數值 hid 模型 http 影響 收藏 塊級元素 padding 不能 一、DIV標記與SPAN標記 div和span都可以作為一個容器,集體控制容器內的樣式 區別是div使塊級元素,前後會有換行 而span是行內元素,前後不會換行二、盒子模型 1,概念 任何頁面元素都可

JavaScript—— scroolleft----offsetleft 系列的含義以及瀏覽器兼容問題

class image ner 示例 setw yellow asc element nth clientWidth:獲取對象的內容可視區域的寬度,即clientWidth=width+padding,不包括滾動條。 clientHeight:獲取對象的內容可視區域的高度,

Flex布局結合border:left/right; 來設置文字中間分割線

設置高度 com none eight 垂直 有著 log 技術分享 border 今天設計給的稿件的分割線不是平常常見的那種,還給了兩條垂直的線。 比如像這樣: 看到這張圖,第一反應用兩條hr,再設置hr的border-left/right。然而這並不能實現這樣的效果。

軟件測試的含義以及測試的對象

軟件測試 測試 軟件測試的含義:早期而言,在1973年Bill Hetzel提出,軟件測試是對程序能夠按預期運行建立起的一種信心。 經典定義是1979年Myers提出,測試是為發現錯誤而執行程序的過程。 軟件測試(Software Testing)是軟件生存期的一個重要的階段,是軟件質量保證的一個關鍵

理解CSS盒模型

可選 gin 樣式 網頁布局 使用 元素定位 idt width 一個 CSS盒模型是CSS可視化格式化系統的基石,它是理解樣式表如何工作的核心概念,盒模型可以用於元素定位和網頁布局。內邊距padding是內容區和邊框border之間的區域,元素盒在頁面上占據的總寬度