成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

CSS中用 opacity、visibility、display 屬性將 元素隱藏 的 對(duì)比分析

rollback / 1051人閱讀

摘要:說(shuō)明用來(lái)設(shè)置透明度定義建立布局時(shí)元素生成的顯示框類型用來(lái)設(shè)置元素是否可見(jiàn)??偟膩?lái)說(shuō),使用和屬性,自身的事件不會(huì)觸發(fā),而使用屬性,自身綁定的事件還是會(huì)觸發(fā)的。

說(shuō)明

opacity 用來(lái)設(shè)置透明度
display 定義建立布局時(shí)元素生成的顯示框類型
visibility 用來(lái)設(shè)置元素是否可見(jiàn)。
opacity、visibility、display 這三個(gè)屬性分別取值 0、hidden、none 都能使元素在頁(yè)面上看不見(jiàn),但是他們?cè)诜椒矫婷娑歼€是有區(qū)別的。

是否占據(jù)頁(yè)面空間

舉個(gè)例子



 
  
  
 
 
    

最開(kāi)始的樣子

黃色塊div元素 使用 opacity:0; 時(shí)

黃色塊div元素 使用 visibility:hidden; 時(shí)

黃色塊div元素 使用 display:none; 時(shí)

可以看出,使用 opacity 和 visibility 屬性時(shí),元素還是會(huì)占據(jù)頁(yè)面空間的,而使用 display 屬性時(shí),元素不占據(jù)頁(yè)面空間。

對(duì)子元素的影響

如果子元素什么都不設(shè)置的話,都會(huì)受父元素的影響,和父元素的顯示效果一樣,我們就來(lái)舉例看看,如果子元素設(shè)置的值 和 父元素設(shè)置的值不同會(huì)有什么效果。
例子 (opacity屬性)



 
  
  
 
 
    

例子 (visibility屬性)



 
  
  
 
 
    

例子 (display屬性)



 
  
  
 
 
    

可以看出,使用 opacity 和 display 屬性時(shí),父元素對(duì)子元素的影響很明顯,子元素設(shè)置的 opacity 和 display 屬性是不起作用的,顯示的效果和父元素一樣,而使用 visibility 屬性時(shí),子元素如果設(shè)置為 visibility:visible; 并沒(méi)有受父元素的影響,可以繼續(xù)顯示出來(lái)。

自身綁定的事件是否能繼續(xù)觸發(fā)

這里說(shuō)的觸發(fā)事件,是指用戶人為的觸發(fā)的事件,不包括使用 JavaScript 模擬觸發(fā)的事件。
例子 (opacity屬性)



 
  
  
 
 
    

例子 (visibility屬性)



 
  
  
 
 
    

使用 display:none; 就不用舉例子了,因?yàn)槭褂?display 屬性的話,元素不僅看不見(jiàn),而且也不占據(jù)頁(yè)面空間,所有不會(huì)觸發(fā)事件。

總的來(lái)說(shuō),使用 visibility 和 display 屬性,自身的事件不會(huì)觸發(fā),而使用 opacity 屬性,自身綁定的事件還是會(huì)觸發(fā)的。

是否影響其他元素觸發(fā)事件

例子(opacity屬性)



 
  
  
 
 
      

黃色塊div元素設(shè)置 opacity:0; ,通過(guò)定位,遮擋住了 藍(lán)色的p元素,當(dāng)鼠標(biāo)移到藍(lán)色p元素上時(shí),并沒(méi)有觸發(fā)藍(lán)色p元素的事件。

例子(visibility屬性)



 
  
  
 
 
      

黃色塊div元素設(shè)置 visibility:hidden; ,通過(guò)定位,雖然遮擋住了 藍(lán)色的p元素,但是當(dāng)鼠標(biāo)移到藍(lán)色p元素上時(shí),還是觸發(fā)了藍(lán)色p元素綁定的事件。

和上邊一樣,display 屬性就不舉例子了,因?yàn)樗粫?huì)占據(jù)頁(yè)面空間,也就不會(huì)遮擋其他元素,就不會(huì)影響其他元素觸發(fā)事件了。
所以,visibility 和 display 屬性是不會(huì)影響其他元素觸發(fā)事件的,而 opacity 屬性 如果遮擋住其他元素,其他的元素就不會(huì)觸發(fā)事件了。

