在傳統浮動佈局(float: left/right)中,IE 瀏覽器(特別是 IE6/7/8)存在經典渲染 Bug:當行內塊級元素後跟浮動元素時,浮動元素可能錯位換行,導致視覺上「掉下一行」。

<li> <a href="newslist.html">新聞標題內容很長很長很長</a> <span class="date">2014-5-30</span> </li>
現象:<a> 佔據一行,<span> 本意右對齊同行,但在 IE 下 <span> 掉到下一行開頭。
<li> <span class="date">2014-5-30</span> <a href="newslist.html">新聞標題內容很長很長很長</a> </li>
核心原則:浮動元素(或行內塊元素)必須寫在非浮動內容之前,瀏覽器優先佈局浮動元素,剩餘空間由文檔流元素填充。
.news-list li {
overflow: hidden; /* 清除浮動,包裹內部浮動元素 */
padding: 10px 0;
border-bottom: 1px dashed #eee;
}
.news-list .date {
float: right; /* 日期右浮動 */
color: #999;
font-size: 12px;
white-space: nowrap; /* 防換行 */
}
.news-list a {
display: block; /* 或 inline-block */
overflow: hidden; /* 防止文字環繞浮動元素 */
text-overflow: ellipsis;
white-space: nowrap;
color: #333;
}
div、p、li 的 a 設置 display:block)無視浮動元素佔據空間,但其內部行內內容會環繞IE 6/7 在計算塊級元素可用寬度時,未正確扣除前方浮動元素的寬度,導致塊級元素寬度超出可用空間,被迫換行。將浮動元素前置,使其優先佔據空間,後續塊級元素正確計算剩餘寬度。
浮動佈局屬於歷史技術棧,現代項目建議使用:
.news-list li {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0;
}
.news-list .date {
flex-shrink: 0; /* 不被壓縮 */
margin-left: 16px; /* 與標題間距 */
color: #999;
font-size: 12px;
}
.news-list a {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.news-list li {
display: grid;
grid-template-columns: 1fr auto;
gap: 16px;
align-items: center;
}
.news-list li {
text-align: right; /* 內容右對齊 */
font-size: 0; /* 消除 inline-block 間隙 */
}
.news-list li::before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle; /* 垂直居中輔助 */
}
.news-list .date,
.news-list a {
display: inline-block;
font-size: 14px; /* 恢復字體大小 */
vertical-align: middle;
}
.news-list a {
text-align: left;
max-width: 70%; /* 限制標題最大寬度 */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
理解瀏覽器渲染機制,才能在兼容性與現代化之間做出正確技術選型。