1. 程式人生 > >display:none和visibility:hidden兩者的區別

display:none和visibility:hidden兩者的區別

使用css讓元素不可見的方法有很多種,裁剪、定位到螢幕外邊、透明度變換等都是可以的。但是最常用兩種方式就是設定元素樣式為display: none或者visibility: hidden。很多公司的面試官也常常會問面試者這兩者之間的區別。

 

display與元素的隱藏

如果給一個元素設定了display: none,那麼該元素以及它的所有後代元素都會隱藏,它是前端開發人員使用頻率最高的一種隱藏方式。隱藏後的元素無法點選,無法使用螢幕閱讀器等輔助裝置訪問,佔據的空間消失。

    <body>

        <div

>

            <strong>給元素設定display:none樣式</strong>

            <p>A元素</p>

            <p

style='display:none;'>B元素</p>

            <p>C元素</p>

        </div>

    </body>

效果圖:

 

visibility與元素的隱藏

給元素設定visibility: hidden也可以隱藏這個元素,但是隱藏元素仍需佔用與未隱藏時一樣的空間,也就是說雖然元素不可見了,但是仍然會影響頁面佈局。

    <body>

        <div>

            <strong>給元素設定visibility:hidden樣式</strong>

            <p>A元素</p>

            <p style='visibility:hidden;'>B元素</p>

            <p>C元素</p>

        </div>

    </body>

效果圖:

 

display: none與visibility: hidden的區別

很多前端的同學認為visibility: hidden和display: none的區別僅僅在於display: none隱藏後的元素不佔據任何空間,而visibility: hidden隱藏後的元素空間依舊保留 ,實際上沒那麼簡單,visibility是一個非常有故事性的屬性

1、visibility具有繼承性,給父元素設定visibility:hidden;子元素也會繼承這個屬性。但是如果重新給子元素設定visibility: visible,則子元素又會顯示出來。這個和display: none有著質的區別

2、visibility: hidden不會影響計數器的計數,如圖所示,visibility: hidden雖然讓一個元素不見了,但是其計數器仍在執行。這和display: none完全不一樣

    <body>

        <div>

            <strong>給元素設定visibility:hidden樣式</strong>

            <ol>

                <li>元素1</li>

                <li style="visibility:hidden;">元素2</li>

                <li>元素3</li>

                <li>元素4</li>

            </ol>

        </div>

        <div>

            <strong>給元素設定display:none樣式</strong>

            <ol>

                <li>元素1</li>

                <li style="display:none;">元素2</li>

                <li>元素3</li>

                <li>元素4</li>

            </ol>

        </div>

    </body>

 

3、CSS3的transition支援visibility屬性,但是並不支援display,由於transition可以延遲執行,因此可以配合visibility使用純css實現hover延時顯示效果。提高使用者體驗。