使用text-align:justify,讓內容左右對齊,相容IE及主流瀏覽器的方法

來源:互聯網
上載者:User

如果不喜歡看分析過程,可以跳到最後看最終相容方案

史前方法:

以前實現左右對齊是這樣的:

<p class="box1">密&emsp;&emsp;碼</p><p class="box1">用&emsp;戶&emsp;名</p><p class="box1">身&emsp;份&emsp;證&emsp;號</p>

效果是這樣:

然後再慢慢加&emsp 或者&nbsp 來調整。原始、粗暴、效率低。em。。。應該摒棄。。。

現代方式:

自從瞭解到 text-align:justify 發現,原來還有這種操作。

<ul>    <li>密碼</li>    <li>使用者名稱</li>    <li>社會安全號碼</li></ul>
ul li{    width: 120px;    text-align: justify;}

滿懷期待,結果是

???不是左右對齊麼,怎麼會無效???

原來是這樣的:

(1)  text-align:justify 不處理強制打斷的行,也不處理塊內的最後一行。通俗一點講,就是只有一行顯示的時候這個屬性是不起作用的,或者使用了word-break: break-all;這種強制換行的屬性,也是不起作用的。

(2) 如果內容是多於一行的時候,除了最後一行,都是左右對齊的效果。

 

問:那麼當只有一行顯示的時候,怎麼讓它能左右左右對齊呢? 

方法一:在內容中添加一個用於佔位的標籤,讓內容處於第一行,就能達到效果:

<ul>    <li>密碼<p class="zw"></p></li>    <li>使用者名稱<p class="zw"></p></li>    <li>社會安全號碼<p class="zw"></p></li></ul>
ul li{    width: 120px;    text-align: justify;}.zw{    display: inline-block;    width: 100%;}

 這時結果為:

為什麼內容效果實現了,但是下面會多出空白來呢?設定zw元素 height:0 都不起作用。。。我估計產生間隙的原因是 display: inline-block; 導致的。那麼怎麼解決呢?

這時就只有設定 li 的高度,比如給 li 添加 height: 40px;line-height: 40px; 。

結果如下:

這樣就解決了空白的問題。

注意:如果只設定height,不設定line-height的話,當height設定的值有點小,比如20,還是看不出來空白,但是設定有點大,比如40的時候,空白又會出現,但是這空白並不是預留位置的空白,而是內容沒有垂直置中,剩下的div的空白

所以設定高度時最好line-height都帶上。

 

方法二:使用:after虛擬元素(ie7及以下不支援偽類)

<ul>    <li>密碼</li>    <li>使用者名稱</li>    <li>社會安全號碼</li></ul>
ul li{    width: 120px;    height: 40px;    line-height: 40px;    text-align: justify;}ul li:after{    content: '';    display: inline-block;    width: 100%;}

 效果:

 

(1) 和上面的效果一樣,空白部分也可以通過設定height和line-height來避免。

(2) 這個方法的好處就是少了佔位標籤。

 

方法三:使用 text-align-last:justify 屬性 

<ul>    <li>密碼</li>    <li>使用者名稱</li>    <li>社會安全號碼</li></ul>
ul li{    width: 120px;    text-align: justify;    text-align-last:justify}

效果:

(1)這個方法使用了 text-align-last:justify 這個屬性,這樣就只需兩個屬性就能達到左右對齊的效果

(2) text-align-last:justify 這個屬性的相容性不好。

(3)這樣的結果在Google、Firefox瀏覽器上能正確顯示,但是在其它瀏覽器中卻沒效果。因為大部分瀏覽器要使得左右對齊生效,需在文本間插入空白,如空格。

 

所以,才有了相容多種瀏覽器的終極相容方法

<ul>    <li>密 碼</li>    <li>用 戶 名</li>    <li>身 份 證 號</li></ul>
ul li{    width: 120px;    height: 40px;    line-height: 40px;    text-align: justify;    text-align-last:justify}ul li:after{    content: '';    display: inline-block;    width: 100%;}

 (1)注意每個單詞之間都有空格,這個很重要,很重要,很重要,而且只需一個空格就行,多個空格也不影響。如果沒有這個空格,相容性很差,基本只有Google和Firefox支援。

(2)這個方法相容ie7及以上,還有其它的瀏覽器。ie6沒測,所以不敢下結論。

(3)多行內容也可以使用同樣的方法,只是最後一行如果不去加空格,還是不會處理,只是預設的往靠左對齊。

(4)li 這個標籤要設定 list-style: none; 去掉預設屬性,否則當只有一行的時候,會出現並沒有左右左右對齊,而是類似靠右對齊的bug。。。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.