整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          html基礎(chǔ)知識解析(二) -實用干貨

          級鏈接標(biāo)簽

          1. 語法<a></a>
          2. 必須屬性href=”url”, 它指定鏈接的目標(biāo)。
          3. 常用屬性 target=”_blank” 在新窗口中打開鏈接
          4. 錨屬性:一般在兩個頁面之間 或者在一個較長的頁面之間 進行通訊所用

          目的頁面的地區(qū)用 name屬性定義(name的值可自己定義,一般為英文),鏈接頁面的鏈接應(yīng)寫為<a href=”url#name”></a>

          1. 在鏈接中,#可用來指代鏈接出發(fā)點的頁面本身
          2. 鏈接有四種狀態(tài),在所有瀏覽器中,鏈接的默認(rèn)外觀是:

          未被訪問的鏈接帶有下劃線而且是藍(lán)色的

          已被訪問的鏈接帶有下劃線而且是紫色的

          活動鏈接帶有下劃線而且是紅色的

          關(guān)于錨的進一步說明:

          <a> 標(biāo)簽可定義錨,錨 (anchor) 有兩種用法:

          通過使用 href 屬性,創(chuàng)建指向另外一個文檔的鏈接(或超鏈接)

          通過使用 name 或 id 屬性,創(chuàng)建一個文檔內(nèi)部的書簽(也就是說,可以創(chuàng)建指向文檔片段的鏈接)


          圖片標(biāo)簽 <img>

          1、img標(biāo)簽是一個單標(biāo)簽,必須和src(source:指出圖像的路徑)屬性連用,

          網(wǎng)頁上圖像的路徑有絕對路徑和相對路徑兩種,但在實際運用中往往只用相對路徑

          絕對路徑:圖片在硬盤上的路徑 (分割符號是/)

          相對路徑:圖片相對于網(wǎng)頁而言的路徑

          如果圖片與網(wǎng)頁在同一個文件夾下,那么可以直接用圖片的名稱表示其路徑

          如果圖片在網(wǎng)頁的下一層文件夾中,比如圖片在網(wǎng)頁文件下面的images文件夾中,則可用images/表示

          我們也可以用./表示網(wǎng)頁所在的文件夾

          如果圖片在網(wǎng)頁的上一層文件夾中,則用../表示

          事實上,不但圖片文件是如此,網(wǎng)頁中應(yīng)用的文件都分為相對路徑和絕對路徑兩種表達方式。

          2、在網(wǎng)頁上,支持的圖片格式包括.gif .jpg .png .bmp,一般用前三者居多,因為前三者的圖片壓縮比較好。但是,gif格式只有256種顏色,所以,在需要豐富顏色的場合,往往多用jpg和png格式。不過,gif擁有動態(tài)功能,而后兩者則不具備。

          3、img標(biāo)簽可以與其它標(biāo)簽共處一行,如果有多個圖形出現(xiàn)時,默認(rèn)為同一行顯示

          4、img標(biāo)簽有4個常用標(biāo)簽,分別是

          alt 圖片說明,在圖像無法顯示時表現(xiàn)為圖像的替代文本

          width 寬 屬性值可以是象素,也可以是%

          height 高 屬性值可以是象素,也可以是%

          border 邊框

          5、圖片鏈接仍然是用a標(biāo)簽來顯示

          例子:<a href=“http://www.rwxy.xnc.edu.cn”><img src="sample.jpg" ></a>

          6、可以用圖像映射實現(xiàn)圖像不同區(qū)域的鏈接

          圖象映射

          所謂圖象映射是指一個圖片上的不同位置被指定了不同的超級鏈接;點擊圖片的不同位置會打開不同的超級鏈接目標(biāo)。這與前面的默認(rèn)超級鏈把整個圖片作為超級鏈接的元素是很不一樣的。

          圖象映射由<map>定義。<map>有一個基本屬性是name。name給圖象映射命名,這個命名將會被<img>元素用usemap屬性引用。所以,圖象上的圖象映射實際上是對<map>定義的映射的一個引用。

          <map>在定義圖象映射時,可以定義三種形狀的映射: circle(圓形)、rect(矩形rectangle)、poly(多邊形)

          圖象映射實例

          <img src="bear.jpg" usemap="#map" >

          <map name=“map">

          <area shape="rect" coords="46,29,253,164" href="#" >

          <area shape="circle" coords="76,510,59" href="#" >

          <area shape="poly" coords="219,482,253,448,310,462,297,527,220,523" href="#" >

          </map>


          表格標(biāo)簽

          表格由三個標(biāo)簽構(gòu)成,分別是

          <table>...</table> - 定義表格

          <tr> - 定義表行

          <th> - 定義表頭

          <td> - 定義表格單元(表格的具體數(shù)據(jù))

          在表格標(biāo)簽中,table、tr、td標(biāo)簽都具備不同的屬性

          table:border(邊框尺寸設(shè)置);width(表格的寬);height(表格的高);align(橫向?qū)R:left center right);bgcolor(背景色彩);background(背景圖像);cellspacing(表格單元的間隙設(shè)置);cellpadding(表元內(nèi)部空白設(shè)置);

          tr:height(行高);align(橫向?qū)R:left center right);valign(縱向?qū)R:top middle bottom);bgcolor(背景色彩);

          td:width(表格的寬);height(表格的高);align(橫向?qū)R:left center right);valign(縱向?qū)R:top middle bottom);bgcolor(背景色彩);background(背景圖像);

          注:當(dāng)talble、tr、td有共同的屬性而且屬性值發(fā)生沖突之際,其優(yōu)先性是td > tr > table

          表格在html中最大的作用不是用來整理數(shù)據(jù),而是用來排版,所以它是html中用處最廣的標(biāo)簽之一。

          表格內(nèi)部可以繼續(xù)放入表格,這被稱之為表格嵌套,利用表格嵌套可以制作出非常復(fù)雜的排版。

          表格的單元格可以跨行跨列顯示

          跨多列的單元格 <td colspan=#>

          <table border=1>

          <tr><td colspan=3> morning menu</td>

          <tr><td>food</td> <td>drink</td> <td>sweet</td>

          <tr><td>a</td><td>b</td><td>c</td>

          </table>

          morning menu

          food

          drink

          sweet

          a

          b

          c

          跨多行的單元格 <td rowspan=#>

          <table border=1>

          <tr><td rowspan=3> morning menu</td>

          <td>food</td> <td>a</td></tr>

          <tr><td>drink</td> <td>b</td></tr>

          <tr><td>sweet</td> <td>c</td></tr>

          </table>

          morning menu

          food

          a

          drink

          b

          sweet

          c

          ....................................................................

          我的微信公眾號:UI嚴(yán)選 —越努力,越幸運

          單標(biāo)簽

          網(wǎng)頁(程序)如果要和用戶產(chǎn)生互動,則必須借助一定的中介,這個中介一般是:文本輸入框、按鈕、多選框、單選框。而表單則是這些中介和放置這些中介的空間(<form action=”” methon=””></form>)。

          在網(wǎng)頁中,這些文本輸入框、按鈕等等必須放置在由<form></form>這個標(biāo)簽所定義的空間中,否則沒有實際意義。所以,由<form></form>標(biāo)簽所定義的空間就是表單存在的空間。


          【各種輸入類型】

          1. 文字輸入框:每個表單之所以會有不同的類型,原因就在于type="表單類型"設(shè)定的不同而已,我們就先來看看第一個類型:文字輸入列。文字輸入列的形態(tài)就是type="text,其使用方法如下:

          呈現(xiàn)結(jié)果

          姓名:

          原始碼

          <form action=http://www.baidu.com/nameproject.aspmethon=”post”>

          姓名:<input type="text" name="name" size="20">

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一欄位的名稱,程式中常會用到。
          • size="數(shù)值",是設(shè)定此一欄位顯現(xiàn)的寬度。
          • value="預(yù)設(shè)內(nèi)容",是設(shè)定此一欄位的預(yù)設(shè)內(nèi)容。
          • align="對齊方式",是設(shè)定此一欄位的對齊方式,其值有:top(向上對齊)、middle(向中對齊)、bottom(向下對齊)、right(向右對齊)、left(向左對齊)、texttop(向文字頂部對齊)、baseline(向文字底部對齊)、absmiddle(絕對置中)、absbottom(絕對置下)等。
          • maxlength="數(shù)值",是設(shè)定此一欄位可設(shè)定輸入的最大長度。


          1. 單選框:利用type="radio"就會產(chǎn)生單選核取表單,單選核取表單通常是好幾個選項一起擺出來供使用者點選,一次只能從中選一個,故為單選核取表單。

          呈現(xiàn)結(jié)果

          性別:男 女

          原始碼

          <form>

          性別:

          男 <input type="radio" name="sex" value="boy">

          女 <input type="radio" name="sex" value="girl">

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一欄位的名稱,程式中常會用到。
          • value="內(nèi)容",是設(shè)定此一欄位的內(nèi)容、值或是意義。
          • align="對齊方式",是設(shè)定此一欄位的對齊方式,其值有:top(向上對齊)、middle(向中對齊)、bottom(向下對齊)、right(向右對齊)、left(向左對齊)、texttop(向文字頂部對齊)、baseline(向文字底部對齊)、absmiddle(絕對置中)、absbottom(絕對置下)等。
          • checked,是設(shè)定此一欄位為預(yù)設(shè)選取值。


          1. 復(fù)選框:利用type=" checkbox "就會產(chǎn)生復(fù)選核取表單,復(fù)選核取表單通常是好幾個選項一起擺出來供使用者點選,一次可以同時選好幾個,故為復(fù)選核取表單。

          呈現(xiàn)結(jié)果

          喜好: 電影 看書

          原始碼

          <form>

          喜好:

          <input type="checkbox" name="sex" value="movie">電影

          <input type="checkbox" name="sex" value="book">看書

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一欄位的名稱,程式中常會用到。
          • value="內(nèi)容",是設(shè)定此一欄位的內(nèi)容、值或是意義。
          • align="對齊方式",是設(shè)定此一欄位的對齊方式,其值有:top(向上對齊)、middle(向中對齊)、bottom(向下對齊)、right(向右對齊)、left(向左對齊)、texttop(向文字頂部對齊)、baseline(向文字底部對齊)、absmiddle(絕對置中)、absbottom(絕對置下)等。
          • checked,是設(shè)定此一欄位為預(yù)設(shè)選取值。


          1. 密碼表單:利用type=" password "就會產(chǎn)生一個密碼表單,密碼表單和文字輸入表單長得幾乎一樣,差別就在于密碼表單在輸入時全部會以星號來取代輸入的文字,以防他人偷窺。

          呈現(xiàn)結(jié)果

          請輸入密碼:

          原始碼

          <form>

          請輸入密碼:<input type="password" name="input">

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一欄位的名稱,程式中常會用到。
          • size="數(shù)值",是設(shè)定此一欄位顯現(xiàn)的寬度。
          • value="預(yù)設(shè)內(nèi)容",是設(shè)定此一欄位的預(yù)設(shè)內(nèi)容,不過呈現(xiàn)出來仍是星號。
          • align="對齊方式",是設(shè)定此一欄位的對齊方式,其值有:top(向上對齊)、middle(向中對齊)、bottom(向下對齊)、right(向右對齊)、left(向左對齊)、texttop(向文字頂部對齊)、baseline(向文字底部對齊)、absmiddle(絕對置中)、absbottom(絕對置下)等。
          • maxlength="數(shù)值",是設(shè)定此一欄位可設(shè)定輸入的最大長度。


          1. 送出按鈕:通常我們表單填完之后,都會有一個送出按鈕以及清除重寫的按鈕,分別是利用type=" submit "及type=" reset "來產(chǎn)生,相當(dāng)?shù)暮唵我子谩?/li>

          呈現(xiàn)結(jié)果

          原始碼

          <form>

          <input type="submit" value="送出資料">

          <input type="reset" value="重新填寫">

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一按鈕的名稱。
          • value="文字",是設(shè)定此一按鈕上要呈現(xiàn)的文字,若是沒有設(shè)定,瀏覽器也會自動替您加上“送出查詢”、“重設(shè)”等字樣。
          • align="對齊方式",是設(shè)定此一欄位的對齊方式,其值有:top(向上對齊)、middle(向中對齊)、bottom(向下對齊)、right(向右對齊)、left(向左對齊)、texttop(向文字頂部對齊)、baseline(向文字底部對齊)、absmiddle(絕對置中)、absbottom(絕對置下)等。


          1. 按鈕元件:表單中或是java script常會用到按鈕來作一些效果,因此,我們可以利用type=" button "來產(chǎn)生一個按鈕,相當(dāng)簡單。

          呈現(xiàn)結(jié)果

          請按下按鈕:

          原始碼

          <form>

          請按下按鈕:<input type="button" name="ok" value="我同意">

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一按鈕的名稱。
          • value="文字",是設(shè)定此一按鈕上要呈現(xiàn)的文字。
          • align="對齊方式",是設(shè)定此一欄位的對齊方式,其值有:top(向上對齊)、middle(向中對齊)、bottom(向下對齊)、right(向右對齊)、left(向左對齊)、texttop(向文字頂部對齊)、baseline(向文字底部對齊)、absmiddle(絕對置中)、absbottom(絕對置下)等。


          1. 隱藏欄位:表單中有時有些東西因為某些因素,不想讓使用者看到,但因程式需要卻又不得不存在,此時,我們就可以利用type=" hidden "來產(chǎn)生一個隱藏的欄位。

          呈現(xiàn)結(jié)果

          隱藏欄位:

          原始碼

          <form>

          隱藏欄位:<input type="hidden" name="nosee" value="看不到">

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一欄位的名稱。
          • value="文字",是設(shè)定此一欄位的值、文字或意義。

          【大量文字輸入元件】

          1. 有時候我們會希望讓使用者輸入比較大量的文字,此時,文字輸入列就顯得不敷使用,因此我們就可以利用<textarea></textarea>來產(chǎn)生一個可以輸入大量文字的元件,夾在兩個標(biāo)簽中的文字會出現(xiàn)在框框中,可作為預(yù)設(shè)文字。

          呈現(xiàn)結(jié)果

          請輸入您的意見:

          原始碼

          <form>

          請輸入您的意見:<br>

          <textarea name="talk" cols="20" rows="3"></textarea>

          </form>

          它有下列可設(shè)定之屬性:

          • name="名稱",是設(shè)定此一欄位的名稱。
          • wrap="設(shè)定值",是設(shè)定此一欄位的換行模式。設(shè)定值有三種:off(輸入文字不會自動換行)、virtual(輸入文字在螢?zāi)簧蠒詣訐Q行,不過若是使用者沒有自行按下enter換行,送出資料時,也視為沒有換行)、physical(輸入文字會自動換行,送出資料時,會將螢?zāi)簧系淖詣訐Q行,視為換行效果送出)。
          • cols="數(shù)值",是設(shè)定此一欄位的行數(shù)(橫向字?jǐn)?shù))。
          • rows="數(shù)值",是設(shè)定此一欄位的列數(shù)(垂直字?jǐn)?shù))。


          【下拉式選單】

          1. 下拉式選單令整個網(wǎng)頁看起來有很專業(yè)的感覺,我們只要利用<select name="名稱">便可以產(chǎn)生一個下拉式選單,另外,還需要配合<option>標(biāo)簽來產(chǎn)生選項,這樣才算完整喔!

          呈現(xiàn)結(jié)果

          您喜歡看書嗎?:

          非常喜歡

          還算喜歡

          不太喜歡

          非常討厭

          原始碼

          <form>

          您喜歡看書嗎?:

          <select name="like">

          <option value="非常喜歡">非常喜歡

          <option value="還算喜歡">還算喜歡

          <option value="不太喜歡">不太喜歡

          <option value="非常討厭">非常討厭

          </select>

          </form>

          它有下列可設(shè)定之屬性:

          1. size="數(shù)值",是設(shè)定此一欄位的大小,預(yù)設(shè)值為1,若是您的選項有四個,然后您將size設(shè)成4,那么,下拉式選單便會變成選項方塊,將四個選項一起呈現(xiàn)在方塊中。

          multiple,是設(shè)定此一欄位為復(fù)選,可以一次選好幾個選項。

          ....................................................................

          我的微信公眾號:UI嚴(yán)選 —越努力,越幸運

          前在項目的過程中遇到了一個問題,某個 div 希望始終顯示在最上面,而在之后的元素都顯示在它之下,當(dāng)時設(shè)置了 z-index 也沒有效果,不知道什么原因,因此找了一下 CSS 相關(guān)資料,解決了這個問題的同時,也學(xué)習(xí)了很多知識,特此和大家分享一下。

          屏幕是一個二維平面,然而 HTML 元素卻是排列在三維坐標(biāo)系中, x 為水平方向, y 為垂直方向, z為屏幕由內(nèi)向外方向,我們在看屏幕的時候是沿著 z 軸方向從外向內(nèi)的。由此,元素在用戶視角就形成了層疊的關(guān)系,某個元素可能覆蓋了其他元素也可能被其他元素覆蓋;

          這里有幾個重要的概念:層疊上下文 (堆疊上下文, Stacking Context)、層疊等級 (層疊水平, Stacking Level)、層疊順序 (層疊次序, 堆疊順序, Stacking Order)、z-indexBFC(塊級格式化上下文,Block Formatting Context),這些概念共同決定了你看到元素的位置,下面我們就圍繞著這幾個概念來一起學(xué)習(xí)一下。

          聲明:

          1. 以下定位元素指的是 position:absolute|fixed|relative|sticky
          2. 以下非定位元素指的是 position:initial|static
          3. 本文蠻長的,但是如果你可以仔細(xì)看完,那對相關(guān)概念的掌握就非常好了 (~o ̄▽ ̄)~

          1. 層疊上下文 (Stacking Context)

          層疊上下文 (堆疊上下文, Stacking Context),是 HTML 中一個三維的概念。在 CSS2.1 規(guī)范中,每個元素的位置是三維的,當(dāng)元素發(fā)生層疊,這時它可能覆蓋了其他元素或者被其他元素覆蓋;排在 z 軸越靠上的位置,距離屏幕觀察者越近。

          文章 <關(guān)于z-index 那些你不知道的事> 有一個很好的比喻,這里引用一下;

          可以想象一張桌子,上面有一堆物品,這張桌子就代表著一個層疊上下文。如果在第一張桌子旁還有第二張桌子,那第二張桌子就代表著另一個層疊上下文。現(xiàn)在想象在第一張桌子上有四個小方塊,他們都直接放在桌子上。在這四個小方塊之上有一片玻璃,而在玻璃片上有一盤水果。這些方塊、玻璃片、水果盤,各自都代表著層疊上下文中一個不同的層疊層,而這個層疊上下文就是桌子。

          每一個網(wǎng)頁都像一個房間,這個房間就是 <html></html>,其他層疊上下文就像這個房間里的桌子,HTML 標(biāo)簽中的一切都被置于這個房間中。

          當(dāng)給一個元素的 position 值賦為 fixed 或 sticky 值時,你就創(chuàng)建了一個新的層疊上下文,其中有著獨立于頁面上其他層疊上下文和層疊層的層疊層,這就相當(dāng)于你把另一張桌子帶到了房間里。

          層疊上下文 1 (Stacking Context 1)是由文檔根元素形成的, 層疊上下文 2 和 3 (Stacking Context 2, 3) 都是層疊上下文 1 (Stacking Context 1) 上的層疊層。他們各自也都形成了新的層疊上下文,其中包含著新的層疊上下文。

          在層疊上下文中,其子元素按照上面解釋的規(guī)則進行層疊。形成層疊上下文的方法有:

          • 根元素 <html></html>;
          • position 值為 absolute|relative,且 z-index 值不為 auto;
          • position 值為 fixed|sticky;
          • z-index 值不為 auto 的 flex 元素,即父元素屬性 display:flex|inline-flex;
          • opacity 屬性值小于 1 的元素;
          • transform 屬性值不為 none 的元素;
          • mix-blend-mode 屬性值不為 normal 的元素;
          • filter、 perspective、 clip-path、 mask、 mask-image、 mask-border、 motion-path值不為 none 的元素;
          • perspective 值不為 none 的元素;
          • isolation 屬性被設(shè)置為 isolate 的元素;
          • will-change 中指定了任意 CSS 屬性,即便你沒有直接指定這些屬性的值
          • -webkit-overflow-scrolling 屬性設(shè)置為 touch 的元素;

          總結(jié):

          1. 層疊上下文可以包含在其他層疊上下文中,并且一起組建了一個有層級的層疊上下文;
          2. 每個層疊上下文完全獨立于它的兄弟元素,當(dāng)處理層疊時只考慮子元素,類似于 BFC;
          3. 每個層疊上下文是自包含的:當(dāng)元素的內(nèi)容發(fā)生層疊后,整個該元素將會在父級疊上下文中按順序進行層疊;

          2. 層疊等級 (Stacking Level)

          層疊等級 (層疊水平, Stacking Level) 決定了在同一個層疊上下文中,元素在 z 軸上的顯示的順序;

          1. 普通元素的層疊等級優(yōu)先由其所在的層疊上下文決定;
          2. 層疊等級的比較,只有在同一個層疊上下文元素中才有意義;
          3. 在同一個層疊上下文中,層疊等級描述定義的是該層疊上下文中的元素在 z 軸上的上下順序;

          對于普通元素的層疊水平探討只局限于在當(dāng)前層疊上下文中:

          層疊上下文本身是一個強力的「層疊結(jié)界」,普通的元素水平是無法突破這個結(jié)界和結(jié)界外的元素去較量層疊水平的。

          — CSS 世界

          另外,層疊等級并不一定由 z-index 決定,只有定位元素的層疊等級才由 z-index 決定,其他類型元素的層疊等級由層疊順序、他們在 HTML 中出現(xiàn)的順序、他們的祖先元素的層疊等級一同決定,詳細(xì)的規(guī)則見下面層疊順序的介紹。

          3. z-index

          在 CSS 2.1 中, 所有的盒模型元素都處于三維坐標(biāo)系中。除了我們常用的橫坐標(biāo)和縱坐標(biāo), 盒模型元素還可以沿著「z 軸」層疊擺放,當(dāng)他們相互覆蓋時,z 軸順序就變得十分重要。

          -- CSS 2.1 Section 9.9.1 - Layered presentation

          z-index 只適用于定位的元素,對非定位元素?zé)o效,它可以被設(shè)置為正整數(shù)、負(fù)整數(shù)、 0、 auto,如果一個定位元素沒有設(shè)置 z-index,那么默認(rèn)為 auto;

          元素的 z-index 值只在同一個層疊上下文中有意義。如果父級層疊上下文的層疊等級低于另一個層疊上下文的,那么它 z-index 設(shè)的再高也沒用。所以如果你遇到 z-index 值設(shè)了很大,但是不起作用的話,就去看看它的父級層疊上下文是否被其他層疊上下文蓋住了。

          4. 層疊順序 (Stacking Order)

          層疊順序 (層疊次序, 堆疊順序, Stacking Order) 描述的是元素在同一個層疊上下文中的順序規(guī)則(之前的層疊上下文和層疊等級是概念),從層疊的底部開始,共有七種層疊順序:

          1. 背景和邊框:形成層疊上下文的元素的背景和邊框。
          2. 負(fù) z-index 值:層疊上下文內(nèi)有著負(fù) z-index 值的定位子元素,負(fù)的越大層疊等級越低;
          3. 塊級盒:文檔流中的塊級、非定位子元素;
          4. 浮動盒:非定位浮動元素;
          5. 行內(nèi)盒:文檔流中行內(nèi)、非定位子元素;
          6. z-index: 0: z-index 為 0 或 auto 的定位元素, 這些元素形成了新的層疊上下文;
          7. 正 z-index 值: z-index 為正的定位元素,正的越大層疊等級越高;

          第 7 級順序的元素會顯示在之前順序元素的上方,也就是看起來覆蓋了更低級的元素:

          除層疊順序優(yōu)先級規(guī)則之外,還有一條后來居上規(guī)則:同一個層疊順序的元素按照在 HTML 里出現(xiàn)的順序依次層疊。這兩個規(guī)則共同決定瀏覽器元素在文檔中是如何層疊的。

          5. 文檔流 (Document Flow)

          5.1 常規(guī)流 (Normal flow)

          • 在常規(guī)流中,盒一個接著一個排列;
          • 在塊級格式化上下文里面, 它們豎著排列;
          • 在行內(nèi)格式化上下文里面, 它們橫著排列;
          • 當(dāng) position 為 static 或 relative,并且 float 為 none 時會觸發(fā)常規(guī)流;
          • 對于靜態(tài)定位(static positioning), position:static,盒的位置是常規(guī)流布局里的位置;
          • 對于相對定位(relative positioning), position:relative,盒偏移位置由 top、 bottom、 left、 right 屬性定義。即使有偏移,仍然保留原有的位置,其它常規(guī)流不能占用這個位置。

          5.2 浮動 (Floats)

          1. 左浮動元素盡量靠左、靠上,右浮動同理;
          2. 這導(dǎo)致常規(guī)流環(huán)繞在它的周邊,除非設(shè)置 clear 屬性;
          3. 浮動元素不會影響塊級元素的布局;
          4. 但浮動元素會影響行內(nèi)元素的布局,讓其圍繞在自己周圍,撐大父級元素,從而間接影響塊級元素布局;
          5. 最高點不會超過當(dāng)前行的最高點、它前面的浮動元素的最高點;
          6. 不超過它的包含塊,除非元素本身已經(jīng)比包含塊更寬;
          7. 行內(nèi)元素出現(xiàn)在左浮動元素的右邊和右浮動元素的左邊,左浮動元素的左邊和右浮動元素的右邊是不會擺放浮動元素的;

          5.3 絕對定位 (Absolute positioning)

          1. 絕對定位方案,盒從常規(guī)流中被移除,不影響常規(guī)流的布局;
          2. 它的定位相對于它的包含塊,相關(guān) CSS 屬性: top、 bottom、 left、 right;
          3. 如果元素的屬性 position 為 absolute 或 fixed,它是絕對定位元素;
          4. 對于 position:absolute,元素定位將相對于上級元素中最近的一個 relative、 fixed、 absolute,如果沒有則相對于 body;

          6. BFC (Block Formatting Context)

          6.1 什么是 BFC

          BFC (Block Formatting Context) 塊級格式化上下文,是用于布局塊級盒子的一塊渲染區(qū)域,相對應(yīng)的還有 IFC(Inline Formatting Context)內(nèi)聯(lián)格式化上下文,不是本文重點,讀者可以自行查閱相關(guān)知識。

          BFC 是 Web 頁面 CSS 視覺渲染的一部分,用于決定塊盒子的布局及浮動相互影響范圍的一個區(qū)域。

          — MDN - 塊格式化上下文

          一個 BFC 的范圍包含創(chuàng)建該上下文元素的所有子元素,但不包括創(chuàng)建了新 BFC 的子元素的內(nèi)部元素。這從另一方角度說明,一個元素不能同時存在于兩個 BFC 中。因為如果一個元素能夠同時處于兩個 BFC 中,那么就意味著這個元素能與兩個 BFC 中的元素發(fā)生作用,就違反了 BFC 的隔離作用。

          觸發(fā) BFC 的方式有:

          1. 根元素,即 HTML 標(biāo)簽;
          2. 浮動元素,即 float 值為 left、 right;
          3. overflow 值不為 visible,即值為 auto、 scroll、 hidden;
          4. display 值為 inline-block、 table-cell、 table-caption、 table、 inline-table、 flex、 inline-flex、 grid、 inline-grid;
          5. 定位元素: position 值為 absolute、 fixed;
          6. contain 為 layout、 content、 paint 的元素;

          注意: display:table 也可以生成 BFC 的原因在于 Table 會默認(rèn)生成一個匿名的 table-cell,是這個匿名的 table-cell 生成了 BFC。

          6.2 用法

          1. 阻止相鄰元素的 margin 合并

          屬于同一個 BFC 的兩個相鄰塊級子元素的上下 margin 會發(fā)生重疊,(設(shè)置 writing-mode:tb-rl時,水平 margin 會發(fā)生重疊)。所以當(dāng)兩個相鄰塊級子元素分屬于不同的 BFC 時可以阻止 margin 重疊。可以給任一個相鄰塊級盒子的外面包一個 div,通過改變此 div 的屬性使兩個原盒子分屬于兩個不同的 BFC,以此來阻止 margin 重疊。

          代碼和預(yù)覽參見:Codepen - 使用BFC阻止margin合并:https://codepen.io/SHERlocked93/pen/eVOevN

          2. 阻止元素被浮動元素覆蓋

          一個正常文檔流的塊級元素可能被一個 float 元素覆蓋,擠占正常文檔流,因此可以設(shè)置一個元素的 float、 display、 position 值等方式觸發(fā) BFC,以阻止被浮動盒子覆蓋。

          代碼和預(yù)覽參見:Codepen - 使用BFC阻止元素被浮動元素覆蓋:https://codepen.io/SHERlocked93/pen/pazdzB

          3. 包含浮動元素

          通過改變包含浮動子元素的父盒子的屬性值,觸發(fā) BFC,以此來包含子元素的浮動盒子。

          代碼和預(yù)覽參見:Codepen - 使用BFC包含浮動元素:https://codepen.io/SHERlocked93/pen/OQLOqG

          7. 實戰(zhàn)

          下面一起來看幾個例子實戰(zhàn)一下,幫助理解。

          7.1 普通情況

          三個 relative 定位的 div 塊中各有 absolute 的不同顏色的 span.red、 span.green、 span.blue,它們都設(shè)置了 position:absolute;

          代碼和預(yù)覽參見:Codepen - 普通情況:https://codepen.io/SHERlocked93/pen/aaPord

          那么當(dāng)沒有元素包含 z-index 屬性時,這個例子中的元素按照如下順序?qū)盈B(從底到頂順序):

          1. 根元素的背景和邊界;
          2. 塊級非定位元素按 HTML 中的出現(xiàn)順序?qū)盈B;
          3. 行內(nèi)非定位元素按 HTML 中的出現(xiàn)順序?qū)盈B;
          4. 定位元素按 HTML中的出現(xiàn)順序?qū)盈B;

          紅綠藍(lán)都屬于 z-index 為 auto 的定位元素,因此按照 7 層層疊順序規(guī)則來說同屬于層疊順序第 6 級,所以按 HTML 中的出現(xiàn)順序?qū)盈B:紅->綠->藍(lán)

          7.2 在相同層疊上下文的父元素內(nèi)的情況

          紅綠位于一個 div.first-box 下,藍(lán)位于 div.second-box 下,紅綠藍(lán)都設(shè)置了 position:absolute, first-box 與 second-box 都設(shè)置了 position:relative;

          代碼和預(yù)覽參見:Codepen - 父元素不同但都位于根元素下:https://codepen.io/SHERlocked93/pen/RYENBw

          這個例子中,紅藍(lán)綠元素的父元素 first-box 與 second-box 都沒有生成新的層疊上下文,都屬于根層疊上下文中的元素,且都是層疊順序第 6 級,所以按 HTML 中的出現(xiàn)順序?qū)盈B:紅->綠->藍(lán)

          7.3 給子元素增加 z-index

          紅綠位于一個 div.first-box 下,藍(lán)黃位于 div.second-box 下,紅綠藍(lán)都設(shè)置了 position:absolute,如果這時給綠加一個屬性 z-index:1,那么此時 .green 位于最上面;

          如果再在 .second-box 下 .green 后加一個絕對定位的 span.gold,設(shè)置 z-index:-1,那么它將位于紅綠藍(lán)的下面;

          代碼和預(yù)覽參見:Codepen - 設(shè)置了z-index:https://codepen.io/SHERlocked93/pen/gdZOrK

          這個例子中,紅藍(lán)綠黃元素的父元素中都沒有生成新的層疊上下文,都屬于根層疊上下文中的元素

          1. 紅藍(lán)都沒有設(shè)置 z-index,同屬于層疊順序中的第 6 級,按 HTML 中的出現(xiàn)順序?qū)盈B;
          2. 綠設(shè)置了正的 z-index,屬于第 7 級;
          3. 黃設(shè)置了負(fù)的 z-index,屬于第 2 級;

          所以這個例子中的從底到高顯示的順序就是:黃->紅->藍(lán)->綠

          7.4 在不同層疊上下文的父元素內(nèi)的情況

          紅綠位于一個 div.first-box 下,藍(lán)位于 div.second-box 下,紅綠藍(lán)都設(shè)置了 position:absolute,如果 first-box 的 z-index 設(shè)置的比 second-box 的大,那么此時無論藍(lán)的 z-index 設(shè)置的多大 z-index:999,藍(lán)都位于紅綠的下面;如果我們只更改紅綠的 z-index 值,由于這兩個元素都在父元素 first-box 產(chǎn)生的層疊上下文中,此時誰的 z-index 值大,誰在上面;

          代碼和預(yù)覽參見:Codepen - 不同層疊上下文的父元素:https://codepen.io/SHERlocked93/pen/gdZbOJ

          這個例子中,紅綠藍(lán)都屬于設(shè)置了 z-index 的定位元素,不過他們的父元素創(chuàng)建了新的層疊上下文;

          1. 紅綠的父元素 first-box 是設(shè)置了正 z-index 的定位元素,因此創(chuàng)建了一個層疊上下文,屬于層疊順序中的第 7 級;
          2. 藍(lán)的父元素 second-box 也同樣創(chuàng)建了一個層疊上下文,屬于層疊順序中的第6級;
          3. 按照層疊順序, first-box 中所有元素都排在 second-box 上;
          4. 紅綠都屬于層疊上下文 first-box 中且設(shè)置了不同的正 z-index,都屬于層疊順序中第 7 級;
          5. 藍(lán)屬于層疊上下文 second-box,且設(shè)置了一個很大的正 z-index,屬于層疊元素中第 7 級;
          6. 雖然藍(lán)的 z-index 很大,但是因為 second-box 的層疊等級比 first-box 小,因此位于紅綠之下;

          所以這個例子中從低到到顯示的順序:藍(lán)->紅->綠

          (我遇到的的情況就屬于這個例子類似情形)

          7.5 給子元素設(shè)置 opacity

          紅綠位于 div.first-box 下,藍(lán)位于 div.second-box 下,紅綠藍(lán)都設(shè)置了 position:absolute,綠設(shè)置了 z-index:1,那么此時綠位于紅藍(lán)的最上面;

          如果此時給 first-box 設(shè)置 opacity:.99,這時無論紅綠的 z-index 設(shè)置的多大 z-index:999,藍(lán)都位于紅綠的上面;

          如果再在 .second-box 下 .green 后加一個 span.gold,設(shè)置 z-index:-1,那么它將位于紅綠藍(lán)的下面;

          代碼和預(yù)覽參見:Codepen - opacity的影響:https://codepen.io/SHERlocked93/pen/GXPRWB

          之前已經(jīng)介紹了,設(shè)置 opacity 也可以形成層疊上下文,因此:

          1. first-box 設(shè)置了 opacity, first-box 成為了一個新的層疊上下文;
          2. second-box 沒有形成新的層疊上下文,因此其中的元素都屬于根層疊上下文;
          3. 黃屬于層疊順序中第 2 級,紅綠屬于第 7 級, first-box 屬于第 6 級,藍(lán)屬于層疊順序中第6級且按HTML出現(xiàn)順序位于 first-box 之上;

          所以這個例子中從低到到顯示的順序:黃->紅->綠->藍(lán)


          關(guān)注微信公眾號:安徽思恒信息科技有限公司,了解更多技術(shù)內(nèi)容……


          主站蜘蛛池模板: AV无码精品一区二区三区宅噜噜| 在线播放精品一区二区啪视频| 亚洲av日韩综合一区久热| 在线观看视频一区二区| 无码国产精品一区二区免费式芒果 | 亚洲一区二区三区精品视频| 97久久精品午夜一区二区| 精品视频午夜一区二区| 日韩在线不卡免费视频一区| 久久免费视频一区| 国产亚洲情侣一区二区无| 高清一区高清二区视频| 亚洲一本一道一区二区三区| 亚洲av无码不卡一区二区三区| 国产在线一区二区杨幂| 国产精品一区二区资源| 日韩一区二区在线观看| 亚洲A∨精品一区二区三区| 国产激情一区二区三区四区| 日本免费精品一区二区三区| 久久国产午夜精品一区二区三区| 一区二区免费电影| 中文字幕日韩人妻不卡一区 | 国产成人AV一区二区三区无码| 国产福利视频一区二区| 日韩免费视频一区二区| 精品不卡一区二区| 日韩AV无码一区二区三区不卡| 视频在线观看一区二区三区| 亲子乱AV视频一区二区| 亚洲男女一区二区三区| 日本精品一区二区三区视频| 久久精品无码一区二区app| 人妻久久久一区二区三区| 国产精品成人一区无码| 日本不卡一区二区视频a| 成人免费视频一区二区三区| 中文字幕Av一区乱码| 国产在线无码视频一区| 国产精品高清一区二区三区不卡| 国产色精品vr一区区三区|