天天看點

html text-indent,css之text-indent

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

效果為:

html text-indent,css之text-indent

可以很明顯的看出,input内的文字“前進”了20px。

但是同樣的代碼放在IE6下卻是這個情況:

html text-indent,css之text-indent

大家可以看到input本身相對于父元素而言也“前進”了20px。

但是後來經過實驗幾次後發現,并不是說隻要是inline元素就肯定會因為text-indent而一起“前進”,其實還要取決于它在父元素中的位置。

asdasdasdasdasdasd

如果在input前再加一個inline元素的話,此時就會發現在現代浏覽器與IE6中的表現基本相同:(如果加一個inline-block元素的話表現也是一樣的)

現代浏覽器:

html text-indent,css之text-indent

    ie6:

html text-indent,css之text-indent

此時如果在input前面再加一個block元素的話:

代碼:

asdasd12134asdasdasdasd

現代浏覽器:

html text-indent,css之text-indent

 ie6:

html text-indent,css之text-indent

效果還是會回到bug的狀态....真是頭疼啊,初步結論是:如果inline元素前面沒有元素或者有block元素的話,在IE6下會出現bug。

再說下其他情況下會引發的bug:

如果input設定float的情況下:

asdasdasdasd

現代浏覽器:

html text-indent,css之text-indent

(表現依舊良好)

ie6:

html text-indent,css之text-indent

但是在ie6下,float後的input将自身的text-indent傳遞給了父元素,導緻input後的文字也“前進”了20px。

還有兩種情況就引用下網上别人的例子了:

例子 3:

負值的 text-indent 會是怎樣呢?

Indent

正文