CSS float屬性

来源:http://www.cnblogs.com/cc156676/archive/2016/07/18/5682439.html
-Advertisement-
Play Games

寫在開篇: 浮動屬性的設計初衷,只是為了實現文本環繞效果! 時刻牢記這一點,才能正確使用浮動。 浮動元素的特征: 1.浮動元素脫離文檔流。 2.浮動元素周圍的外邊距不會合併。 3.浮動元素具有包裹性。 4.浮動元素具有破壞性。 下麵這段代碼,能夠驗證上述的四個特征,按提示操作即可。 1 <!DOCT ...


寫在開篇:

浮動屬性的設計初衷,只是為了實現文本環繞效果

時刻牢記這一點,才能正確使用浮動。

 

浮動元素的特征:

1.浮動元素脫離文檔流。

2.浮動元素周圍的外邊距不會合併。

3.浮動元素具有包裹性。

4.浮動元素具有破壞性。

下麵這段代碼,能夠驗證上述的四個特征,按提示操作即可。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <title>浮動</title>
 6         <style>
 7             * {
 8                 margin: 0;
 9             }
10 
11             .container {
12                 background-color: green;        
13             }
14 
15             .box1 {
16                 height: 100px;
17                 width: 100px;
18                 background-color: red;
19                 margin: 20px;
20             }
21 
22             .box2 {
23                 height: 200px;
24                 width: 200px;
25                 background-color: blue;
26                 margin: 20px;
27             }
28 
29             .list {
30                 margin-top: 50px;
31                 background-color: cyan;
32                 line-height: 1.5;
33             }
34 
35         </style>
36     </head>
37 
38     <body>
39         <div class="container">
40             <div class="box1">box1</div>
41             <div class="box2">box2</div>
42         </div>
43         <div class="list">
44             <ol>
45                 <li>box1與box2在一個綠色的容器中垂直擺放,box1的margin-bottom與box2的margin-top合併,所以它們的margin為20px。</li>
46                 <li>將容器浮動,浮動之後容器緊緊包裹著裡面的元素,是為包裹性。<br />
47                     浮動之後,容器脫離文檔流,列表向上占據容器的位置,由於浮動會實現文本環繞效果,所以文本在浮動元素周圍顯示,不會被覆蓋在浮動元素之下;<br />
48                     由於列表的margin-top為50px,所以列表與視窗頂部有50px的距離;<br />
49                     (由於未知原因,浮動後的元素與後來居上的列表一樣高)。
50                 </li>
51                 <li>將box1浮動,box1脫離文檔流,box2向上占據box1的位置,box2的上外邊距為20px,box1的上邊距為20px,它們的上外邊距沒有合併。<br />
52                     字元“box2”如此顯示是box1的margin-top和margin-right的原因。
53                 </li>
54                 <li>將box2浮動,容器的高度塌陷;box2的上外邊距與box1的下外邊距沒有合併。<br />
55                     通過列表的背景顏色,可以很清晰地看到,列表向上占據了box2的位置,鑒於margin-top為50px的原因,它的頂端比box2低10px。<br />
56                     將容器也浮動,就可以把浮動的box2包裹在容器中,解決父元素高度塌陷的問題。<br />
57                     (實現原理:浮動元素會延伸,從而包含其所有後代浮動元素。)
58                 </li>
59             </ol>
60         </div>
61     </body>
62 </html>
View Code

5.浮動元素塊狀化。不管元素本身是什麼(inline/inline-block/block),只要浮動,自帶display:block聲明。

 

浮動的規則:

首先,必須瞭解浮動元素包含塊的概念。

浮動元素的包含塊,是其最近的塊級祖先元素。

規則1:左浮動的元素,左外邊界不能超出其包含塊的左內邊界。(浮動元素不能超出其包含塊的內容區)

規則2:左浮動的元素,左外邊界必須是源文檔中之前出現的左浮動元素的右外邊界;除非後出現的浮動元素的頂端在先出現的浮動元素的底端下麵,那麼這個後出現的左浮動元素會一直浮動到其包含塊的左內邊界。

 規則3:左浮動元素的右外邊界不會與右浮動元素的左外邊界交叉。

(如果兩個浮動元素加起來的寬度大於包含塊的寬度,那麼後一個浮動元素將會向下浮動,直到其頂端在前一個浮動元素的底端之下。)

 

