解決CSS中 display 與 visibility 的區別_基礎教程
來源:互聯網
上載者:User
大多數人很容易將CSS屬性display和visibility混淆,它們看似沒有什麼不同,其實它們的差別卻是很大的。
visibility屬性用來確定元素是顯示還是隱藏的,這用visibility="visible|hidden"來表示(visible表示顯示,hidden表示隱藏)。
當visibility被設定為"hidden"的時候,元素雖然被隱藏了,但它仍然佔據它原來所在的位置。例:
第一行文本將會觸發"hidden"和"visible"屬性,注意第二行的變化。 因為visibility會保留元素的位置,所以雖然第一行看不見了但位置還在,第二行內容不會上下移動。
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
注意到,當元素被隱藏之後,就不能再接收到其它事件了,所以在第一段代碼中,當其被設為"hidden"的時候,就不能再接收響應到事件了,因此也就無法通過滑鼠點擊第一段文本令其顯示出來。
另一方面,display屬性就有一點不同了。visibility屬性是隱藏元素但保持元素的浮動位置,而display實際上是設定元素的浮動特徵。
當display被設定為block(塊)時,容器中所有的元素將會被當作一個單獨的塊,就像元素一樣,它會在那個點被放入到頁面中。(實際上你可以設定的display:block,使其可以像一樣工作。
將display設定為inline,將使其行為和元素inline一樣---即使它是普通的塊元素如,它也將會被組合成像那樣的輸出資料流。
下面看我執行個體的代碼和效果:
在<span id="blueText" onclick="toggleDisplay(this)" style="color:blue;position:relative;cursor:hand;">藍色</span>文字上點擊來查看效果.
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
最後是display被設定:none,這時元素實際上就從頁面中被移走,它下面所在的元素就會被自動跟上填。(此時應用display: none;的元素相當於消失,而visibility: hidden;則只表示隱藏,位置還在。)
display 屬性分別為block, inline, none 值及使用visibility: hidden;的情況調試樣本:
<h1>display 屬性分別為block, inline, none 值及使用visibility: hidden;的情況調試</h1> <P><SPAN id="oSpan" style="background-color: #CFCFCF;">This is a SPAN</sPAN> in a sentence.</p> <P> <input type=button value="Inline" onclick="oSpan.style.display='inline'"> <input type=button value="Block" onclick="oSpan.style.display='block'"> <input type=button value="None" onclick="oSpan.style.display='none'"> <input type=button value="Hidden" onclick="oSpan.style.visibility='hidden'"><input type=button value="Visible" onclick="oSpan.style.visibility='visible'"> </p> <UL> <LI>將元素設為 block,會在該元素後換行。</lI> <LI>將元素設為 inline,會消除元素換行。</lI> <LI>將元素設為 none,隱藏該元素內容。</lI> </uL>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
同時,關於display:inline;和float:left;兩者的區別可以參看該篇文章:
(display是指顯示狀態,inline表示內聯,特點是緊貼著前一個內嵌元素,通常預設的內嵌元素有span,a,em,strong等。而float表示的是浮動,float:left,是針對區塊層級元素的浮動形式,是不同形式的兩種狀態。)
http://www.andymao.com/andy/post/42.html
http://bbs.blueidea.com/thread-2596793-1-1.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>float &inline</title> <style> *{text-align:center;padding:4px;} div,p{text-align:left;} span{/*float:right;*/ background:#f5f5f5;border-left:1px #eee solid;border-top:1px #eee solid;border-right:1px #ccc solid;border-bottom:1px #ccc solid;} ul#inline li{ display:inline; list-style:none;border-left:1px #ccc solid;width:300px; background:#f5f5f5;/* float:left*/;} ul#float li{ float:left;display:inline; list-style:none;border-left:1px #666 solid;width:300px; background:#f5f5f5; } </style> </head> <body> <span style="width:300px;">span為內聯/inline元素,給他寬度賦值是沒有效果的。</span> <span style="width:100px; float:right;">span為內聯/inline元素,給他寬度賦值100px+float:right;可以看到有了寬度。</span> <p>這個li被定義為內聯/inline,設定寬度沒有效果</p> <ul id="inline"> <li>test</li> <li>test</li> </ul> <p>這個li被定義為內聯/inline+float:left,設定寬度有效果</p> <ul id="float"> <li>test</li> <li>test</li> </ul> </body> </html>
[Ctrl+A 全選 注:如需引入外部Js需重新整理才能執行]
解決:
查CSS手冊後發現了隱藏內容原來是有區別的,一種是保留對象的物理空間,一種是不保留。
-------------------------------
display:none
CSS1 隱藏對象。與 visibility 屬性的hidden值不同,其不為被隱藏的對象保留其物理空間
visibility:hidden
對象隱藏,與 display 屬性不同,此屬性為隱藏的對象保留其佔據的物理空間。
但是因為使用了visibility:hidden,拉長的內容其實就是那個含有圖片的DIV;而改用display:none後就正常了。剛剛還一直懷疑是高度設定的問題,沒想到居然就是這麼簡單的一點內容,結果用了這麼多的時間跟精力,唉……