解決ul的li橫向排列換行的問題


1. 問題現象

 

    先看下面的html結構:

<div>
    <ul>
        <li><img src='./img/1.jpg'></li>
        <li><img src='./img/2.jpg'></li>
        <li><img src='./img/3.jpg'></li>
        <li><img src='./img/4.jpg'></li>
    </ul>
</div>

    外層div設定了固定寬度,css中ul的寬度未設置(因為li的個數不確定),當通過javascript動態設置ul的寬度后,會導致li換行。

2. 分析

 

      嘗試將ul的寬度增大,問題消失,推測是計算的ul寬度不准確,經過思考推敲,原來是我為li設置了1px的borde,但是計算ul寬度時,沒有考慮到border,將border寬度加進去,一切正常。
      ul的寬度 = (li的width + li的左右margin + border)*li的length

 

3. 總結

 

     已經遇到過幾次了,一直沒有找到原因,在網上曾搜索到兩種解決方法:

     一種是:給ul添加 white-space:nowrap; 將li的 float:left; 改成 display:inline-block; 試了,chrome、ff、ie8以上不會換行,但是最后一個li內容不能顯示完全,ie6,7則無任何作用。

     另外一種是:將li設置為 display:table-cell; 同時li的margin改成padding,但是這樣的話,影響了本來的布局。

     所以,當你遇到ul的li有一個或幾個換了行,請先確認下有沒有為li設置了border,如果有,那么檢查下ul的寬度是否已經考慮了border。如果li沒有border,那么可以試試我說的上面那兩種解決方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM