Este post é para uma solução CSS, mas o post é bastante antigo, portanto, caso outras pessoas se deparem com isso e estejam usando uma estrutura JS moderna, como o Angular 4+, existe uma maneira simples de fazer isso através dos Tubos Angulares sem precisar mexer com CSS.
Provavelmente, também existem maneiras de "reagir" ou "vue". Isso é apenas para mostrar como isso pode ser feito dentro de uma estrutura.
truncate-text.pipe.ts
/**
* Helper to truncate text using JS in view only.
*
* This is pretty difficult to do reliably with CSS, especially when there are
* multiple lines.
*
* Example: {{ value | truncateText:maxLength }} or {{ value | truncateText:45 }}
*
* If maxLength is not provided, the value will be returned without any truncating. If the
* text is shorter than the maxLength, the text will be returned untouched. If the text is greater
* than the maxLength, the text will be returned with 3 characters less than the max length plus
* some ellipsis at the end to indicate truncation.
*
* For example: some really long text I won't bother writing it all ha...
*/
@Pipe({ name: 'truncateText' })
export class TruncateTextPipe implements PipeTransform {
transform(value: string, ...args: any[]): any {
const maxLength = args[0]
const maxLengthNotProvided = !maxLength
const isShorterThanMaximumLength = value.length < maxLength
if (maxLengthNotProvided || isShorterThanMaximumLength) {
return value
}
const shortenedString = value.substr(0, maxLength - 3)
return `${shortenedString}...`
}
}
app.component.html
<h1>{{ application.name | truncateText:45 }}</h1>
textarea
ouinput
houver uma propriedade de comprimento máximo (maxlength="50"
isso está no HTML) para eles ou você precisaria usar Javascript. Também acho que interpretei errado, definir uma largura forçará a frase a cair para a próxima linha quando chegar ao fim. Esse é o comportamento padrão.