規則4:一個浮動元素的頂端不能超出其包含塊的上內邊界。(浮動元素不能超出其包含塊的內容區)

規則5:浮動元素的頂端不能比它之前所有浮動元素或者塊級元素的頂端更高。

規則6:如果一個段落中有一個浮動圖像,這個圖像的頂端最高只能到該圖像所在行框的頂端。

 

規則7:如果有多個元素連續浮動,浮動元素不能超出包含塊的內容區,除非某一浮動元素本身寬度就比包含塊的內容區大。

規則8:在滿足以上規則的條件下,浮動元素要浮動得儘可能高、儘可能遠。

 

關於浮動元素負外邊距:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6         <style>
 7             * {
 8                 margin: 0;
 9             }
10 
11             .container {
12                 width: 800px;
13                 height: 600px;
14                 margin: 20px auto;
15                 background-color: cyan;
16                 border: 1px solid black;
17                 line-height: 1.5;
18             }
19 
20             img {
21                 float: left;
22                 margin-bottom: 20px;
23                 margin-right: 20px;
24             }
25 
26             p {
27                 margin: 10px;
28             }
29 
30             span {
31                 background-color: red;
32                 border: 1px solid black;
33             }
34 
35             .blockElement {
36                 border: 1px solid yellow;
37                 background-color: green;
38                 margin: 10px;
39             }
40 
41             .clear {
42                 clear: both;
43                 margin-top: 20px;
44             }
45 
46         </style>
47     </head>
48 
49     <body>
50         <div class="container">
51             <img src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c101fe665380cd7e61ea2e59145ad14/f9a3492762d0f7032de1758a08fa513d2797c542.jpg" alt="a picture" style="width:200px;height:300px" />
52             <p>浮動元素可以設置負外邊距。</p>
53             <p>如果左浮動圖像將左外邊距設為負值,則圖像向左移動相應的距離;如果左浮動圖像將右外邊距設為負值,那麼浮動圖像位置不動,其右邊的文本向左移動相應的距離。</p>
54             <span>如果右邊的文本是行內元素,則其邊框、背景和文字豆都將在圖像之上顯示;</span>
55             <div class="blockElement">如果右邊的文本是塊級元素,則只有文本會在圖像之上顯示,邊框和背景在圖像之下顯示。</div>
56             <p>清除區域,是在清除元素(設置了clear屬性的元素)上外邊界之外增加的額外區域,不允許這個區域有任何浮動元素存在。</p>
57             <p>假如一個清除區域的高度是25px,而清除元素的上外邊距為15px,那麼清除元素與浮動元素在垂直方向上將會緊挨著,要想它們之間有15px的距離,可以設置浮動元素的下外邊距為15px。</p>
58             <ol class="clear">
59                 <li>設置浮動圖像的margin-left為-50px,圖像向左移動了30px的距離;如果浮動圖像本身在視窗左上角,margin-left負值之後,相應地那一部分圖像將會移動到視窗之外(不可見)。</li>
60                 <li>設置浮動圖像的margin-right為-50px,圖像本身沒有移動,文本的寬度增加了50px,導致文本覆蓋到浮動圖像之上;而且不同的文本表現不同。<br />
61                 行內框與一個浮動元素重疊時,其邊框、背景和內容都在浮動元素“之上”顯示。<br />
62                 塊框與一個浮動元素重疊時,只有其內容在浮動元素“之上”顯示,邊框、背景都在浮動元素“之下”顯示。
63                 </li>
64                 <li>可以通過設置浮動圖像的margin值來控制浮動圖像與環繞在其周圍的文本的距離。</li>
65             </ol>
66         </div>
67     </body>
68 </html>
View Code

 

