當內容超出父級元素寬度,在未設定white-space:nowrap時會自動換行,設定了white-space:nowrap樣式又不能關聯到捲軸延伸的部分,解決方案如下:
1、在父級元素添加white-space:nowrap屬性;
2、計算(每一行)內容寬度;
a、將內容拆分,包括縮排、圖片和文字。
b、利用《又談換行情況處理》中在body末尾添加非換行dom元素計算文字寬度。
c、疊加拆分的小塊寬度為總寬度。
3、去掉父級元素的white-space:nowrap屬性;
4、取2中最大寬度,設定成父級元素的寬度(最好在該精確寬度的基礎上增加6px-8px的寬度預留給捲軸,一是滿足捲軸出現,二是也不會貼邊)。
該方法優點(與之前幾種方案相比):
1、寬度計算準確。
2、效能穩定,沒有之前迴圈“試探”的過程,遍曆一遍節點即可完成。
現在看個執行個體
代碼如下 |
複製代碼 |
<title>CSS 寬度自適應</title> <style type="text/css"> *{margin:0;padding:0;} li { text-align:center;border:2px solid red;line-height:20px; min-height:100px;font-size:9pt; display:inline-block;*display:inline;*zoom:1;_height:100px;margin:5px;vertical-align:top } li img { vertical-align:top } </style> <ul> <li>我們都是炎黃子孫!</li> <li>告訴我你還愛我,我知道你心裡已不再有,其實你要放棄,還是你要挽留,我都會付出我的所有!</li> <li>我愛你</li> <li><img src="/" /></li> <li>你愛我不?</li> <li>你知不知道,我等的花兒已謝了!</li> <li><img src="/images/logo.gif" /></li> </ul> |
從代碼裡你絲毫看不出為什麼這樣會自適應寬度,這就是本段代碼的微秒之處,希望你認真閱讀一下,探個究竟。答案是inline-block。
執行個體1
代碼如下 |
複製代碼 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>無標題文檔</title> <style type="text/css"> <!-- div { height: 5em; line-height: 5em; text-align: center; margin: 0; padding: 0; } #d1, #d3, #d4, #d6 { float: left; background: #CCC; } #d1 { width: 20%; } #d2 { float: left; width: 30%; background: red; } #d3 { width: 50%; } #d4 { width: 200px; margin-right: -3px; } #d5 { background: red; line-height: 1.4em; text-align: left; } #d6 { width: 300px; float: right; margin-left: -3px; } div[id="d4"] { margin-right: 0 !important; } div[id="d6"] { margin-left: 0 !important; } --> </style> </head> <body> <h2>百分比寬度</h2> <div id="d1">20%</div> <div id="d2">30%</div> <div id="d3">50%</div> <h2>自適應</h2> <div id="d4">left:200px</div> <div id="d6">right:300px</div> <div id="d5">自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應自適應</div> </body> </html> |