整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          使用CSS隱藏頁面元素的幾種方法,你知道它們的具體區別嗎?


          一說起隱藏HTML頁面上的元素,很多人第一反應就是設置元素的css屬性display:none;值,這是一種最常見的隱藏頁面元素方法。本篇文章我們就一起看看使用CSS隱藏頁面元素的方法,以及它們的區別。

          本篇文章中的例子直接放到github地址中,感興趣的同學可以自取。

          https://github.com/zhouxiongking/article-pages/blob/master/articles/hideElement/hideElement.html

          CSS

          方法1-display:none

          正如上文說的一樣,最簡單也最粗暴的方法就是設置元素的display屬性為none;

          display:none;

          設置為display:none;的元素將不會再占用頁面空間,其占用的空間會被其他元素所占有,從而會引起瀏覽器的重排和重匯。

          方法2-visibility: hidden

          另外一種方法是設置元素的visibility屬性為hidden。

          visibility: hidden

          這種做法雖然能夠隱藏元素,但是該元素仍會占用頁面空間,因此只會導致瀏覽器的重匯而不會引起重排。

          如果希望元素隱藏后不會引起頁面布局的變化,則推薦使用visibility:hidden;方式。

          方法3-opacity:0

          設置元素透明度opacity屬性為0,也可以隱藏頁面元素。

          opacity:0

          在呈現上與visibility:hidden;方式一樣,同樣會占據頁面空間。

          差異性-頁面布局

          對頁面布局的影響主要是看是否會引起瀏覽器的重匯和重排,對應的差異如下圖所示。

          頁面布局差異

          差異性-事件綁定

          • display:none;的元素會直接從頁面上消失,因此在該元素上綁定的事件不會生效。

          • visibility: hidden;的元素不會觸發綁定的事件。

          • opacity:0; 的元素會觸發綁定的事件,例如點擊會觸發click函數。

          我們可以通過以下的例子來看看。

          首先我們定義兩個div,分別設置為visibility: hidden;和opacity:0,在兩個div上分別綁定一個click事件。

          定義div元素

          綁定的事件

          當我們在兩個元素都進行點擊時,可以在控制臺看到如下輸出結果。

          結果

          從上述結果可以看出和上述結論一致。

          差異性-動畫屬性

          • display:none;的元素會直接從頁面消失,因此定義transition效果完全無效。

          • visibility:hidden;的元素會在transition設置的時間內消失,但是沒有動畫效果。

          • opacity:0;的元素可以和正常元素一樣,從頁面以動畫效果消失。

          同樣我們可以通過以下這個例子來看看。

          首先,我們定義兩個div,并設置其transition屬性。

          div元素

          定義transition效果

          我們通過將鼠標移至元素上,可以看到兩者的差異,從而驗證了上述結論的正確性。

          結束語

          本篇文章主要講解了使用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 好很多。


          分類:

          2021 年最后一天,疫情還沒有完全結束,武漢市政府也取消了跨年活動。今晚,就連地鐵都提前到 9 點關閉,大家都在家里跨年。這不,我也在家里跨年。不過我并沒有看晚會,而是整理了一篇前端小技巧,算是給自己 2021年一個小小的總結。


          正文

          用 CSS 隱藏元素有很多種方法,這里介紹 3 種常見的。

          opacity: 0

          特點是【看不見,占空間,摸得著

          • 元素隱藏
          • 不改變布局
          • 如果綁定了事件,點擊該區域,是可以觸發事件的

          visibility: hidden

          特點是【看不見,占空間,摸不著

          • 元素隱藏
          • 不改變布局
          • 如果綁定了事件,點擊該區域,是無法觸發事件的

          display: none

          特點是【看不見,不占空間,摸不著

          • 元素隱藏
          • 改變布局
          • 如果綁定了事件,點擊該區域,是無法觸發事件的

          接下來,我們來編寫代碼驗證一下。首先寫入三個方塊,對中間的橙色方塊添加點擊事件。代碼及頁面效果如下所示:

          <!DOCTYPE html>
          <html>
              <head>
                  <style type="text/css">
                      .box {width: 200px;height: 50px;}
                      .red {background-color: red;}
                      .orange {background-color: orange;}
                      .yellow {background-color: yellow;}
                  </style>
              </head>
          
              <body>
                  <div>
                      <div class='box red'></div>
                      <div class='box orange' id="btn"></div>
                      <div class='box yellow'></div>
                  </div>
                  <script type="text/javascript">
                      document.getElementById("btn").onclick = function() {
                          alert('觸發點擊操作 0.0');
                      }
                  </script>
              </body>
          </html>

          image

          image

          image

          opacity: 0

          對中間橙色方塊添加 opacity: 0 樣式,代碼及效果如下:

          • 元素隱藏
          • 不改變布局
          • 如果綁定了事件,點擊該區域,是可以觸發事件的
          <!DOCTYPE html>
          <html>
              <head>
                  <style type="text/css">
                      .box {width: 200px;height: 50px;}
                      .red {background-color: red;}
                      .orange {background-color: orange;}
                      .yellow {background-color: yellow;}
                      .opacity {opacity: 0}
                  </style>
              </head>
          
              <body>
                  <div>
                      <div class='box red'></div>
                      <div class='box orange opacity' id="btn"></div>
                      <div class='box yellow'></div>
                  </div>
                  <script type="text/javascript">
                      document.getElementById("btn").onclick = function() {
                          alert('觸發點擊操作 0.0');
                      }
                  </script>
              </body>
          </html>

          image

          image

          image

          visibility: hidden

          對中間橙色方塊添加 visibility: hidden 樣式,代碼及效果如下:

          • 元素隱藏
          • 不改變布局
          • 如果綁定了事件,點擊該區域,是無法觸發事件的
          <!DOCTYPE html>
          <html>
              <head>
                  <style type="text/css">
                      .box {width: 200px;height: 50px;}
                      .red {background-color: red;}
                      .orange {background-color: orange;}
                      .yellow {background-color: yellow;}
                      .visibility {visibility: hidden}
                  </style>
              </head>
          
              <body>
                  <div>
                      <div class='box red'></div>
                      <div class='box orange visibility' id="btn"></div>
                      <div class='box yellow'></div>
                  </div>
                  <script type="text/javascript">
                      document.getElementById("btn").onclick = function() {
                          alert('觸發點擊操作 0.0');
                      }
                  </script>
              </body>
          </html>

          image

          image

          image

          display: none

          對中間橙色方塊添加 display: none 樣式,代碼及效果如下:

          • 元素隱藏
          • 改變布局
          • 如果綁定了事件,點擊該區域,是無法觸發事件的
          <!DOCTYPE html>
          <html>
              <head>
                  <style type="text/css">
                      .box {width: 200px;height: 50px;}
                      .red {background-color: red;}
                      .orange {background-color: orange;}
                      .yellow {background-color: yellow;}
                      .display {display: none}
                  </style>
              </head>
          
              <body>
                  <div>
                      <div class='box red'></div>
                      <div class='box orange display' id="btn"></div>
                      <div class='box yellow'></div>
                  </div>
                  <script type="text/javascript">
                      document.getElementById("btn").onclick = function() {
                          alert('觸發點擊操作 0.0');
                      }
                  </script>
              </body>
          </html>

          image

          image


          結尾

          本人 2021 年度成就總結:

          1. 學術方面,憑借個人努力,在核酸檢測領域產出多份數據真實詳盡的報告。
          2. 健康方面,保證膳食纖維攝入,具體表現為每日堅持吃瓜,吃好瓜,吃大瓜。
          3. 商業方面,與各大平臺合作,全面參與投資 618、雙 11、雙 12 等千億級重大項目。
          4. 環保方面,股票基金一片綠,綠水青山就是金山銀山。在廢物利用領域更是成績斐然:自己作為廢物,常常被別人利用。
          5. 運動方面,專注于水上項目,在摸魚、劃水等小項上有突出表現。

          最后,祝大家元旦快樂~


          主站蜘蛛池模板: tom影院亚洲国产一区二区| 国产亚洲一区区二区在线 | 精品一区二区久久久久久久网精 | 国产成人精品一区二区三区免费 | 日韩内射美女人妻一区二区三区| 天天看高清无码一区二区三区 | 一区二区免费国产在线观看| 国产精品综合一区二区| 精品一区二区三区免费毛片| 国产成人精品一区在线| 亚洲啪啪综合AV一区| 无码精品国产一区二区三区免费| 亚洲国产视频一区| 美女福利视频一区二区| 国产精品视频一区二区三区无码| 在线中文字幕一区| 无码AⅤ精品一区二区三区| 成人区人妻精品一区二区不卡视频| 熟妇人妻AV无码一区二区三区| 国产精品一级香蕉一区| 丰满人妻一区二区三区视频53| 亚洲国产AV一区二区三区四区| 一区二区三区午夜| 亚洲国产高清在线精品一区| 秋霞鲁丝片一区二区三区| 一区二区三区四区在线播放| 免费萌白酱国产一区二区| 91video国产一区| 美女视频在线一区二区三区| 黑人一区二区三区中文字幕| 久久精品国产第一区二区三区| 亚洲AV无码一区二三区| 国产微拍精品一区二区| 国产精品分类视频分类一区| 国产福利一区二区在线视频| 在线日韩麻豆一区| 欧美人妻一区黄a片| 无码毛片视频一区二区本码| 国产精品第一区第27页| 一区在线观看视频| 精品免费AV一区二区三区|