通過浮動元素負外邊距實現不改變DOM結構的流體佈局:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>不改變DOM結構的流體佈局</title>
 6         <style>
 7             .container {
 8                 width:600px;
 9                 margin-left: auto;
10                 margin-right: auto;
11                 background-color: orange;
12             }
13 
14             .box1 {
15                 width:100%;
16                 float:left;
17             }
18 
19             .box2 {
20                 margin-right: 220px;
21             }
22 
23             img {
24                 width:200px;
25                 float:left;
26                 margin-left:-200px;
27             }
28 
29             .clearfix:after {
30                 content: "";
31                 display: table;
32                 clear: both;
33             }
34 
35             .clearfix {
36                 *zoom: 1;
37             }
38 
39         </style>
40     </head>
41     <body>
42         <div class="container clearfix">
43             <div class="box1">
44                 <div class="box2">
45                 <h3>不改變DOM位置的流體佈局</h3>
46                 <p>假如有一段文本和一幅圖像,在DOM節點中,文本在前,圖像在後,怎麼能把圖像定位到右邊呢?</p>
47                 <p>通常的做法是,調換DOM節點中圖像與文本的位置,讓圖像在前,文本在後,然後將圖像浮動到右邊即可。</p>
48                 <p>但這樣改變DOM節點順序始終不妥,還有什麼更好的方法呢?</p>
49                 <p>下麵就介紹一種新的思路來完成佈局。</p>
50                 <ul>
51                     <li>將文本用div包起來,定義為box1;現在的結構是一個box1和一個img。</li>
52                     <li>將box1寬度設為100%,左浮動;將img設置一個寬度,也左浮動,然後margin-left設為負的寬度值;此時圖像就定位到文本的右邊啦。</li>
53                     <li>但是有一個問題,圖像蓋住了文本內容,這可怎麼辦?</li>
54                     <li>重點來了,在box1中增加一個box2,box2把文本全部包起來,然後margin-right設為圖像的寬度(+額外的間距),這樣就解決問題啦!</li>
55                 </ul>
56                 </div><!--關閉box2-->
57             </div><!--關閉box1-->
58             <img src="1.jpg" alt="A picture">
59         </div><!--關閉container-->
60     </body>
61 </html>
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文標題的這副圖片,是用Phosotshop製作的。但是,在搜索引擎中你卻無法搜索到它,搜索引擎還沒有強大到能夠識別圖片裡面的文字。並且由於圖片的體積不算太小,可能網速慢的網友在瀏覽的時候不得不耐心的等待圖片的刷新。那麼,有沒有一種新的方法可以避免這些缺點呢? 有的,HTML5和CSS3就可以滿足你 ...
  • 別人的代碼,拿過來調,發現修改功能都不能用,修改時通過ajax發json獲取數據的,看chrome開發者工具發現有發送數據,也有返回值; 發起請求並獲取數據,發現回調函數不執行! php返回數據代碼: 返回的數據在瀏覽器里看上去也很正常: {"data":{"id":"1","name":"admi ...
  • 我們先來看一道題目 1 2 3 4 var write = document.write; write("hello"); //1.以上代碼有什麼問題 //2.正確操作是怎樣的 1 2 3 4 var write = document.write; write("hello"); //1.以上代碼有 ...
  • 摘要: 之前項目用過Less,現在負責的項目也要使用,所以就總結下Less,也方便以後查看。本文主要是講瀏覽器端如何使用Less。 簡介: LESS是一種由Alexis Sellier設計的動態層疊樣式表語言。LESS 是開源的,其第一個版本由Ruby寫成,但在後續的版本當中,Ruby逐漸被替換為J ...
  • 所謂的作用域,可以簡單理解為一個可以讀、寫的範圍(區域),有些js經驗的同學可能會說:"js沒有塊級作用域",js除了全局作用域外,只有函數可以創建作用域。作用域的一個好處就是可以隔離變數。 我們通過一些例子來幫助我們理解js中的作用域。 如果對作用域一點不瞭解的同學可能會說 alert的是1或者報 ...
  • 水平居中 若為行內元素,對其父元素用text-align:center即可; 若為塊元素(無浮動),則一般有兩種方法可實現對其的水平居中,一為margin:0 auto;二為通過css計算函數calc; 垂直居中 若為行內元素,一般對其父元素用line-height:{height}即可,若為圖片元 ...
  • 第0章 關於本書 1, 本書要用到一個工具函數————$$(),它可以讓我們更容易獲取和遍歷所有匹配特定css選擇符的dom元素: 2, 以下實現一個效果: 3, 檢查屬性是否存在: 檢測多個屬性: 檢測某個具體的屬性值是否支持: 第1章 前言 1, 不用-ms-border-radius和-o-b ...
  • 路由 通常HTTP URL的格式是這樣的: http://host[:port][path] http表示協議。 host表示主機。 port為埠,可選欄位,不提供時預設為80。 path指定請求資源的URI(Uniform Resource Identifier,統一資源定位符),如果URL中沒 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...