CSS隱藏的祕密

CSS 0verflow 鼠標 小鄭搞碼事 2017-05-21

一個div元素隱藏的本質是什麼?這篇就說這個問題

CSS隱藏的祕密

一、隱藏一個元素有哪幾種方法呢?

這個問題好回答,只要是做前端的同學都或多或少能回答,下面列出幾個能立馬想到的方法。

1、常見display:none

將元素設置為display:none後,元素在頁面上將徹底消失,元素本來佔有的空間就會被其他元素佔有,也就是將元素設置display:none後,就會導致瀏覽器的重繪和重排。

2、可以設置visibility:hidden

下面舉一個簡單的例子

上下分別有兩個div,代碼是這樣的:

CSS隱藏的祕密

當上面一個div.toptext設置display:none時,頁面展示出來的效果是這樣的:

CSS隱藏的祕密

結論是下面那個div.text已經往上移了。

當上面一個div.toptext設置visibility:hidden時,頁面展示出來的效果是這樣的:

CSS隱藏的祕密

結論是下面那個div.text並沒有上移。

所以用visibility:hidden來設置元素隱藏時,元素本身還是佔位的,也就是說這種方法適用於那些元素隱藏後不希望頁面佈局發生變化的場景。

3、opacity:0

當div元素設置opacity:0時,同樣元素看不到,但是還是點位的,效果和visibility:hidden一樣。

4、設置屬性為0

這個方法算是技巧吧,將div元素的一些屬性設置值為0,當這個div元素有子元素時,加上overflow:hidden,下面這樣:

CSS隱藏的祕密

二、隱藏之後能點擊嗎?

上面我們通過各種方式可以將一個元素隱藏,這裡我們在來證實一下隱藏的實質,給他們綁定一個點擊事件。

CSS隱藏的祕密

像上面這樣子,然而通過結果,我們發現在只有opacity:0時的div可以觸發點擊事件,原因也很簡單,設置元素透明度為0後,元素只是相對於人眼不存在而已,對瀏覽器來說,它還是存在的,所以可以觸發點擊事件。

display:none無法點擊可以理解,因為元素已經消失了,而visibility:hidden元素無法點擊就說明元素也是消失的,只是依然佔據著頁面空間。最後是height:0元素,如果有子元素設置overflow:hidden也無法點擊,元素相當於消失了。

結論真的是這樣嗎?當我給div.none加一行自動觸發點擊事件時:像下面這樣

$(".none").click()

結果發現控制檯輸出

// none clicked

所以前面無法觸發點擊事件的真正原因是鼠標無法真正接觸到被設置成隱藏的元素(指的是大小)。

三、寫到最後的總結:

隱藏一個div元素也許很簡單,但是知道一個元素隱藏的本質切需要我們花點time去思考,這就是一種玩代碼的樂趣。也能學到東西。

小鄭子每天給你推知識,講完理論後期還有各種前端項目實戰,如果這些對您有益,敬請關注。

相關推薦

推薦中...