css控制元素隱藏和顯示(css如何設定隱藏和顯示)

在CSS中很多隱藏元素的方法,但這些方法的可訪問性、佈局、動畫、效能和事件處理的方式有所不同。

  • 動畫: 一些CSS隱藏元素的方法一般是全有或者全無,元素要麼是完全可見,要麼是完全不可見,並且沒有中間狀態。其他的,比如透明度,可以是一個範圍的值,所以在這中間過程插入動畫成為可能;
  • 可訪問性: 下面的每一種方法都會在視覺上隱藏一個元素,但不一樣會真正的去除DOM元素。有一些方式隱藏元素後,螢幕閱讀器仍然能讀取到元素內容;
  • 事件處理: 隱藏元素之後,有些方式元素上的事件仍然能被觸發,而有些方式就會導致元素上的事件觸發無效;
  • 表現: 瀏覽器載入並解析 HTML DOM 和 CSS 物件模型後,頁面將分三個階段呈現:佈局(生成每個元素的幾何位置)、繪製(繪製每個元素的畫素)、組合(以適當的順序放置元素層)。僅導致構圖變化的效果明顯比影響佈局的效果更好。在某些情況下,瀏覽器還可以使用硬體加速。

下面就來看看CSS中隱藏元素的方式,以及每種方式的優缺點。

1. opacity 和 filter: opacity()

opacity: N 和 filter: opacity(N) 屬性可以傳遞一個 0 到 1 之間的數字,或者 0% 和 100% 之間的百分比,對應地表示完全透明和完全不透明。

  • opacity: N:該屬性用來設定元素的透明度;
  • filter: opacity(N) :filter屬性用來設定元素的濾鏡,opacity是濾鏡重的透明度,用來設定元素的透明度。

div {     opacity: 0; } div {     filter: opacity(0%); } 複製程式碼

在現代瀏覽器中,這兩者之間幾乎沒有實際的區別,但如果同時應用多種效果(模糊、對比度、灰度等)時,應該使用 filter 屬性。

注意:opacity 可以設定動畫並提供出色的效能,但頁面上保留完全透明的元素可能會觸發事件。

2. color alpha 透明度

可以將元素的color、background-color 和 border-color 等屬性設定為rgba(0,0,0,0),這樣就會使元素完全透明:

div {     color: rgba(0,0,0,0);   background-color: rgba(0,0,0,0); } 複製程式碼

這三個屬性都是支援設定動畫效果的,需要注意,透明度不能應用於帶有背景圖片的元素,除非它們是使用 linear-gradient 或類似方法生成的。

Alpha 通道可以設定為:

  • transparent:完全透明(中間不能插入動畫);
  • rgba(r, g, b, a):紅色、綠色、藍色和 alpha;
  • hsla(h, s, l, a):色相、飽和度、亮度和 alpha;
  • #RRGGBBAA 或 #RGBA。

3. transform

transform 屬性可以用於元素的平移、縮放、旋轉或傾斜等。可以使用 scale(0) 或者 translate(-9999px, 0px) 屬性值來將元素隱藏:

div {     transform: scale(0); } div {     translate(-9999px, 0px) } 複製程式碼

transform 屬性提供了出色的效能和硬體加速,因為元素被有效地移動到了單獨的層中,並且可以在 2D 或 3D 中進行動畫處理。原始的佈局空間會保持原樣,並不會受影響。使用這種方式隱藏的元素不會觸發任何事件。

4. clip-path

clip-path 屬性可以建立一個剪輯區域,用於確定元素的哪些部分是可見的。使用 clip-path: circle(0) 可以將元素進行隱藏。

div {     clip-path: circle(0); } 複製程式碼

clip-path為新增動畫效果提供了空間,不過它只能在現代瀏覽器中使用。

5. visibility: hidden

visibility 屬性可以設定為 visible 或 hidden 來顯示和隱藏元素。

div {     visibility: hidden; } 複製程式碼

除非使用collapse值,否則元素使用的空間保持不變。

6. display: none

display 可能是最常用的元素隱藏方法; 。當其值為 none 時元素就隱藏了。被隱藏的元素不會在頁面中佔據位置,也不會響應繫結的監聽事件。

div {   display: none; } 複製程式碼

然而,在大多數情況下,display 可能是最糟糕的 CSS 屬性。除非使用 position:absolute 將元素移出文件流,或者採用contain屬性,否則它的隱藏過程無法設定動畫,並將觸發頁面重新佈局。

7. z-index

可以通過將元素的 z-index 屬性設定為負值,以實現元素的隱藏。這實際上就是將元素放在了我們看不到的層。

div {   z-index: -1; } 複製程式碼

8. position

position屬性允許使用top、bottom、left、right 從頁面中的預設位置移動元素。因此,絕對定位的元素可以通過左鍵:-9999px 等值移出螢幕:

div {   position: absolute;   left: -999px; } 複製程式碼

9. 覆蓋另一個元素

通過在元素的上面放置與背景顏色相同的元素,可以在視覺上隱藏一個元素。下面來使用::after偽元素來實現:

div::after {   position: absolute;   content: '';   top: 0;   bottom: 100%;   left: 0;   right: 0;   background-color: #fff; } 複製程式碼

雖然這從技術上講是可以實現的,但是這樣做需要更多的程式碼。

10. 縮小尺寸

可以通過使用width、height、padding、border-width 或 font-size 來縮小元素的尺寸以實現元素的隱藏。可能還需要應用 overflow: hidden; 來確保內容不會溢位。

div {   height: 0;   padding: 0;   overflow: hidden; } 複製程式碼

使用這種形式我們可以在隱藏過程中使用動畫效果,並且他的效能會比 transform 好很多。

分類: