整合營銷服務(wù)商

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

          免費咨詢熱線:

          CSS 是如何影響瀏覽器元素在文檔中的排列?

          前在項目的過程中遇到了一個問題,某個 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. 本文蠻長的,但是如果你可以仔細看完,那對相關(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)的順序、他們的祖先元素的層疊等級一同決定,詳細的規(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;

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

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

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

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

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

          7.3 給子元素增加 z-index

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          代碼和預(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 級,藍屬于層疊順序中第6級且按HTML出現(xiàn)順序位于 first-box 之上;

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


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

          德經(jīng)第二十二章中有一句是說“少則得,多則惑”,這句話的意思是:少取則真得,貪多則反而導(dǎo)致自身的混亂。結(jié)合我親身經(jīng)歷,更容易理解這句話的意思。

          有一段時間,我們天都學(xué)習(xí)10個小時,這種情況一直持續(xù)了大半個月。可是效果卻幾乎等于沒有,這段時間內(nèi)每天都會有大量的信息涌入你的腦袋,在學(xué)的那一刻,你感覺你已經(jīng)完全會了。但是過個一兩天,你卻完全不記得你到底學(xué)過些什么,像失憶了似的。


          艾賓浩斯記憶曲線也告訴我們,大腦的記憶是一個緩慢的過程,想要對某一知識記憶深刻,就需要不斷地重復(fù)練習(xí)。直到隨時隨地拿來就用的地步,你就再也不會忘記了。

          為什么說少則得,多則惑呢?每天只學(xué)一點,練習(xí)好幾遍,把這個知識點刻到腦子里面去,這樣日積月累你會發(fā)現(xiàn)你已經(jīng)學(xué)會了很多。每天學(xué)習(xí)很多知識點,很少時間去練習(xí),過段時間你會發(fā)現(xiàn)你什么都沒有記住,到用的時候根本想不起來,還得返回頭再去學(xué)習(xí)一遍。徒增學(xué)習(xí)成本,也就是多則惑的道理。


          好了言歸正傳,今天我們來學(xué)習(xí)html中的表格和表單,這兩個可不是一個東西哦。

          表格:excel表格知道吧,橫行豎起列的那種表格。看圖:


          上面是一個9行2列的表格,在html里面也有這種表格,我們來使用html的table表格標(biāo)簽來實現(xiàn)一個5行3列的表格。



          上圖中table標(biāo)簽表示這是一個表格,tr表示一行,圖中我寫了五行,都用紅圈標(biāo)注了出來,每個tr里面又包含著td,td表示列,第1行里面有3列,第2、3、4、5行每行里面都有3列。


          在瀏覽器中的效果:

          和我們想象中的樣子好像有點不一樣,沒有格子,這是因為我們沒有設(shè)置的緣故,table標(biāo)簽允許你通過border屬性來設(shè)置邊框(也就是格子),那我們來給它設(shè)置一個邊框吧。


          通過給table標(biāo)簽添加border="1",就可以讓表格有邊框了,來看看瀏覽器中的效果:

          還是有點別扭,我腦海里面的表格應(yīng)該是和艾賓浩斯記憶曲線的那張表格一樣才對啊,現(xiàn)在的這個表格有點鏤空的感覺,第1行的第1列和第1行的第2列,也就是“關(guān)羽”、“男”之前有距離,如何把這個距離去掉呢?我們可以通過table標(biāo)簽的cellspacing屬性把距離去掉,試一下:

          加了cellspacing="0" 屬性后,瀏覽器中的效果如下:

          當(dāng)然了, table標(biāo)簽的cellspacing屬性的不光可以等于0,還可以等于其他值,比如我們就是希望有距離,那么我們設(shè)置成20試一下:


          瀏覽器中的效果:

          cellspacing屬性的值應(yīng)該取多少,按照你的需求來設(shè)置就好了。


          現(xiàn)在還有一個問題,我覺得每個單元格的太小了,也就是“關(guān)羽”這個格子的邊框和“關(guān)羽”這兩個字貼得太緊了,一點都不好看,我們可以讓他稍微有點距離,那樣看起來應(yīng)該比較美觀一點。這個需求可以通過table標(biāo)簽的cellpadding屬性來設(shè)置,其實也就是設(shè)置內(nèi)邊距,關(guān)于內(nèi)邊距的概念我們在《踏上編程之路的必經(jīng)之路之html篇三》中講解過,如果忘記的同學(xué)可以返回去看一下。

          我們將cellpadding設(shè)置為10,在瀏覽器中的效果如下:

          現(xiàn)在整個表格感覺是豎起來的,能不能讓他感覺是橫著呢?table標(biāo)簽允許你調(diào)整它的寬度,只要寬度夠了,感覺起來自然就是橫的了。我們通過table標(biāo)簽的width屬性來調(diào)整表格的寬度:

          調(diào)整表格的寬度為600,瀏覽器中的效果如下:


          表格中的文字現(xiàn)在是左對齊,也就是靠近單元格的左邊,我們可以讓它居中,或者靠右對齊(右對齊),文字的對齊方式可以通過tr標(biāo)簽的align屬性來控制:



          注意文字對齊方式,是給tr標(biāo)簽(也就是table的行標(biāo)簽)設(shè)置了align屬性,不是給table,不要寫錯地方了。align="center"就是讓文字居中,align="right"就是讓文字右對齊,如果不寫,默認(rèn)是左對齊。


          設(shè)置了文字對齊方式后,瀏覽器中的效果如下:


          最我們整體調(diào)整一下,我需要有邊框(border="1",設(shè)置為0就是沒有邊框),單元格之間不要距離(cellspacing="0",設(shè)置成其它值就是有距離),內(nèi)邊距需要5(cellpadding="5"),表格寬度需要400(width="400"),文字統(tǒng)一都是居中對齊(table標(biāo)簽的tr標(biāo)簽上面設(shè)置align="center"),整體設(shè)置后的代碼如下:



          瀏覽器中的效果如下:


          其實table標(biāo)簽也有一個align屬性,它可以讓整表格在瀏覽器中的居中、靠左或者靠右對齊,有興趣的同學(xué)可以自己嘗試一下。



          最后提醒一句,代碼中的各種標(biāo)簽和標(biāo)簽的屬性還有單雙引號,都必須是英文的,如果你寫成中文的,是不正確的。

          舉個例子:




          良好的行動力,是成功的一半,動手練起來。

          篇中我們介紹了文本的一些樣式,這篇接著講文本樣式。

          6.文本下劃線

          一般文本下劃線都用在什么地方呢?我想到一個就是畫重點考前劃重點,有沒有畫面感,^v^。


          用css來實現(xiàn)劃重點,也是別具風(fēng)格呀。


          <!DOCTYPE html>
          <html>
          <head>
            <title>css顏色與度量單位</title>
            <style>
              span{
                text-decoration:underline;
              }
          </style>
          </head>
          <body>
            <p>
              在做等離子物理對撞實驗的時候,如果把第三能量的極坐標(biāo),向負(fù)方向調(diào)整三個阿爾法單位,那么對最終的結(jié)果將會產(chǎn)生多少影響?
              <br>
              <span>2伽馬一步徐龍根號3</span>
            </p>
          </body>
          </html>


          text-decoration可以給文本設(shè)置下劃線,上劃線,刪除線,取消線。


          上面代碼實現(xiàn)效果如下:

          這個效果看起來兩行之間的距離有點擁擠,我們可以調(diào)整的它們的距離,稍微遠一點,讓它們看起不那么擁擠。


          7.文本的行間距


          用line-height來指定行間距,因為文本都包含在p標(biāo)簽中,所以我們給p標(biāo)簽加了行間距為50px


          調(diào)整后的效果如下:

          看起來下劃線的文字還是不夠顯眼啊,我們再給它加點顏色上去,會更好。

          這回好多了。夠顯眼,就絕對記得住。


          text-decoration后面可以設(shè)置的值如下:

          說明

          none

          讓本身有劃線裝飾的文本取消掉

          underline

          讓文本的底部出現(xiàn)一條下劃線

          overline

          讓文本的頭部出現(xiàn)一條上劃線

          line-through

          讓文本的中部出現(xiàn)一條刪除線

          blink

          讓文本進行閃爍,基本不支持了


          text-decoration:none這個會讓本身有劃線裝飾的文本取消掉的意思,例如a標(biāo)簽,天生就帶下劃線,那要不想要自帶的下劃線就可以利用這個樣式給它去掉。

          來嘗試一下

          <!DOCTYPE html>
          <html>
          <head>
            <title>css顏色與度量單位</title>
            <style>
              p{
                line-height: 50px;
              }
              span{
          
          
                text-decoration:underline;
                color: red;
              }
          </style>
          </head>
          <body>
            <p>
              在做等離子物理對撞實驗的時候,如果把第三能量的極坐標(biāo),向負(fù)方向調(diào)整三個阿爾法單位,那么對最終的結(jié)果將會產(chǎn)生多少影響?
              <br>
              <span>2伽馬一步徐龍根號3</span>
              <br>
              <a href="http://www.baidu.com">百度</a>
            </p>
          </body>
          </html>

          百度兩個字下面天生就帶了下?lián)Q線,要去掉請使用text-decoration:none

          其余幾個大家可以自己動手嘗試一下效果。


          8.設(shè)置英文文本轉(zhuǎn)換為大小寫


          這個標(biāo)題很好理解,就是專門針對英文的,如果想把英文文本轉(zhuǎn)換大小寫可以使用

          <!DOCTYPE html>
          <html>
          <head>
            <title>css顏色與度量單位</title>
            <style>
              p{
                line-height: 50px;
              }
              span{
          
          
                text-decoration:underline;
                color: red;
              }
              a{
                text-decoration:none;
              }
          </style>
          </head>
          <body>
            <p>
              在做等離子物理對撞實驗的時候,如果把第三能量的極坐標(biāo),向負(fù)方向調(diào)整三個阿爾法單位,那么對最終的結(jié)果將會產(chǎn)生多少影響?
              <br>
              <span>2伽馬一步徐龍根號3</span>
              <br>
              <a href="http://www.baidu.com">百度</a>
              <br>
              <span class="english">
                no zuo no die you why cry
                <br>
                you zuo you die don't ask why
              </span>
            </p>
          </body>
          </html>

          頁面效果如下:

          這里的英文文本也是寫在了span標(biāo)簽里面,受span標(biāo)簽樣式的影響這里也變成了紅色,也加了下劃線。我們給它取消掉這些樣式。并給它設(shè)置讓英文單詞首字母變成大寫的樣式。



          下面給出text-transform的值和作用的表格,大家可以自行動手嘗試效果。

          說明

          none

          將已被轉(zhuǎn)換大小寫的值恢復(fù)到默認(rèn)狀態(tài)

          capitalize

          將英文單詞首字母大寫

          uppercase

          將英文轉(zhuǎn)換為大寫字母

          lowercase

          將英文轉(zhuǎn)換為小寫字母

          9.文本添加陰影


          text-shadow:5px 5px 5px red;

          這里有四個值(3個5px和一個red):第一個值代表水平偏移;第二個值代表垂直偏移;第三個值代表陰影模糊度(可選);第四個值代表陰影顏色(可選)。


          10.設(shè)置文本的對齊方式


          我們可以設(shè)置文本的對齊方式,如果你用過word文檔的話,那一定知道左對齊、右對齊、居中對齊。css里面同樣有

          我們來嘗試一下居中對齊


          說明

          left

          靠左對齊,默認(rèn)

          right

          靠右對齊

          center

          居中對齊

          justify

          內(nèi)容兩端對齊

          start

          讓文本處于開始的邊界

          end

          讓文本處于結(jié)束的邊界

          start和end屬于css3新增的功能,IE和Opera瀏覽器可能不支持。


          11.處理文本之間的距離(letter-spacing)

          也就是兩個字間的距離,通過例子來感受一下

          很明顯的可以看到字間距變大了。


          12.設(shè)置英文單詞之間的距離(word-spacing)



          13.文本首行的縮進(text-indent)


          一般每個段落的首行都要縮進,這是書寫書信文件時的規(guī)定。


          我們?nèi)サ袅司又袑R的樣式,是為了更好地演示首行縮進的效果。

          看效果圖紅框的地方,明顯有縮進。

          好了,以上就是今天的內(nèi)容了。

          希望大家可以早日學(xué)會編程,踏上高薪之路,早日成為白富美、高富帥。動手練,聽我的沒錯。


          主站蜘蛛池模板: 蜜桃视频一区二区| 国产aⅴ一区二区| 少妇人妻精品一区二区三区| 伊人久久大香线蕉av一区| 久久er99热精品一区二区| 国产亚洲福利精品一区二区| 变态调教一区二区三区| 欧美一区内射最近更新| 国产在线一区二区综合免费视频| 在线视频一区二区| 久久精品一区二区三区日韩| 无码人妻aⅴ一区二区三区| 麻豆一区二区在我观看| 国产剧情国产精品一区| 国产日韩高清一区二区三区| 亚洲av日韩综合一区久热| 亚洲狠狠久久综合一区77777| 精品免费AV一区二区三区| 美女免费视频一区二区三区| 精品深夜AV无码一区二区| 亚洲国产精品一区二区成人片国内| 国产成人一区二区动漫精品| 伊人色综合视频一区二区三区| 中文字幕Av一区乱码| 中文字幕精品一区二区精品| 日韩人妻无码一区二区三区久久99 | 无码精品人妻一区二区三区中| 视频一区二区三区在线观看| 无码精品人妻一区二区三区免费| 日本精品视频一区二区| 高清一区二区三区| 久久久99精品一区二区| 亚洲欧洲∨国产一区二区三区| 亚洲视频一区二区| 国产一区二区三区樱花动漫| 一区二区三区精品视频| 一区二区免费电影| 嫩B人妻精品一区二区三区| 亚洲熟女一区二区三区| 亚洲bt加勒比一区二区| 亚洲国产欧美日韩精品一区二区三区|