2011-08-30 43 views
13

我想限制的文本到固定的線路數量在HTML電子郵件150像素寬度的表格,例如:限制文本只有兩行

Long text continues down the road into a lane and doesn't stop there 

我希望它看起來像這樣:

Long text continues down 
the road into a lane and... 

我截斷爲45個字符的最多,包括省略號的字符串,但有時當一個長字出現時,它進入到三線:

Long text continues at 
accelerating speed into the 
road... 

理想情況下,我想打破加速這個詞,或者在第一行填寫儘可能多的字符,並繼續第二行,有沒有辦法在html中做到這一點? (我看了一遍換行,但顯然它並不支持所有的電子郵件客戶端)

此外,由於這是電子郵件客戶端,我也不能做任何JavaScript等。

回答

12

CSS解決方案

你可以設置一個高度,做溢出隱患。

span { 
    display: inline-block; 
    border: black 1px solid; 
    width: 300px; 
    height: 40px; 
    overflow: hidden; 
} 

http://jsfiddle.net/imoda/REs2Q/


PHP解

服務器雙面替代方法是使用substr

<?php 

    $string = "Oh squiggly line in my eye fluid. I see you lurking there on the peripheral of my vision. But when I try to look at you, you scurry away. Are you shy, squiggly line? Why only when I ignore you, do you return to the center of my eye? Oh, squiggly line, it's alright, you are forgiven."; 

    echo charlimit($string, 100); 

    function charlimit($string, $limit) { 

     return substr($string, 0, $limit) . (strlen($string) > $limit ? "..." : ''); 
    } 

?> 

http://codepad.org/OetkaMh6

這將輸出100個字符的字符串,然後附加...把戲與這是你將不得不改變字符的數量,以最適合你的情況。由於它是服務器端的,因此它不會知道在每種情況下只觸發一次回車所需的字符數。

或者,你可以限制的單詞數:

<?php 

    $string = "Oh squiggly line in my eye fluid. I see you lurking there on the peripheral of my vision. But when I try to look at you, you scurry away. Are you shy, squiggly line? Why only when I ignore you, do you return to the center of my eye? Oh, squiggly line, it's alright, you are forgiven."; 

    echo wordlimit($string, 20); 

    function wordlimit($string, $limit) { 

     $overflow = true; 

     $array = explode(" ", $string); 

     $output = ''; 

     for ($i = 0; $i < $limit; $i++) { 

      if (isset($array[$i])) $output .= $array[$i] . " "; 
      else $overflow = false; 
     } 

     return trim($output) . ($overflow ? "..." : ''); 
    } 

?> 

http://codepad.org/WYJFPaD5

但它同樣的事情,你必須調整它爲 「最適合」

希望有所幫助。

+0

感謝確保它充分利用寬度在兩行中,但我不能用這種方法顯示省略號我猜...有沒有什麼辦法可以預先處理服務器端的字符串以達到所需的行爲? –

+0

是的,您可以使用任何服務器端技術在服務器端使用字符串操作函數將字符串截斷爲期望的長度,問題是您在服務器端使用的是什麼環境或者您最熟悉哪種服務器端技術?你可以做的另一件事是使用客戶端JavaScript截斷文本。 –

+0

@Sainath我已經添加了一個服務器端替代。 –

0

您是否試過在<span style="white-space: nobreak;">...</span>中包裝每一行以強制它不包裝?

一些文件可以發現here

+0

我想'白色空間:nowrap'但甫一把整個文本在同一行,其實我是想它來包裝,但打破的話 –

0

這是表格單元格的標準行爲,以適應其內容。根據單元格的寬度打破單詞將需要編寫腳本。

overflow:hidden只是切斷了其餘的單詞,並且在Outlook 2007/2010中不受支持。

1

如果你的消息是一個字符串,你可以用PHP如下:

$stringChunkArray = str_split($string, 45); // 45 = desired char count 
foreach ($stringChunkArray as $line) { 
    echo $line.PHP_EOL; 
} 

,這將保證每行45個字符...

0

這個工作對我來說,只是調整高度你希望。

blog_content { 
    display: inline-block; 
    border: 0px; 
    height: 600px; 
    overflow: hidden; 
}