CSS中 opacity的設定影響了index(層數)的改變

來源:互聯網
上載者:User

標籤:頁面   取消   重疊   city   leo   檔案   覆蓋   microsoft   add   

在使用 opacity 屬性來實現頁面整體透明的時候,發現了一個問題。如果兩個層發生了重疊,使用了 opacity 屬性並且屬性值小於1的層,會覆蓋掉後面的層。於是動手做了個實驗,來驗證 opacity 的層次。 


網頁中的層疊規律是這樣的:如果兩個層都沒有定義 position 屬性為 absolute 或者 relative 屬性,哪個層的HTML代碼放在後面,哪個層就顯示在上面。如果指定了 position 屬性,並且設定了 z-index 屬性,誰的值大,誰就在上面。 


Opacity 屬性引發的層疊問題 
而對於沒有啟用 z-index 的普通層來說,如果那個層使用了屬性值小於1的 opacity 屬性,哪個層就會顯示在上面。我們做一個Demo。代碼如下: 




<html> 
<head> 
        <title >帶有 opacity 的層疊問題</title> 
        <style> 
        html{padding:40px;} 
        .dd{width:100px;height:100px;} 
        #a{background:red;} 
        #b{background:blue;margin-left:20px;margin-top:-80px;} 
        #c{background:green;margin-left:40px;margin-top:-80px;} 
        </style> 
</head> 
<body> 
        <div id="a"></div> 
        <div id="b"></div> 
        <div id="c"></div> 
</body> 
</html> 

儲存為 html 檔案開啟之後,可以看到正常的次序 
 

                  正常的層疊 


這時候,我們為 #a 加上屬性 opacity:0.9 神奇的事情發生了,它覆蓋了另外兩個層: 
 

                  加上小於1的 opacity 之後的層疊 


只有當為另一個層(例如:#c)也設定一個小於1的opacity值(例如:0.8)之後,後面的 #c 才能安裝正常的規則覆蓋在 #a 上面。 
 

                  同時為另一個層賦值 opacity 


這樣,增加了小於1的 opacity 屬性的層,升高了一個層次。至於裡面的科學原理,我沒有想明白,或許也可能是一個小BUG。但是有時候這種情況是我們不希望發生的。 


通過定義 position 的屬性來解決問題 
那麼如何來解決這個問題呢?前面也說過了,正常的情況下,指定了 position 並且指定了 z-index 值的層,擁有比普通層更高的層次,那麼指定 opacity 的層和指定了 position 的層相比呢?我們對 #b 加上 position:relative 看看。這時候的樣式代碼如下: 


#a{background:red;opacity:0.9;} 
#b{background:blue;margin-left:20px;margin-top:-80px;position:relative;} 
#c{background:green;margin-left:40px;margin-top:-80px;opacity:0.8;} 
儲存重新整理後,看到效果是這樣的: 
 

                  對層使用了 position 屬性之後的層疊效果 


也就是說,對層使用 position 屬性的 relative 之後,可以使其層次和 opacity 相同,這樣之後,按照正常的排序進行層疊顯示(在後面的實驗中,我對 absolute 屬性值也做了測試,結果和 relative 屬性值表現的相同)。當我們取消了 #c 的 opacity 屬性之後,我們可以看到,#c 被排在了最下面。 
 

                 對底層取消 opacity 屬性之後的效果 


還沒有完,之前只是對 #b 啟用了 position:relative 屬性,還沒有使用 z-index。我們對 #b 進行了 z-index 的設定(例如:100),很顯然的,#b 成為了最頂層。 
 

                  對中介層設定 z-index 的效果 


層疊問題總結 
使用了 position 屬性值為 absolute、relative 的層,將會比普通層更高層次。使用了小於1的 opacity 屬性的層,也比普通層更高層次並且和指定 position 的層同層,但是不支援 z-index 屬性,所以指定 position 的層,可以使用 z-index 屬性,來覆蓋帶有小於1的 opacity 屬性的層。” 

轉自: 小前端學習 http://www.cnblogs.com/leolovexx/p/5440061.html#3514684

CSS中 opacity的設定影響了index(層數)的改變

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.