天我們說下HTML標簽中的div、span和圖像標簽。其實div和span是上一節就要講的標簽內容,但是當時時間比較晚了,就沒有說。
<div>和<span>是沒有語義的,就是一個盒子,用來裝內容的。這和android開發中的font很像,也是一個個的盒子,將內部包起來。可以這么來寫:
<div>這是頭部</div> <span>我是內容</span> 兩個都是雙標簽。
div是division的縮寫,表示分割分區(豎著); span意為跨度、跨距(橫著)。div單獨占一行,實例如下: 理解為一個大盒子
看下HTML代碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
<div>我是一個div標簽,我自己獨占一行</div>
<div>我是一個div標簽,我自己獨占一行</div>
</body>
</html>
可以看到,寫了兩個<div>標簽,一個占一行
<span>一行可以放很多個標簽,理解為 小盒子,舉例如下:
代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
<div>我是一個div標簽,我自己獨占一行</div>
<div>我是一個div標簽,我自己獨占一行</div>
<span>我是一個span標簽</span>
<span>我是一個span標簽</span>
</body>
</html>
效果如下:
接下來說一個很重要的標簽---圖像標簽
HTML標簽中,使用<img>標簽用于定義HTML頁面中的圖像,是一個單標簽。img是image的縮寫,src是<img>標簽的必須屬性,用于指定圖像文件的路徑和文件名。屬性,指的是屬于這個圖像標簽的特性。對于圖片,需要將圖片和html文件放到一起。
代碼圖示:
代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
<img src="HTML5.jpeg"/><br />
<!-- <img src="HTML5.jpeg"> -->
</body>
</html>
效果如下:
如果我們再加入同樣的一行代碼,看看顯示(加上換行)
代碼如圖:
代碼內容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
<img src="HTML5.jpeg"/><br />
<img src="HTML5.jpeg">
</body>
</html>
效果如下:
可以看到<img src="xxx"> 后面不寫 / 也是可以的,<br />后面不寫斜杠也行,即使都是用單個的情況。src是source的縮寫。
接下來說下圖像標簽的其他屬性:
alt 替換文本,圖像不能顯示的文字
title 文本,提示文本,鼠標放到圖像上,顯示的文字,類似于 hover
width 像素,設置圖像的寬度(和android中的差不多)
height 像素,設置圖像的高度(和android中的差不多)
border 像素,設置圖像的邊框粗細
具體我們看下實例:
代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
<img src="HTML5.jpeg" />
<br />
alt替換文本,圖像顯示不出來的時候用文本代替<br />
<img src="HTML5.jpeg" alt="圖像不展示時,使用文本展示">
</body>
</html>
看下展示效果:
發現 alt后替換文本并沒有起作用,圖像還是顯示的。這是為什么呢?
其實原因很簡單,就是先判斷src后的圖像是否存在,如果存在,就展示圖像,如果不存在,就展示文本。上面語句中,圖像的地址是正確的,所以會展示圖像??梢詫D像地址進行修改。我們再試下
代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
<img src="HTML5.jpeg" />
<br />
alt替換文本,圖像顯示不出來的時候用文本代替<br />
<img src="HTML51.jpeg" alt="圖像不展示時,使用文本展示">
</body>
</html>
我們來看看效果,alt后的文本是否能展示
說明我們的測試是正確的。
2.title 提示文本
先看效果:
看下代碼和代碼展示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>20210819_六</title>
</head>
<body>
title提示文本<br />
<img src="HTML5.jpeg" title="鼠標hover上,就展示了" />
<br />
</body>
</html>
好的,今天先到這里,一會我們繼續。
前在項目的過程中遇到了一個問題,某個 div 希望始終顯示在最上面,而在之后的元素都顯示在它之下,當時設置了 z-index 也沒有效果,不知道什么原因,因此找了一下 CSS 相關資料,解決了這個問題的同時,也學習了很多知識,特此和大家分享一下。
屏幕是一個二維平面,然而 HTML 元素卻是排列在三維坐標系中, x 為水平方向, y 為垂直方向, z為屏幕由內向外方向,我們在看屏幕的時候是沿著 z 軸方向從外向內的。由此,元素在用戶視角就形成了層疊的關系,某個元素可能覆蓋了其他元素也可能被其他元素覆蓋;
這里有幾個重要的概念:層疊上下文 (堆疊上下文, Stacking Context)、層疊等級 (層疊水平, Stacking Level)、層疊順序 (層疊次序, 堆疊順序, Stacking Order)、z-index、BFC(塊級格式化上下文,Block Formatting Context),這些概念共同決定了你看到元素的位置,下面我們就圍繞著這幾個概念來一起學習一下。
聲明:
1. 層疊上下文 (Stacking Context)
層疊上下文 (堆疊上下文, Stacking Context),是 HTML 中一個三維的概念。在 CSS2.1 規范中,每個元素的位置是三維的,當元素發生層疊,這時它可能覆蓋了其他元素或者被其他元素覆蓋;排在 z 軸越靠上的位置,距離屏幕觀察者越近。
文章 <關于z-index 那些你不知道的事> 有一個很好的比喻,這里引用一下;
可以想象一張桌子,上面有一堆物品,這張桌子就代表著一個層疊上下文。如果在第一張桌子旁還有第二張桌子,那第二張桌子就代表著另一個層疊上下文。現在想象在第一張桌子上有四個小方塊,他們都直接放在桌子上。在這四個小方塊之上有一片玻璃,而在玻璃片上有一盤水果。這些方塊、玻璃片、水果盤,各自都代表著層疊上下文中一個不同的層疊層,而這個層疊上下文就是桌子。
每一個網頁都像一個房間,這個房間就是 <html></html>,其他層疊上下文就像這個房間里的桌子,HTML 標簽中的一切都被置于這個房間中。
當給一個元素的 position 值賦為 fixed 或 sticky 值時,你就創建了一個新的層疊上下文,其中有著獨立于頁面上其他層疊上下文和層疊層的層疊層,這就相當于你把另一張桌子帶到了房間里。
層疊上下文 1 (Stacking Context 1)是由文檔根元素形成的, 層疊上下文 2 和 3 (Stacking Context 2, 3) 都是層疊上下文 1 (Stacking Context 1) 上的層疊層。他們各自也都形成了新的層疊上下文,其中包含著新的層疊上下文。
在層疊上下文中,其子元素按照上面解釋的規則進行層疊。形成層疊上下文的方法有:
總結:
2. 層疊等級 (Stacking Level)
層疊等級 (層疊水平, Stacking Level) 決定了在同一個層疊上下文中,元素在 z 軸上的顯示的順序;
對于普通元素的層疊水平探討只局限于在當前層疊上下文中:
層疊上下文本身是一個強力的「層疊結界」,普通的元素水平是無法突破這個結界和結界外的元素去較量層疊水平的。
— CSS 世界
另外,層疊等級并不一定由 z-index 決定,只有定位元素的層疊等級才由 z-index 決定,其他類型元素的層疊等級由層疊順序、他們在 HTML 中出現的順序、他們的祖先元素的層疊等級一同決定,詳細的規則見下面層疊順序的介紹。
3. z-index
在 CSS 2.1 中, 所有的盒模型元素都處于三維坐標系中。除了我們常用的橫坐標和縱坐標, 盒模型元素還可以沿著「z 軸」層疊擺放,當他們相互覆蓋時,z 軸順序就變得十分重要。
-- CSS 2.1 Section 9.9.1 - Layered presentation
z-index 只適用于定位的元素,對非定位元素無效,它可以被設置為正整數、負整數、 0、 auto,如果一個定位元素沒有設置 z-index,那么默認為 auto;
元素的 z-index 值只在同一個層疊上下文中有意義。如果父級層疊上下文的層疊等級低于另一個層疊上下文的,那么它 z-index 設的再高也沒用。所以如果你遇到 z-index 值設了很大,但是不起作用的話,就去看看它的父級層疊上下文是否被其他層疊上下文蓋住了。
4. 層疊順序 (Stacking Order)
層疊順序 (層疊次序, 堆疊順序, Stacking Order) 描述的是元素在同一個層疊上下文中的順序規則(之前的層疊上下文和層疊等級是概念),從層疊的底部開始,共有七種層疊順序:
第 7 級順序的元素會顯示在之前順序元素的上方,也就是看起來覆蓋了更低級的元素:
除層疊順序優先級規則之外,還有一條后來居上規則:同一個層疊順序的元素按照在 HTML 里出現的順序依次層疊。這兩個規則共同決定瀏覽器元素在文檔中是如何層疊的。
5. 文檔流 (Document Flow)
5.1 常規流 (Normal flow)
5.2 浮動 (Floats)
5.3 絕對定位 (Absolute positioning)
6. BFC (Block Formatting Context)
6.1 什么是 BFC
BFC (Block Formatting Context) 塊級格式化上下文,是用于布局塊級盒子的一塊渲染區域,相對應的還有 IFC(Inline Formatting Context)內聯格式化上下文,不是本文重點,讀者可以自行查閱相關知識。
BFC 是 Web 頁面 CSS 視覺渲染的一部分,用于決定塊盒子的布局及浮動相互影響范圍的一個區域。
— MDN - 塊格式化上下文
一個 BFC 的范圍包含創建該上下文元素的所有子元素,但不包括創建了新 BFC 的子元素的內部元素。這從另一方角度說明,一個元素不能同時存在于兩個 BFC 中。因為如果一個元素能夠同時處于兩個 BFC 中,那么就意味著這個元素能與兩個 BFC 中的元素發生作用,就違反了 BFC 的隔離作用。
觸發 BFC 的方式有:
注意: display:table 也可以生成 BFC 的原因在于 Table 會默認生成一個匿名的 table-cell,是這個匿名的 table-cell 生成了 BFC。
6.2 用法
1. 阻止相鄰元素的 margin 合并
屬于同一個 BFC 的兩個相鄰塊級子元素的上下 margin 會發生重疊,(設置 writing-mode:tb-rl時,水平 margin 會發生重疊)。所以當兩個相鄰塊級子元素分屬于不同的 BFC 時可以阻止 margin 重疊。可以給任一個相鄰塊級盒子的外面包一個 div,通過改變此 div 的屬性使兩個原盒子分屬于兩個不同的 BFC,以此來阻止 margin 重疊。
代碼和預覽參見:Codepen - 使用BFC阻止margin合并:https://codepen.io/SHERlocked93/pen/eVOevN
2. 阻止元素被浮動元素覆蓋
一個正常文檔流的塊級元素可能被一個 float 元素覆蓋,擠占正常文檔流,因此可以設置一個元素的 float、 display、 position 值等方式觸發 BFC,以阻止被浮動盒子覆蓋。
代碼和預覽參見:Codepen - 使用BFC阻止元素被浮動元素覆蓋:https://codepen.io/SHERlocked93/pen/pazdzB
3. 包含浮動元素
通過改變包含浮動子元素的父盒子的屬性值,觸發 BFC,以此來包含子元素的浮動盒子。
代碼和預覽參見:Codepen - 使用BFC包含浮動元素:https://codepen.io/SHERlocked93/pen/OQLOqG
7. 實戰
下面一起來看幾個例子實戰一下,幫助理解。
7.1 普通情況
三個 relative 定位的 div 塊中各有 absolute 的不同顏色的 span.red、 span.green、 span.blue,它們都設置了 position:absolute;
代碼和預覽參見:Codepen - 普通情況:https://codepen.io/SHERlocked93/pen/aaPord
那么當沒有元素包含 z-index 屬性時,這個例子中的元素按照如下順序層疊(從底到頂順序):
紅綠藍都屬于 z-index 為 auto 的定位元素,因此按照 7 層層疊順序規則來說同屬于層疊順序第 6 級,所以按 HTML 中的出現順序層疊:紅->綠->藍
7.2 在相同層疊上下文的父元素內的情況
紅綠位于一個 div.first-box 下,藍位于 div.second-box 下,紅綠藍都設置了 position:absolute, first-box 與 second-box 都設置了 position:relative;
代碼和預覽參見:Codepen - 父元素不同但都位于根元素下:https://codepen.io/SHERlocked93/pen/RYENBw
這個例子中,紅藍綠元素的父元素 first-box 與 second-box 都沒有生成新的層疊上下文,都屬于根層疊上下文中的元素,且都是層疊順序第 6 級,所以按 HTML 中的出現順序層疊:紅->綠->藍
7.3 給子元素增加 z-index
紅綠位于一個 div.first-box 下,藍黃位于 div.second-box 下,紅綠藍都設置了 position:absolute,如果這時給綠加一個屬性 z-index:1,那么此時 .green 位于最上面;
如果再在 .second-box 下 .green 后加一個絕對定位的 span.gold,設置 z-index:-1,那么它將位于紅綠藍的下面;
代碼和預覽參見:Codepen - 設置了z-index:https://codepen.io/SHERlocked93/pen/gdZOrK
這個例子中,紅藍綠黃元素的父元素中都沒有生成新的層疊上下文,都屬于根層疊上下文中的元素
所以這個例子中的從底到高顯示的順序就是:黃->紅->藍->綠
7.4 在不同層疊上下文的父元素內的情況
紅綠位于一個 div.first-box 下,藍位于 div.second-box 下,紅綠藍都設置了 position:absolute,如果 first-box 的 z-index 設置的比 second-box 的大,那么此時無論藍的 z-index 設置的多大 z-index:999,藍都位于紅綠的下面;如果我們只更改紅綠的 z-index 值,由于這兩個元素都在父元素 first-box 產生的層疊上下文中,此時誰的 z-index 值大,誰在上面;
代碼和預覽參見:Codepen - 不同層疊上下文的父元素:https://codepen.io/SHERlocked93/pen/gdZbOJ
這個例子中,紅綠藍都屬于設置了 z-index 的定位元素,不過他們的父元素創建了新的層疊上下文;
所以這個例子中從低到到顯示的順序:藍->紅->綠
(我遇到的的情況就屬于這個例子類似情形)
7.5 給子元素設置 opacity
紅綠位于 div.first-box 下,藍位于 div.second-box 下,紅綠藍都設置了 position:absolute,綠設置了 z-index:1,那么此時綠位于紅藍的最上面;
如果此時給 first-box 設置 opacity:.99,這時無論紅綠的 z-index 設置的多大 z-index:999,藍都位于紅綠的上面;
如果再在 .second-box 下 .green 后加一個 span.gold,設置 z-index:-1,那么它將位于紅綠藍的下面;
代碼和預覽參見:Codepen - opacity的影響:https://codepen.io/SHERlocked93/pen/GXPRWB
之前已經介紹了,設置 opacity 也可以形成層疊上下文,因此:
所以這個例子中從低到到顯示的順序:黃->紅->綠->藍
關注微信公眾號:安徽思恒信息科技有限公司,了解更多技術內容……
iv cssz-index層重疊順序
div層、span層等html標簽層重疊順序樣式z-index,平時CSS使用較少,但也會難免會碰到CSS z-index使用。
從基礎語法到應用案例教程講解學習z-index。
z-index 跟具體數字
div{
z-index:100
}
注意:z-index的數值不跟單位。
z-index的數字越高越靠前,并且值必須為整數和正數(正數的整數)。
z-index在使用絕對定位 position:absolute屬性條件下使用才能使用。通常CSS讓不同的對象盒子以不同順序重疊排列,CSS就是要z-index樣式屬性。
為了方便觀察,設置3個DIV盒子,分別設置不同css背景顏色,設置相同CSS高度、CSS寬度。分別設置背景顏色)為黑色、紅色、藍色。CSS width為300px,css height為100px。
css代碼(沒加z-index屬性)
<style>
.div css5 {
position: relative;
}
.div css5-1,
.div css5-2,
.div css5-3 {
width: 300px;
height: 100px;
position: absolute;
}
.divcss5-1 {
background: #000;/* 黑色*/
left: 10px;
top: 10px
}
.divcss5-2 {
background: #F00;/* 紅色*/
left: 20px;
top: 20px
}
.divcss5-3 {
background: #00F;/* 藍色*/
left: 30px;
top: 30px
}
</style>
CSS代碼(加上z-index屬性后) :
<style>
.div css5 {
position: relative;
}
.div css5-1,
.div css5-2,
.div css5-3 {
width: 200px;
height: 100px;
position: absolute;
}
.div css5-1 {
z-index: 10;
background: #000;/* 黑色*/
left: 10px;
top: 10px
}
.div css5-2 {
z-index: 20;
background: #F00;/* 紅色*/
left: 20px;
top: 20px
}
.div css5-3 {
z-index: 15;
background: #00F;/* 藍色*/
left: 30px;
top: 30px
}
</style>
html代碼
<div class="divcss5-1"></div>
<div class="divcss5-2"></div>
<div class="divcss5-3"></div>
沒加的效果:
加上z-index屬性效果:
三個盒子均都使用了絕對定位屬性position樣式,并且設置相同的高度和寬度樣式。為了便于觀察CSS使用left、right屬性并賦予不同值,讓其錯落有致。
為可以看見第一個盒子z-index:10,所以重疊在最下層,而第二個盒子z-index:20,值最大所以最上層重疊,第三個盒子設置z-index:15,居中。
本文基于CSS基礎,介紹了如何使用z-index重疊順序樣式,在實際DIV+CSS布局時候CSS需要絕對定位樣式,并且可以使用left、right進行定位,通過不同z-index值實現層重疊順序排列。代碼很簡單,希望能夠幫助你學習。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。