2011-08-30 10 views
13

Chcę ograniczyć tekst do określonej liczby wierszy na stole 150px szerokości w HTML e-mail, na przykład:ograniczenie tekst do zaledwie dwóch liniach

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

chcę wyglądać tak :

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

ja obcinania ciąg dla max 45 znaków łącznie elipsy, ale czasami, gdy długo słowo jest obecny idzie na trzech liniach:

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

Idealnie chciałbym przerwać słowo przyspieszając lub raczej wypełnić jak najwięcej znaków w pierwszej linii i kontynuować do drugiej linii, czy jest jakiś sposób na zrobienie tego w html? (Spojrzałem na zawijanie wyrazów, ale najwyraźniej nie jest on obsługiwany we wszystkich klientach poczty e-mail)

Również dlatego, że jest to klient poczty e-mail, nie mogę wykonywać żadnych javascript itp. Również.

Odpowiedz

12

CSS Rozwiązanie

można ustawić wysokość i zrobić przelew ukryty.

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

Przykład: http://jsfiddle.net/imoda/REs2Q/


PHP Rozwiązanie

Serwer jednostronne alternatywą jest użycie 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 ? "..." : ''); 
    } 

?> 

Przykład: http://codepad.org/OetkaMh6

Spowoduje to wyświetlenie 100 znaków ciągu, a następnie dodanie do niego ... Trick. Będziesz musiał zmienić liczbę postaci, która najlepiej pasuje do Twojej sytuacji. Ponieważ jest to serwer jednostronny, nie będzie wiedział, ile znaków w każdym scenariuszu wystarczy, aby wywołać tylko jeden powrót karetki.

Alternatywnie, można ograniczyć liczbę słów:

<?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 ? "..." : ''); 
    } 

?> 

Przykład: http://codepad.org/WYJFPaD5

Ale to samo, trzeba dostosować go do "najlepsze dopasowanie"

Nadzieja, która pomaga.

+0

dzięki, ale nie będę w stanie pokazać elipsy za pomocą tej metody, jak sądzę .. czy jest jakiś sposób, aby przetworzyć ciągi po stronie serwera, aby osiągnąć pożądane zachowanie? –

+0

Tak, możesz użyć dowolnej technologii po stronie serwera do obcinania łańcucha do żądanej długości po stronie serwera za pomocą funkcji manipulowania ciągami. Pytanie brzmi, jakie środowisko pracy pracujesz po stronie serwera lub jakiej technologii po stronie serwera znasz najbardziej? Inną rzeczą, którą możesz zrobić, to użyć javascript po stronie klienta, aby skrócić tekst. –

+0

@Sainath Dodałem alternatywę serwerową. –

0

Czy próbowałeś owijać każdy wiersz w <span style="white-space: nobreak;">...</span>, aby zmusić go do nieodwijania?

Niektóre dokumentację można znaleźć here

+0

próbowałem 'white-space: nowrap' ale justs stawia cały tekst w jednej linii, tak naprawdę chcesz go owinąć, ale upewnij się, że w pełni wykorzystuje szerokość w obu liniach łamiąc słowa –

0

Standardowym zachowaniem komórek tabeli jest rozciąganie w celu dopasowania do ich zawartości. Łamanie słów w zależności od szerokości komórki wymagałoby skryptowania.

Przepełnienie: ukryte powoduje obcięcie pozostałych słów i nie jest obsługiwane w programie Outlook 2007/2010.

1

Jeśli wiadomość jest ciągiem znaków, można wykonać następujące czynności z PHP:

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

która zagwarantuje 45 znaków w linii ...

0

ten pracował dla mnie, po prostu dostosować wysokość jak chciałbyś.

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