css 的規(guī)律摸索之路(三)文本省略問題

前言

在css的使用中,我們經(jīng)常性的需要對溢出文本進行處理,在實際的項目中钻心,由于文字內(nèi)容的長度不確定性和頁面布局的固定性,難免會出現(xiàn)文字內(nèi)容超過div(或其他標簽旦委,下同)區(qū)域的情況,此時比較好的做法就是當文字超過限定的div寬度后自動以省略號(…)顯示雏亚,這樣缨硝,按照習慣,人們都會知道這兒有文字被省略了罢低。

在css中有個屬性叫做text-overflow:ellipsis;配合其他一些屬性可以實現(xiàn)IE,chrome,safria瀏覽器下文字溢出點點點省略號顯示查辩,在加上opera瀏覽器的私有屬性-o-text-overflow:ellipsis;就目前而言,可以基本實現(xiàn)Firefox瀏覽器以外的所有主流瀏覽器的文字溢出點點點省略號顯示网持。

瀏覽器支持:
瀏覽器 版本 支持 屬性
Internet Explorer 6.0+ text-overflow ellipsis|clip
Firefox (Gecko) 7.0+ text-overflow ellipsis|clip
Opera (Presto) 9.* - 10.* -o-text-overflow ellipsis |clip
11.0+ text-overflow ellipsis | clip
Safari | Chrome | WebKit 1.3|1.0| 312.3 text-overflow ellipsis |clip

通過瀏覽器支持表我們可以看出,F(xiàn)irefox對 text-overflow 嚴重落后于其它瀏覽器翎碑,IE從數(shù)年前的6.0版本就支持了這個屬性,而Firefox在IE6推出之后的漫長歲月里日杈,F(xiàn)irefox經(jīng)過了4次大版本號升級都沒有提供支持,直到Firefox 7.

到目前為止莉擒,F(xiàn)irefox之外的瀏覽器都支持 text-overflow css 了酿炸,所以開發(fā)者只需要針對Firefox 3.x - 6.x做特別處理。

除Firefox外的單行文本溢出解決:

對于單行文本溢出我們使用一句話涨冀,放在你需要解決溢出問題的元素上:

overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow:ellipsis;

這句話可以解決大部分的瀏覽器單行文本溢出。

針對Firefox老版本扁眯,做省略號效果

針對Firefox,做省略號效果翅帜,目前主要有3種方案姻檀,分別是:

  • css binding xml
  • JavaScript截取(此處不做說明涝滴,因為能用css為何要用js)
  • 省略號遮蓋。

css binding xml

這是老外提供的一種方法歼疮,使用Firefox的私有屬性調(diào)用一個XML文件:ellipsis.xml,可以使Firefox火狐瀏覽器下文字溢出后以省略號的形式顯示缩麸。

ellipsis.xml的內(nèi)容如下:

<bindings xmlns="http://www.mozilla.org/xbl" xmlns:xbl="http://www.mozilla.org/xbl" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <binding id="ellipsis">
        <content>
            <xul:description crop="end" xbl:inherits="value=xbl:text">
                 <children/>
            </xul:description>
        </content>
    </binding>
</bindings>

ellipsis.xml另存為到本地你的css文件存放的地方赡矢,然后就是調(diào)用:

-moz-binding:url(‘ellipsis.xml#ellipsis’);

跟css樣式寫法一致愚屁,再結合上面的css樣式济竹,就可以實現(xiàn)所有主流瀏覽器下的單行文字溢出用省略號表示了。css表示如下:

overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
-o-text-overflow:ellipsis;
-moz-binding:url('ellipsis.xml#ellipsis');

注意:此XML文件貌似不支持向上路徑的訪問梦谜,也不支持絕對路徑的訪問袭景。也就是說此XML文件需要放在調(diào)用文件(css文件,或HTML文件)的同目錄下或下一級目錄下耸棒,不能向上訪問。所以為了麻煩直接存到調(diào)用文件的統(tǒng)一級目錄就行了

省略號遮蓋

這種方式有點老的掉牙单山,因為自2013年以后所有瀏覽器都已經(jīng)支持 text-overflow:ellipsis; 方法

所以這里只是附上代碼大家看看得了

<h3>省略號遮蓋法</h3>
<div class="text_overflow_margin" >
    <div class="margin_con" >這是一段比較長的文字幅疼,用來測試是否文字溢出時會用省略號顯示。</div>
    <div class="margin_ellipsis" >…</div>
</div>
<style>
    .text_overflow_margin{
        width: 24em; height: 20px; overflow:hidden; zoom:1; background: #333;
    }
    .text_overflow_margin .margin_con{
        height: 20px; margin-right: 1em; background: #f00;
    }
    .text_overflow_margin .margin_ellipsis{
        width: 1em; height: 20px; float:right; margin-top: -20px;
    }
</style>

多行文本溢出省略號

不兼容的WebKit內(nèi)核新版屬性

有時候我們需要在多行文本后面添加一個省略號爽篷,怎么樣添加呢?

display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;

說明:

  1. -webkit-line-clamp用來限制在一個塊元素顯示的文本的行數(shù)铡溪。 為了實現(xiàn)該效果,它需要組合其他的WebKit屬性泪喊。
  2. display: -webkit-box; 必須結合的屬性 棕硫,將對象作為彈性伸縮盒子模型顯示 。
  3. -webkit-box-orient 必須結合的屬性 饲帅,設置或檢索伸縮盒對象的子元素的排列方式 瘤泪。

適用范圍:因使用了WebKit的CSS擴展屬性,該方法適用于WebKit瀏覽器及移動端对途;所以其兼容性不太好

<p class="article_synopsis">
  我們時常對城市中的建筑過目即忘,甚至你不會覺得城市與城市之間有什么不同惶洲。因為這些鋼筋混泥土建筑的空間里,沒有與我們內(nèi)心與之呼應的東西恬吕。這些東西是一個民族幾千年里凝練下來的一種審美,流淌在我們的血液里渐裂。
</p>
<style>
.article_synopsis {
    display: -webkit-box; text-overflow: ellipsis; text-indent: 2em;
    overflow : hidden; -webkit-line-clamp: 5; -webkit-box-orient: vertical;
    height: 90px; width: 170px; font-size: 12px;
 }
</style>

兼容的寫法

我們?yōu)榱思嫒菘紤]可以使用偽類來達到相同的效果

