2011-08-30 16 views
13

quiero limitar el texto a un número fijo de líneas para una mesa de 150 píxeles de anchura en el correo electrónico HTML, por ejemplo:limitación de texto a sólo dos líneas

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

quiero que se vea como este :

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

Estoy truncar la cadena para un máximo de 45 caracteres incluidos los puntos suspensivos, pero a veces cuando una palabra larga está presente se dirige a tres líneas:

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

Idealmente, me gustaría romper la palabra acelerando o, mejor dicho, llenar la mayor cantidad de caracteres posible en la primera línea y continuar con la segunda línea, ¿hay alguna manera de hacerlo en html? (Miré el word-wrap pero aparentemente no es compatible con todos los clientes de correo electrónico)

Además, dado que se trata de clientes de correo electrónico, no puedo hacer ningún javascript, etc. también.

Respuesta

12

CSS Solución

También podemos establecer una altura y hacer desbordamiento oculta.

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

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


Solución PHP

El servidor alternativa caras es utilizar 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 ? "..." : ''); 
    } 

?> 

Ejemplo: http://codepad.org/OetkaMh6

Esta es la salida 100 caracteres de la cadena a continuación, anexar ... truco con esto es que usted tiene que cambiar el número de caracteres a lo que funciona mejor para su situación. Debido a que es del lado del servidor, no sabrá cuántos caracteres necesita cada escenario para activar solo un retorno de carro.

Alternativamente, se puede limitar el número de palabras:

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

?> 

Ejemplo: http://codepad.org/WYJFPaD5

pero es la misma cosa, hay que adaptarlo a "mejor ajuste"

Espero que ayude.

+0

gracias, pero No podré mostrar las elipsis usando este método, supongo ... ¿hay alguna forma de preprocesar las cadenas del lado del servidor para lograr el comportamiento deseado? –

+0

Sí, puede usar cualquier tecnología del lado del servidor para truncar la cadena a la longitud deseada en el lado del servidor usando funciones de manipulación de cadenas, la pregunta es ¿qué entorno está trabajando en el servidor o con qué tecnología de servidor está más familiarizado? Otra cosa que puede hacer es usar javascript del lado del cliente para truncar el texto. –

+0

@Sainath He agregado una alternativa del lado del servidor. –

0

¿Ha intentado envolver cada línea en un <span style="white-space: nobreak;">...</span> para forzar que no se enrosque?

Parte de la documentación se puede encontrar here

+0

Traté 'white-space: nowrap' pero que justs pone todo el texto en una línea, yo en realidad quiero que envuelva pero asegúrese de que utiliza plenamente el ancho en ambas líneas de división de las palabras –

0

El comportamiento estándar de las celdas de tabla es estirar para ajustarse a su contenido. Romper palabras según el ancho de una celda requeriría secuencias de comandos.

desbordamiento: oculto simplemente corta el resto de las palabras y no es compatible con Outlook 2007/2010.

1

Si el mensaje es una cadena, se puede hacer lo siguiente con PHP:

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

que le garantiza 45 caracteres por línea ...

0

Esto funcionó para mí, sólo ajustar la altura como tú deseas.

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