2015-11-03 64 views
2

我有一個HTML列表如下...如何截斷最後一個項目的文字水平UL列表

<ul> 
    <li>Some text</li> 
    <li>Some more text</li> 
    <li>Even more text</li> 
</ul> 

...和我使用display: inline-block;保持列表項上一條水平線。

ulwidth是有限的,我想截斷最後一項使用省略號,當它不適合width

所以需要看起來像:

Some text Some more text Even mo...

我在ul使用text-overflow: ellipsis;嘗試過,但沒有效果。

ul { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    width: 250px; 
 
    text-overflow: ellipsis; 
 
    white-space: nowrap; 
 
    overflow: hidden 
 
} 
 
li { 
 
    display: inline-block; 
 
    margin-right: 10px 
 
}
<ul> 
 
    <li>Some text</li> 
 
    <li>Some more text</li> 
 
    <li>Even more text</li> 
 
</ul>

這裏有一個fiddle

回答

7

我能設置<li>display: inline時它的工作。

specification對於text-overflow說它只適用於塊元素。我猜上的display: inline-block讓他們有自己的塊上下文,因此父母的text-overflow屬性不再被應用。

ul {list-style-type:none; margin:0; padding:0;width:250px; text-overflow:ellipsis; white-space:nowrap; overflow:hidden} 
 
li {display:inline; margin-right:10px}
<ul> 
 
    <li>Some text</li> 
 
    <li>Some more text</li> 
 
    <li>Even more text</li> 
 
</ul>

JSFiddle

+0

完美 - 謝謝! – Fijjit

6

,因爲你是它appying到ul而應該適用於li,見下圖:

ul { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0 
 
} 
 
li { 
 
    display: inline-block; 
 
    vertical-align:top; 
 
    margin-right: 10px; 
 
    max-width: 110px 
 
} 
 
li:last-of-type { 
 
    text-overflow: ellipsis; 
 
    white-space: nowrap; 
 
    overflow: hidden; 
 
}
<ul> 
 
    <li>Some text</li> 
 
    <li>Some more text</li> 
 
    <li>Some even more text</li> 
 
</ul>

+1

好答案。 –

+4

這將剪輯所有列表元素,而不僅僅是最後一個元素。 – maryisdead

+0

@maryisdead謝謝我沒有注意到這個細節。 – dippas

3

似乎鉻無法正常運作,Firefox和IE這似乎是正確的行爲的第二li後添加省略號:

對於省略號和字符串值,實現必須隱藏字符和原子inline-根據需要在線的適用邊緣設置高級元素以適合省略號/字符串。將省略號/字符串緊靠其餘內聯內容的適用邊緣放置。一行上的第一個字符或原子內聯級元素必須被剪切而不是省略。

溢出省略號:

行內盒未內聯:(http://www.w3.org/TR/2012/WD-css3-ui-20120117/#text-overflow0

inline-block元件被歸類爲原子內嵌級元件的「文本溢出」屬性框(如替換的內嵌級元素,內聯塊元素和內聯表元素)被稱爲原子內聯級框,因爲它們作爲單個不透明框參與其內聯格式化上下文。

串聯級元素和內聯框(http://www.w3.org/TR/CSS21/visuren.html#inline-boxes

根據第一引用,這表明整個li應與像Firefox和IE做省略號來代替。

爲了使這項工作在一系列瀏覽器中保持一致,請將lidisplay: inline-block;更改爲display: inline;

ul { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0; 
 
    width: 250px; 
 
    text-overflow: ellipsis; 
 
    white-space: nowrap; 
 
    overflow: hidden 
 
} 
 
li { 
 
    display: inline; 
 
    margin-right: 10px 
 
}
<ul> 
 
    <li>Some text</li> 
 
    <li>Some more text</li> 
 
    <li>Even more text</li> 
 
</ul>

+0

在Firefox中,他的原始代碼剪掉了整個最後一個列表項,不僅是其文本的一部分。我想這是正確的行爲,仍然是Chrome中的一個錯誤。 – maryisdead

+0

@maryisdead這是真的,儘管它至少顯示省略號。看起來瀏覽器選擇處理這個特定實例的方式有所不同。 –

+0

是的,沒錯。 Safari像Chrome那樣處理它。再說一次,IE的行爲就像Firefox一樣。猜猜,畢竟這個定義並不完美。 – maryisdead

相關問題