首頁 web前端 css教學 relative absolute無法衝破的等級問題解決_經驗交流

relative absolute無法衝破的等級問題解決_經驗交流

May 16, 2016 pm 12:05 PM
css

如果我我們設定li為position:relative;設定span為position:absolute;那麼我們會發現無論span的z-index值設定得再高都將永遠在後面父級的下面。

前段時間記得好像是誰在群組裡提出了一個實在是讓大家都覺得很不理解的一個問題: 

<ul>   
<li>第一块</li>   
<li><span>第二块</span></li>   
<li>第三块</li>   
<li>第四块</li>   
<li>第五块</li>   
</ul>
登入後複製

       如果我我們設定li為position:relative ;設定span為position:absolute;那麼我們會發現無論span的z-index值設定得再高都將永遠在後面父級的下面。 

*{margin:0; padding:0; list-style:none;}   
li {width:100px; height:100px; margin:0 5px 0 0; background:#000; float:left; position:relative; z-index:1;}   
li span {width:200px; height:100px; background:#c00; position:absolute; top:0; left:100px; z-index:1000;}
登入後複製

       試發現我們的子級,z-index的值達到了1000的被設定了position:absolut;子級都被檔在了父級的下面。我想了很久,我覺得其根本問題是:設定同樣的position:relative/absolute;同級標籤之間的等級是無法用z-index超越的。我們上面的範例中的第一個li的等級永遠都要小於後一個li的等級,所以我們在li裡的子級身上設定了position:absolute;,給了非常高的z-index值。 

       也許你會這樣來想:只要針對有span的li設定position:relative;不就好了嗎?非常正確。當其它的li都不設定position:relative;那麼我們需要的那個子層級就可以浮在所有的內容之上。但如果實際上,所有的li中都要有span,而且屬性都需要一樣呢?當然我們不大會需要有這樣的效果。但是我們需要有這樣的效果:子級全部都是隱藏的,當有滑鼠反應時出現並且浮在所有的內容之上。我們要知道,這確實是件讓人頭痛的事,因為我們上面見識到了,子級在顯示的時候都被壓在了下一個父級標籤的下面。下面我們來實現這個滑鼠反應的定位效果:  

<ul>   
<li><a href="" title=""><span>第一块</span></a></li>   
<li><a href="" title=""><span>第二块</span></a></li>   
<li><a href="" title=""><span>第三块</span></a></li>   
<li><a href="" title=""><span>第四块</span></a></li>   
<li><a href="" title=""><span>第五块</span></a></li>   
</ul>
登入後複製

我們透過連結的滑鼠事件來完成這個顯示隱藏效果:  

*{margin:0; padding:0; list-style:none;}   
li {height:100px; margin:0 5px 0 0; float:left; width:100px;}   
li a {position:relative; z-index:1; display:block; height:100px; width:100px; background:#000;}   
li a:hover {background:#000000;}   
li span {display:none;}   
li a:hover span {display:block; background:#c00; width:200px; height:200px; position:absolute; top:0; left:100px; z-index:1000;}
登入後複製

我們設定了a為position:relative ;這樣他的子級就會根據父級的左上角為座標原點進行定位了。然後我們設定span的具體形狀以及定位屬性,然後隱藏了他。我們再透過a的偽類:hover使得span被啟動。我們看一下結果,我們會發現,所有應該在上面的現在全都在下面了。那我們要怎麼解決這個難題呢,其實以css想強行突破是不太可能,所以我們反過來想,能不能讓這個沒有被觸發的父級標籤沒有position:relative;屬性,而只是觸發的時候才有級這個父級賦上這樣的值?其實想到這裡基本上已經可以解決所有的問題了:

*{margin:0; padding:0; list-style:none;}   
li {height:100px; margin:0 5px 0 0; float:left; width:100px;}   
li a {display:block; height:100px; width:100px; background:#000;}   
li a:hover {position:relative; z-index:1; }   
li span {display:none;}   
li a:hover span {display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }
登入後複製

       我們只要針對a:hover來設定其屬性為position:relative;就可以了,這樣只有在滑鼠觸發的時候a才會被賦於一個相對定位的屬性。這樣就完成可以解決被其它父級標籤所擋的尷尬了。

當然如果不介意ie5這樣的瀏覽器我們還可以把程式碼再做簡化:  

<ul>   
<li><span>第一块</span></li>   
<li><span>第二块</span></li>   
<li><span>第三块</span></li>   
<li><span>第四块</span></li>   
<li><span>第五块</span></li>   
</ul>
登入後複製

css可以改成這樣: 

*{margin:0; padding:0; list-style:none;}   
li {height:100px; margin:0 5px 0 0; float:left; width:100px; background:#000;}   
li:hover {position:relative; z-index:1;}   
li span {display:none;}   
li:hover span {display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }
登入後複製

補充:
       前些時間發表的《position:relative/absolute無法衝破的等級》一文,講了定位中的等級,這幾天再看的時候發現文中講得併不透徹,沒有直指關鍵。所以特別的在這裡做出補充希望能把position中的等級講得更為清楚、明確一些。 

       我們都知道,position有四個不同的數值,分別為:static | absolute | fixed | relative。在蘇昱的《css2中文手冊》中是這樣解釋的:static:無特殊定位,對象遵循html定位規則; absolute:將對象從文檔流中拖出,使用left,right,top,bottom等屬性進行絕對定位。而其層疊透過z-index屬性定義。此時物件不具有邊距,但仍有補白與邊框; relative:物件不可層疊,但將依據left,right,top,bottom等屬性在正常文件流中偏移位置; fixed:ie5.5及ns6尚不支援此屬性。 

        但是要改變物件的層疊位置所需要的是另一個css屬性:z-index。但是這個z-index並非是無所不能的,他受到了html代碼等級的限制。 z-index只能在同等級的html上反映他的角色。這裡需要宣告的是z-index只有在物件的position值為relative/absolute時才可以使用。下面我們就舉一些例子來解釋等級的特性:  

<p id="box_1">   
<p id="a">这是第一个块</p>   
<p id="b">这是第二个块</p>   
</p>
登入後複製

針對上面的這個html代碼我們還需要寫一段css來定義它:  

#a,#b {position:absolute; width:300px; height:100px; }   
#a {z-index:10; left:0; top:0; background:#000; }   
#b {z-index:1; left:20px; top:20px; background:#c00; }
登入後複製

      這是最普通的普通的這種情況下#a與#b的層疊等級是可以透過z-index來設定的。這是沒問的,那麼什麼樣的情況下就會出現問題呢?我們再看一個實例: 

<p id="box_1">   
<p id="a">这是第一个块</p>   
</p>   
<p id="box_2">   
<p id="b">这是第二个块</p>   
</p>
登入後複製

根據這個結構再寫一個css,要注意這個css中的不同的地方: 

#box_1, #box_2 {position:relative; width:300px; height:100px; margin:10px; background:#ddd;}   
#a, #b {position:absolute; width:100px; height:300px; }   
#a {background:#c00; z-index:100; }   
#b {background:#0c0; z-index:1; left:50px;}
登入後複製

       這時候我們為不論#a這時候我們設定為多大的值,他都無法超過#b,所以說z-index是無法衝破html的等級的,他必需是要同等級的狀態下才可以發揮威力.那麼如何解決這個問題呢?我可以反過來想,堂兄弟之間的順序不能被重組,何不把父輩的等級做一次重組呢?所以我們把#box_1的css中加入一個z-index:100; 在#box_2的css中加入z-index:1;這樣再看一下效果: 

#box_1, #box_2 {position:relative; width:300px; height:100px; margin:10px; background:#ddd;}   
#box_1 {z-index:100;}   
#box_2 {z-index:1;}   
#a, #b {position:absolute; width:100px; height:300px; }   
#a {background:#c00; }   
#b {background:#0c0; left:50px;}
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap日期怎麼驗證 bootstrap日期怎麼驗證 Apr 07, 2025 pm 03:06 PM

在 Bootstrap 中驗證日期,需遵循以下步驟:引入必需的腳本和样式;初始化日期選擇器組件;設置 data-bv-date 屬性以啟用驗證;配置驗證規則(如日期格式、錯誤消息等);集成 Bootstrap 驗證框架,並在表單提交時自動驗證日期輸入。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼看日期 bootstrap怎麼看日期 Apr 07, 2025 pm 03:03 PM

答案:可以使用 Bootstrap 的日期選擇器組件在頁面中查看日期。步驟:引入 Bootstrap 框架。在 HTML 中創建日期選擇器輸入框。 Bootstrap 將自動為選擇器添加樣式。使用 JavaScript 獲取選定的日期。

bootstrap導航欄怎麼設置 bootstrap導航欄怎麼設置 Apr 07, 2025 pm 01:51 PM

Bootstrap 提供了設置導航欄的簡單指南:引入 Bootstrap 庫創建導航欄容器添加品牌標識創建導航鏈接添加其他元素(可選)調整樣式(可選)

See all articles