是否產(chǎn)生回流(reflow)

回流

當(dāng)頁(yè)面中的一部分(或全部)因?yàn)樵氐囊?guī)模尺寸,布局,隱藏等改變而需要重新構(gòu)建。這就稱為回流(也有人會(huì)把回流叫做是重布局或者重排)。
每個(gè)頁(yè)面至少需要一次回流,就是在頁(yè)面第一次加載的時(shí)候。

dispaly 屬性會(huì)產(chǎn)生回流,而 opacity 和 visibility 屬性不會(huì)產(chǎn)生回流。

是否產(chǎn)生重繪(repaint)

重繪

當(dāng)頁(yè)面中的一些元素需要更新屬性,而這些屬性只是影響元素的外觀,風(fēng)格,而不會(huì)影響布局的時(shí)候,比如background-color。則稱為重繪。

dispaly 和 visibility 屬性會(huì)產(chǎn)生重繪,而 opacity 屬性不一定會(huì)產(chǎn)生重繪。

元素提升為合成層后,transform 和 opacity 不會(huì)觸發(fā) repaint,如果不是合成層,則其依然會(huì)觸發(fā) repaint。
在 Blink 和 WebKit 內(nèi)核的瀏覽器中,對(duì)于應(yīng)用了 transition 或者 animation 的 opacity 元素,瀏覽器會(huì)將渲染層提升為合成層。
也可以使用 translateZ(0) 或者 translate3d(0,0,0) 來(lái)人為地強(qiáng)制性地創(chuàng)建一個(gè)合成層。

舉個(gè)例子




  


    
重繪 repaint

我們可以用 Chrome DevTools 的 Rendering 來(lái)看看,
先打開(kāi) Rendering

把第一個(gè)選項(xiàng)勾選,這個(gè)選項(xiàng)會(huì) 高亮顯示需要重繪的區(qū)域。

看看效果

改改代碼,增加上個(gè) transition




  
  


    
重繪 repaint

再看看效果

加上 transition 后就沒(méi)有 高亮顯示了,這時(shí)候 opacity 不會(huì)觸發(fā)重繪。

實(shí)際上透明度改變后,GPU 在繪畫時(shí)只是簡(jiǎn)單的降低之前已經(jīng)畫好的紋理的 alpha 值來(lái)達(dá)到效果,并不需要整體的重繪。不過(guò)這個(gè)前提是這個(gè)被修改的 opacity 本身必須是一個(gè)圖層,如果圖層下還有其他節(jié)點(diǎn),GPU 也會(huì)將他們透明化。

注意:回流必將引起重繪,而重繪不一定會(huì)引起回流。

是否支持transition

opacity 是支持 transition的,一般淡入淡出的效果就是這樣實(shí)現(xiàn)的。

visibility 也是支持 transition 的。

visibility: 離散步驟,在0到1數(shù)字范圍之內(nèi),0表示“隱藏”,1表示完全“顯示”

visibility : hidden; 可以看成 visibility : 0;
visibility : visible; 可以看成 visibility : 1;

只要 visibility 的值大于0就是顯示的,所以
visibility:visible 過(guò)渡到 visibility:hidden,看上去不是平滑的過(guò)渡,而是進(jìn)行了一個(gè)延時(shí)。



 
  
  
 
 
    

而如果 visibility:hidden 過(guò)渡到 visibility:visible ,則是立即顯示,沒(méi)有延時(shí)。
注意
上面這個(gè)例子只能是從 visibility:visible 過(guò)渡到 visibility:hidden,不能從 visibility:hidden 過(guò)渡到 visibility:visible
當(dāng)元素是 visibility:hidden; 時(shí),自身的事件不會(huì)觸發(fā),所以像上面這個(gè)例子中,直接在藍(lán)色塊div元素 上加 hover 事件,要去將自身的 visibility:hidden 過(guò)渡到 visibility:visible 是不會(huì)起作用的。
但是在其他元素上加事件,來(lái)將該元素的 visibility:hidden 過(guò)渡到 visibility:visible 是可以的,看例子。



 
  
  
 
 
        

display 不僅不支持transition,它還會(huì)使 transition 失效。舉個(gè)例子看看



 
  
  
 
 
    

