1、display,使用none值會讓元素從文檔中直接刪除,”直接消失不見了”
用法:display:none
優點:簡單暴力,不需要多余代碼。不占空間,對布局沒影響。
缺點:元素從文檔刪除,不利於seo
2、text-indent,一般是首行縮2個中文字的用法是text-indent:2em。但當給他一個足夠大的負值,大到一般我們瀏覽器無法顯示。
用法:text-indent:-999em
優點:利於搜索引擎
缺點:它的作用其實就是把文字提到段落前面,不讓我們看見,不影響寬度?
會影響布局。
3、position,假如說一個元素的距離我們的視窗(電腦顯示屏幕)足夠大,大到我們瀏覽器也無法顯示出來,那么它也是“消失”的。但是這種做法一般適用於比較寫死的東西。
用法:position:absolute; top:-999em或者left:-999em
或 position:absolute; visibility:hidden;
優點:信手拈來,隨意擺放
缺點:用法太死,不能隨意修改,比較死板
4、visibility,只是“看不見”而已,所以元素依然會影響到布局
用法:visibility:hidden
優點:利於SEO優化
缺點:該屬性會繼承,假如祖先用了visibility:hidden,那么子元素也是直接顯示不見,想要子元素顯示讓用戶看見,還要必須再多寫visibility:visible
使用隱藏元素考慮的幾個關鍵點:
(1)空間占據/頁面可用性(屏幕閱讀器) (display跟visibility方式屏幕閱讀器讀不了)
(2)回流與渲染? 參考《回流(reflow)與重繪(repaint)》
so,使用absolute會產生重繪而不是產生強烈的回流。而使用display不僅會重繪,還會產生回流。而visibility沒有這個影響前端性能的問題;
(3)株連性 (visibility的繼承性)
(4)配合javascript的控制:
display:none為例,因為不同的標簽所處的display水平不一樣,例如div與span標簽,很難有一個簡單統一的顯示方法。因為當對span標簽顯示dom.style.display="block";(造成原本單行顯示換行)。jQuery的顯隱方法show()/hide()/toggle()就是基於display的,其會存儲元素先前的display屬性值,於是元素再顯示的時候就可以准確地顯示出之前的display值了。
當使用絕對定位(position:absolute; top:-999em)的時候,js只需控制dom.style.position="stack";
so,控制元素顯示與隱藏是absolute屬性的正業所在。
