@(css)[妙瞳]
css標準文檔流:css
簡稱"標準流",指的是在不使用其它的與排列和定位相關的特殊CSS規則時,各類元素的排列規則。HTML文檔中元素能夠分爲塊級元素和行內元素。html
塊級元素:老是以一個塊的形式表現出來,而且跟同級的兄弟一次豎直排列,左右撐滿。瀏覽器
行內元素:行內元素不佔據單獨的空間,依附於塊級元素,行內元素沒有本身的區域。它一樣是DOM樹的一個節點,在這點上,行內元素和塊級元素是沒有區別的。行內元素不能夠設置寬與高,但能夠與其餘行內元素位於同一行,行內元素內通常不能夠包含塊級元素。行內元素的高度通常由元素內部的字體大小決定,寬度由內容的長度控制。常見的行內元素有a,em,strong等。app
盒子在標準流中的定位原則(見我上篇文章:聊聊盒子模型)
(1)行內元素之間的水平margin
當兩個行內元素緊鄰時,它們之間的距離爲第1個元素的margin-right加上第2個元素的margin-left。
(2)塊級元素之間的豎直margin
當兩個塊級元素緊鄰時,它們的距離不是margin-bottom與margin-top的總和,而是二者中的較大者。
(3)嵌套盒子之間的margin
當一個div塊包含在另外一個div塊中時,便造成了典型的父子關係。其中子塊的margin將以父塊的 content爲參考。
(4)將margin設置爲負值
當margin設置爲負值時,會使被設爲負數的塊向相反的方向移動,甚至覆蓋在另外的塊上。框架
代碼演示以下:ide
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSS</title> <style> ul{ border:1px solid red; } li{ border:1px solid green; } strong{ border:1px solid #000; } </style> </head> <body> <ul> <li>第1個列表的第1個項目內容</li> <li>第1個列表的第2個<strong>項目內容</strong>,內容更長一些, 目的是演示自動折行的效果。</li> </ul> <ul> <li>第2個列表的第1個項目內容</li> <li>第2個列表的第2個項目內容,內容更長一些,目的是演示自動折行 的效果。</li> </ul> </body> </html>
頁面效果:學習
如上代碼所示,其內容是body中有兩個列表(ul),ul列表中又各有兩個列表項目(li)。一共有四層,頂層爲body,第二層爲ul,第三層爲li,第四層爲文本。ul和li都爲塊級元素,而strong則爲行內元素,從 DOM 的角度來看,塊級元素和行內元素是沒有區別的,都是樹上的一個節點,而從 CSS 的角度來看,兩者就有不少的區別,塊級元素有屬於本身的區域,而行內元素沒有!就如頁面效果圖所示。標準流就是 CSS 規定的默認的塊級無素和行內元素的排列方式。 從body標記開始,依次把其中的子元素放到適當的位置。若是一個html更爲複雜,層次更多,那麼也和這個同樣,直至全部的元素被檢查一遍,分配到相應的區域。在這個過程,一個一個的盒子天然地造成一個序列,同級別的盒子依次排列在父級盒子中,就像一條河流有幹流和支流同樣,這就是被稱爲「流」的緣由。
行內元素的特色:字體
塊級元素的特色:spa
假如我對strong的line-height進行設置,效果以下:3d
strong{ border:1px solid #000; line-height:50px; }
頁面效果:
由上所示,line-height的設置,行內元素strong的高度改變。
假如咱們對strong的height進行設置,效果以下:
strong{ border:1px solid #000; height:50px; }
頁面效果:
由上所示,height的設置,行內元素strong的高度並未改變。
代碼:
li{ border:1px solid green; margin-left:20px; margin-right:20px; margin-top:20px; margin-bottom:20px; } strong{ border:1px solid #000; margin-left:20px; margin-right:20px; margin-top:20px; margin-bottom:20px; }
頁面效果圖:
由上可示,對於行內元素strong而言,margin-left和margin-right有效,可是margin-top和margin-bottom失效。對於塊級元素li而言,上下左右的margin都有效。
代碼:
li{ border:1px solid green; padding-left:20px; padding-right:20px; padding-top:20px; padding-bottom:20px; } strong{ border:1px solid #000; padding-left:20px; padding-right:20px; padding-top:30px; padding-bottom:20px; }
頁面圖:
由上所示,對於行內元素strong而言,padding-left和padding-right有效,可是padding-top和padding-bottom失效,只是上下的範圍擴大,但是對其餘元素內容並無改變。對於塊級元素li而言,上下左右的padding都有效。
行內元素和塊級元素的區別:
行內元素會在一條直線上排列,都是同一行的,水平方向排列,
塊級元素各佔據一行,垂直方向排列。塊級元素重新行開始結束接着一個斷行。
塊級元素能夠包含行內元素和塊級元素。行內元素不能包含塊級元素。
行內元素與塊級元素屬性的不一樣,主要是盒模型屬性上
text-align屬性是二者表現的又以不一樣之處
在W3C CSS2.1規範第16.2節 對text-align 有詳細地描述:
值: left | right | center | justify | inherit
初始值:匿名值,由'direction'的值而定,若是'direction'爲'ltr'則爲'left',若是'direction'爲'rtl'則爲'right'。
應用於: 塊級元素,表格單元格,行內塊元素
繼承性: 是
計算後的值:初始值或指定值
這個特性描述瞭如何使一個塊元素的行內內容對齊。
注意一點,標準裏說這個屬性是用來對齊行內內容的,因此,不該該對塊級內容起做用。
解釋一下,行內內容是說由行內元素組成的內容,好比 SPAN 元素,IFRAME元素和元素樣式的 ‘display : inline’ 的都是行內元素;塊級內容跟則是由塊級元素構成,DIV 是最經常使用的塊級元素。塊級元素和行內元素的區別是,塊級元素會佔一行顯示,而行內元素能夠在一行並排顯示。
這樣,咱們對這個特性的認識應該就清楚了。可是,雖然標準裏這麼規定,那麼是否是全部瀏覽器都遵照呢?答案是否認的。
IE6/7及IE8混雜模式中,text- align:center可使塊級元素也居中對齊。其餘瀏覽器中,text-align:center僅做用於行內內容上。
解決上面的問題比較好的方式,就是爲全部須要相對父容器居中對齊的塊級元素設置「margin-left:auto; margin-right:auto」。但這個方式 IE6/IE7/IE8的混雜模式中不支持,因此還要設置父容器的 "text-align:center;"。若居中對齊的子元素內的行內內容不須要居中對齊,則還須要爲其設置「text-align:left」。
代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSS</title> <style> body{ width:800px; border:1px solid #000; } div.wrapper{ /*margin:0 auto;*/ width:500px; border:1px solid red; text-align: center; } div.box1{ border:1px solid red; } div strong{ border:1px solid green; } </style> </head> <body> <div class="wrapper"> <div class="box1"> <strong>我是行內元素</strong> </div> <p>我是塊級元素</p> </div> </body> </html>
頁面:
IE8/Firefox/Chrome/Safari/Opera:
IE6/IE7:
代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSS</title> <style> body{ width:800px; border:1px solid #000; } div.wrapper{ margin:0 auto; width:500px; border:1px solid red; } div.box1{ border:1px solid red; text-align:center; } div strong{ border:1px solid green; } </style> </head> <body> <div class="wrapper"> <div class="box1"> <strong>我是行內元素</strong> </div> <p>我是塊級元素</p> </div> </body> </html>
IE8/Firefox/Chrome/Safari/Opera:
IE6/IE7:
代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>CSS</title> <style> body{ width:800px; border:1px solid #000; } div.wrapper{ margin:0 auto; width:500px; border:1px solid red; text-align:center; } div.box1{ border:1px solid red; } div strong{ border:1px solid green; } </style> </head> <body> <div class="wrapper"> <div class="box1"> <strong>我是行內元素</strong> </div> <p>我是塊級元素</p> </div> </body> </html>
IE6/IE7/IE8/Firefox/Chrome/Safari/Opera:
塊級元素、行內元素分別彙總以下:
Examples of block level elements
block level elements|Element Description <address> information on author <blockquote> long quotation <button> push button <caption> table caption <dd> definition description <del> deleted text <div> generic language/style container <dl> definition list <dt> definition term <fieldset> form control group <form> interactive form <h1> heading <h2> heading <h3> heading <h4> heading <h5> heading <h6> heading <hr> horizontal rule <iframe> inline subwindow <ins> inserted text <legend> fieldset legend <li> list item <map> client-side image map <noframes> alternate content container for non frame-based rendering <noscript> alternate content container for non script-based rendering <object> generic embedded object <ol> ordered list <p> paragraph <pre> preformatted text <table> table <tbody> table body <td> table data cell <tfoot> table footer <th> table header cell <thead> table header <tr> table row <ul> unordered list
Examples of inline elements
inline elements | Element Description <a> anchor <abbr> abbreviated form <acronym> acronym <b> bold text style <bdo> I18N BiDi over-ride <big> large text style <br> forced line break <button> push button <cite> citation <code> computer code fragment <del> deleted text <dfn> instance definition <em> emphasis <i> italic text style <iframe> inline subwindow <img> Embedded image <input> form control <ins> inserted text <kbd> text to be entered by the user <label> form field label text <map> client-side image map <object> generic embedded object <q> short inline quotation <samp> sample program output, scripts, etc. <select> option selector <small> small text style <span> generic language/style container <strong> strong emphasis <sub> subscript <sup> superscript <textarea> multi-line text field <tt> teletype or monospaced text style <var> instance of a variable or program argument
塊級元素列表
<address> 定義地址 <caption> 定義表格標題 <dd> 定義列表中定義條目 <div> 定義文檔中的分區或節 <dl> 定義列表 <dt> 定義列表中的項目 <fieldset> 定義一個框架集 <form> 建立 HTML 表單 <h1> 定義最大的標題 <h2> 定義副標題 <h3> 定義標題 <h4> 定義標題 <h5> 定義標題 <h6> 定義最小的標題 <hr> 建立一條水平線 <legend> 元素爲 fieldset 元素定義標題 <li> 標籤訂義列表項目 <noframes> 爲那些不支持框架的瀏覽器顯示文本,於 frameset 元素內部 <noscript> 定義在腳本未被執行時的替代內容 <ol> 定義有序列表 <ul> 定義無序列表 <p> 標籤訂義段落 <pre> 定義預格式化的文本 <table> 標籤訂義 HTML 表格 <tbody> 標籤表格主體(正文) <td> 表格中的標準單元格 <tfoot> 定義表格的頁腳(腳註或表注) <th> 定義表頭單元格 <thead> 標籤訂義表格的表頭 <tr> 定義表格中的行
行內元素列表
<a> 標籤可定義錨 <abbr> 表示一個縮寫形式 <acronym>定義只取首字母縮寫 <b> 字體加粗 <bdo> 可覆蓋默認的文本方向 <big> 大號字體加粗 <br> 換行 <cite> 引用進行定義 <code> 定義計算機代碼文本 <dfn> 定義一個定義項目 <em> 定義爲強調的內容 <i> 斜體文本效果 <img> 向網頁中嵌入一幅圖像 <input> 輸入框 <kbd> 定義鍵盤文本 <label> 標籤爲 input 元素定義標註(標記) <q> 定義短的引用 <samp> 定義樣本文本 <select>建立單選或多選菜單 <small> 呈現小號字體效果 <span> 組合文檔中的行內元素 <strong>語氣更強的強調的內容 <sub> 定義下標文本 <sup> 定義上標文本 <textarea>多行的文本輸入控件 <tt> 打字機或者等寬的文本效果 <var> 定義變量
可變元素素列表--可變元素爲根據上下文語境決定該元素爲塊級元素或者內聯元素
<button> 按鈕 <del> 定義文檔中已被刪除的文本 <iframe> 建立包含另一個文檔的內聯框架(即行內框架) <ins> 標籤訂義已經被插入文檔中的文本 <map> 客戶端圖像映射(即熱區) <object> object對象 <script> 客戶端腳本
行內元素轉換爲塊級元素
display:block; (字面意思表現形式設爲塊級) display:inline; display:inline-block;
能夠經過修改樣式display屬性改變元素是以塊級仍是行內元素呈現,當display的值設爲block時,元素將以塊級方式呈現;當display值設爲inline時,元素將以行內形式呈現。
若是想讓一個元素能夠設置寬度高度,又讓它以行內形式顯示,咱們能夠設置display的值爲inline-block。
經過css設定了浮動(float屬性,可向左浮動或向右浮動)以及設定顯示(display)屬性爲「block」或「list-item」的元素都是塊級元素。
可是浮動元素比較特殊,因爲浮動,其旁邊可能會有其餘元素的存在。而「list-item」(列表項
假若有不足或者錯誤的地方,歡迎指正喲。-------妙瞳