可以看出用了display,支持 transition 的 opacity 屬性也沒(méi)起作用。

這是因?yàn)?b>display:none; 的元素,是不會(huì)渲染在頁(yè)面上的,而 transition 要起作用,元素必須是已經(jīng)渲染在頁(yè)面上的元素,我們可以再來(lái)看個(gè)例子



 
  
  
 
 
    渲染到頁(yè)面
    

給 span 元素綁定事件,點(diǎn)擊它的時(shí)候,才會(huì)把黃色塊div元素,渲染到DOM樹(shù)上,然后改變黃色塊div元素的 opacity 屬性,opacity 是支持 transition 的,而在這段代碼中,并沒(méi)有起作用。
更詳細(xì)的關(guān)于 transition 是否成功 的解讀看這里
渲染樹(shù)決定 transtion 能否成功

要想解決這個(gè)問(wèn)題,我們可以這樣做。
1、把 display 屬性換成 visibility 屬性



 
  
  
 
 
    

2、如果必須要用 display 屬性,我們可以加上定時(shí)器來(lái)解決這個(gè)問(wèn)題



 
  
  
 
 
    

總結(jié)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/113407.html

相關(guān)文章

  • CSS中用 opacity、visibility、display 屬性 元素隱藏 對(duì)比分析

    摘要:說(shuō)明用來(lái)設(shè)置透明度定義建立布局時(shí)元素生成的顯示框類型用來(lái)設(shè)置元素是否可見(jiàn)??偟膩?lái)說(shuō),使用和屬性,自身的事件不會(huì)觸發(fā),而使用屬性,自身綁定的事件還是會(huì)觸發(fā)的。 說(shuō)明 opacity 用來(lái)設(shè)置透明度 display 定義建立布局時(shí)元素生成的顯示框類型 visibility 用來(lái)設(shè)置元素是否可見(jiàn)。 opacity、visibility、display 這三個(gè)屬性分別取值 0...

    yanest 評(píng)論0 收藏0
  • CSS世界》筆記五:CSS層疊規(guī)則及元素隱藏

    摘要:元素層疊順序補(bǔ)充說(shuō)明位于最下面的特指層疊上下文元素后面會(huì)詳解的邊框和背景色。界中可能有其他的層疊結(jié)界,而自身也可能處于其他層疊結(jié)界中。 上一篇:《CSS世界》筆記四:流的保護(hù)與破壞 寫在前面 《CSS世界》這本書還剩六章,但是這本書的精華部分主要是前面的內(nèi)容,這里僅把后面章節(jié)相對(duì)重要的內(nèi)容以博客展示,想著了解更多的小伙伴還是去閱讀原文的好,畢竟三百多頁(yè)的一本書并不是小小幾篇博客能完全說(shuō)...

    godruoyi 評(píng)論0 收藏0
  • CSS隱藏元素幾種方法

    摘要:使用這種方法來(lái)隱藏元素,是否可以觸發(fā)事件要根據(jù)具體的情況來(lái)分析。其他的方式只作了解即可,并不推薦使用它們來(lái)隱藏元素,它們的真正用途應(yīng)該不在隱藏元素,而是通過(guò)了解這些方法的特點(diǎn),挖掘出其真正的使用場(chǎng)景 幾種方法的簡(jiǎn)單介紹 display:none 最常用的隱藏元素的方法 .hidden{ display:none } 將元素設(shè)置為display:none后,元素在頁(yè)面上將徹底...

    vvpvvp 評(píng)論0 收藏0
  • CSS隱藏元素總結(jié)

    摘要:本文旨在加深對(duì)隱藏元素方法的理解,資料均來(lái)源于網(wǎng)絡(luò),文章結(jié)尾附有參考鏈接。如果祖先元素設(shè)置了該樣式,該元素及其子孫元素都將隱藏,并且沒(méi)有其它讓其子孫元素恢復(fù)顯示的辦法。四和組合溢出隱藏,也就是說(shuō)盒子以外的元素都會(huì)隱藏掉。 本文旨在加深對(duì)css隱藏元素方法的理解,資料均來(lái)源于網(wǎng)絡(luò),文章結(jié)尾附有參考鏈接。 一、CSS中隱藏元素的常用方法有以下幾種: 1. {display: none; /...

    testbird 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<