|
|
|
|
|
在網(wǎng)頁(yè)設(shè)計(jì)時(shí),有時(shí)遇到某個(gè)DIV內(nèi)容被其他層覆蓋擋住了,怎么辦呢?我們?nèi)绾巫屇骋籇IV層顯示在上面?其實(shí),使用css屬性 z-index 就能解決問(wèn)題。
設(shè)置z-index讓div層wrap2在上面
html代碼如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>z-index 設(shè)置層上下位置</title>
<style>
.wrap1, .wrap2, .wrap3{width:200px; height:200px;}
.wrap1{
background:#fcc;
position:absolute;
top:80px;
left:200px;
z-index:300; /* 設(shè)置層上下位置 */
}
.wrap2{
background:#cfc;
position:absolute;
top:50px;
left:150px;
z-index:500; /* 設(shè)置層上下位置 */
}
.wrap3{
background:#ccc;
position:absolute;
top:20px;
left:100px;
z-index:100; /* 設(shè)置層上下位置 */
}
</style>
</head>
<body>
<div class="wrap1">
這里是wrap1
</div>
<div class="wrap2">
這里是wrap2
</div>
<div class="wrap3">
這里是wrap3
</div>
</body>
</html>
代碼分析:
1、設(shè)置三層上下位置的屬性是 z-index,數(shù)值小的在下面,數(shù)值大的在上面。
2、css屬性 z-index 兼容所有瀏覽器,不用擔(dān)心在IE8瀏覽器上不起作用。
注意問(wèn)題:
在IE瀏覽器上,即使設(shè)置 z-index 也不能讓div位于下拉菜單控件 select 的上面,同樣也不能位于flash的上面,但是在Firefox、Chrome、360等主流瀏覽器上是沒(méi)有問(wèn)題的。
JavaScript 語(yǔ)法是:
object.style.zIndex="1"
假如div的id是 div1 ,則Javascript就可以這樣寫:
document.getElementById("div1").style.zIndex="1";
注意 zIndex 的大小寫要正確。
z-index 屬性設(shè)置元素的堆疊順序。擁有更高堆疊順序的元素總是會(huì)處于堆疊順序較低的元素的前面。該屬性設(shè)置一個(gè)定位元素沿z 軸的位置,z 軸定義為垂直延伸到顯示區(qū)的軸。如果為正數(shù),則離用戶更近,為負(fù)數(shù)則表示離用戶更遠(yuǎn)。
z-index:auto | number
默認(rèn)值:auto 堆疊順序與父元素相等
number:無(wú)單位的整數(shù)值,可為負(fù)數(shù)
JavaScript 語(yǔ)法: object.style.zIndex="1"
注意問(wèn)題:
z-index 屬性適用于那些被定義了除 position:static 外任意屬性的元素中。即 z-index 僅能在定位元素上奏效(position: absolute | relative | fix)。
stacking context 堆疊上下文
每個(gè)定位元素都?xì)w屬于一個(gè)stacking context(即堆疊上下文,以下統(tǒng)一用堆疊上下文),最初的堆疊上下文(即根部堆疊上下文)是由根元素產(chǎn)生(一般頁(yè)面的根元素是body),而其他的堆疊上下文則由定位元素產(chǎn)生(此定位元素的z-index 被定義一個(gè)非auto 的z-index 值),定位子元素會(huì)以這個(gè)基準(zhǔn)堆疊上下文為參考,用相同的規(guī)則來(lái)決定層疊順序。
觸發(fā)stacking context
1. 定位元素并且定義了z-index為非auto;
2. FF, Safari, Chrome下元素設(shè)置opacity屬性(1除外)會(huì)產(chǎn)生stacking context;(除了Opera)
3. IE6,7下的定位元素,無(wú)論設(shè)置了z-index,或無(wú)論z-index設(shè)置成什么值,都會(huì)產(chǎn)生新的 stacking context。
stack level 堆疊級(jí)別
在一個(gè)堆疊上下文中的每個(gè)box ,都有一個(gè)stack level(即堆疊級(jí)別,以下統(tǒng)一用堆疊級(jí)別),它決定著在同一堆疊上下文中每個(gè)box 在z 軸上的顯示順序。同一堆疊上下文中,堆疊級(jí)別值大的顯示在上,堆疊級(jí)別值小的顯示在下,同一堆疊級(jí)別遵循后來(lái)居上的原則(back-to-front )。不同堆疊上下文中,子元素顯示順序以父級(jí)的堆疊上下文的堆疊級(jí)別來(lái)決定顯示的先后情況。于自身堆疊級(jí)別無(wú)關(guān)。說(shuō)白了就是父元素的堆疊上下文的堆疊級(jí)別決定了子元素堆疊級(jí)別將來(lái)的發(fā)展,父元素堆疊級(jí)別低,則子元素堆疊級(jí)別就必然比父元素堆疊級(jí)別高的子元素堆疊級(jí)別低,即使這個(gè)子元素在他父元素內(nèi)部的堆疊級(jí)別再高也無(wú)濟(jì)于事。
z-index
頁(yè)面中元素在z軸方向上的排列,先由堆疊上下文決定,如果是相同的堆疊上下文那么由堆疊級(jí)別決定(后來(lái)居上原則),如果又是相同的堆疊級(jí)別(同一個(gè)父元素),則由z-index 決定。
這里最容易搞混的就是堆疊級(jí)別和z-index ,大多數(shù)時(shí)候覺(jué)得他們是同一個(gè)東西,而事實(shí)上他們還是有區(qū)別的,個(gè)人認(rèn)為,當(dāng)沒(méi)有z-index 時(shí)候,我們所依靠的準(zhǔn)則是以堆疊級(jí)別的后來(lái)居上的原則來(lái)判定順序。如果在一個(gè)堆疊上下文,一般就是在body 下,倆個(gè)不同的z-index 的時(shí)候,以z-index 大小來(lái)判定上下順序,而我們平時(shí)印象里留意的最多的就是z-index ,所以往往誤解了堆疊級(jí)別和z-index 的區(qū)別。