text-indent(一個在ie6下有着奇怪表現的屬性)
text-indent作為大家都很熟悉的一個css屬性,應該都不太會對這個屬性去做過多的研究。我本來也是覺得這屬性也就這樣了,直到今天遇到的一個以前未注意過的bug...
先看下w3school對text-indent的介紹:
定義
text-indent 屬性規定文本塊中首行文本的縮進。
注釋:允許使用負值。如果使用負值,那麼首行會被縮進到左邊。
注意:在 CSS 2.1 之前,text-indent 總是繼承計算值,而不是聲明值。
說明
用于定義塊級元素中第一個内容行的縮進。這最常用于建立一個“标簽頁”效果。允許指定負值,這會産生一種“懸挂縮進”的效果。預設值:not specified
繼承性:yes
版本:CSS1
JavaScript 文法:object.style.textIndent="50px"
可能的值值描述
length定義固定的縮進。預設值:0。
%定義基于父元素寬度的百分比的縮進。
inherit規定應該從父元素繼承 text-indent 屬性的值。
上方介紹中的重點我已經用紅色字型标出了——塊級元素。也就是這個屬性隻對塊級元素生效,(當然因為可替代元素中的input類型和display-block相似,是以内容塊也為塊級元素,故同樣可以設定text-indent)。今天遇到的bug也是出自于這裡。
在IE8+(包括IE8),FF,chrome等現代進階浏覽器中顯示的效果良好,可以達到預期的樣子。
asdasdasdasd
效果為:

可以很明顯的看出,input内的文字“前進”了20px。
但是同樣的代碼放在IE6下卻是這個情況:
大家可以看到input本身相對于父元素而言也“前進”了20px。
但是後來經過實驗幾次後發現,并不是說隻要是inline元素就肯定會因為text-indent而一起“前進”,其實還要取決于它在父元素中的位置。
asdasdasdasdasdasd
如果在input前再加一個inline元素的話,此時就會發現在現代浏覽器與IE6中的表現基本相同:(如果加一個inline-block元素的話表現也是一樣的)
現代浏覽器:
ie6:
此時如果在input前面再加一個block元素的話:
代碼:
asdasd12134asdasdasdasd
現代浏覽器:
ie6:
效果還是會回到bug的狀态....真是頭疼啊,初步結論是:如果inline元素前面沒有元素或者有block元素的話,在IE6下會出現bug。
再說下其他情況下會引發的bug:
如果input設定float的情況下:
asdasdasdasd
現代浏覽器:
(表現依舊良好)
ie6:
但是在ie6下,float後的input将自身的text-indent傳遞給了父元素,導緻input後的文字也“前進”了20px。
還有兩種情況就引用下網上别人的例子了:
例子 3:
負值的 text-indent 會是怎樣呢?
Indent
正文