p {
  position: relative;
  line-height: 20px;
  max-height: 40px;
  overflow: hidden;
}
p::after {
  content: "...";
  position: absolute;
  bottom: 0;
  right: 0;
}

完整代碼實現(xiàn):

<p class="synopsis">
  我們時常對城市中的建筑過目即忘钠惩,甚至你不會覺得城市與城市之間有什么不同。因為這些鋼筋混泥土建筑的空間里膝捞,沒有與我們內(nèi)心與之呼應的東西愧沟。這些東西是一個民族幾千年里凝練下來的一種審美,流淌在我們的血液里央渣。
</p>
<style>
.synopsis{
    position: relative; line-height: 20px; overflow: hidden;
    height: 80px; width: 170px; font-size: 12px;
}
.synopsis::after{
    content: "..."; position: absolute; bottom: 0; right: 0;
    line-height: 20px; background: #fff; width: 14px;
}
</style>

說明:

  1. 設置 line-height 屬性,防止超出的文字露出部分北启。
  2. p::after 添加定位拔第、顏色、行高及寬度可避免文字只顯示一半蚊俺。
  3. 由于ie6-7不顯示 content 內(nèi)容,所以要添加標簽兼容ie6-7(如:<span>…<span/>)批钠;兼容ie8需要將::after替換成:after得封。

適用范圍:該方法適用范圍廣,但文字未超出行的情況下也會出現(xiàn)省略號,可結合js優(yōu)化該方法忙上。

關于JavaScript 方案可以去看看Clamp.jsjQuery插件-jQuery.dotdotdot

小結:

至此我們常用的css溢出變?yōu)槭÷蕴柕姆椒ɑ窘Y束了

提示:后面還有精彩敬請期待,請大家關注我的CSDN博文:儂姝沁兒茬斧,或者我的簡書專題:web前端。如有意見可以進行評論项秉,每一條評論我都會認真對待。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涮毫,一起剝皮案震驚了整個濱河市贷屎,隨后出現(xiàn)的幾起案子艘虎,更是在濱河造成了極大的恐慌,老刑警劉巖属划,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件候生,死亡現(xiàn)場離奇詭異,居然都是意外死亡唯鸭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門明肮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缭付,“玉大人,你說我怎么就攤上這事秫舌⌒迕剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵河咽,是天一觀的道長。 經(jīng)常有香客問我飒房,道長,這世上最難降的妖魔是什么狠毯? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任嚼松,我火速辦了婚禮嫡良,結果婚禮上献酗,老公的妹妹穿的比我還像新娘。我一直安慰自己很澄,他們只是感情好颜及,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讯蒲,像睡著了一般肄扎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上反浓,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音辆雾,去河邊找鬼月劈。 笑死,一個胖子當著我的面吹牛猜揪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腊凶,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钧萍!你這毒婦竟也來了?” 一聲冷哼從身側響起队魏,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤万搔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瞬雹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡揽浙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膛虫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡撩独,死狀恐怖账月,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情局齿,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布讥此,位于F島的核電站谣妻,受9級特大地震影響,放射性物質發(fā)生泄漏蹋半。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一染突、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧觉痛,春花似錦、人聲如沸手蝎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧史。三九已至,卻和暖如春吨述,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揣云。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工冰啃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阎毅。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓扇调,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肃拜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容