Existe alguma maneira de truncar texto com HTML e CSS simples, para que o conteúdo dinâmico possa caber em um layout de largura e altura fixas?
Estive truncando o lado do servidor pela largura lógica (ou seja, um número de caracteres adivinhados às cegas), mas como um 'w' é maior que um 'i', isso tende a ser subótimo e também exige que eu repense ( e continue ajustando) o número de caracteres para cada largura fixa. Idealmente, o truncamento aconteceria no navegador, que sabe a largura física do texto renderizado.
Descobri que o IE tem uma text-overflow: ellipsis
propriedade que faz exatamente o que eu quero, mas preciso que isso seja entre navegadores. Esta propriedade parece ser (um pouco?) Padrão, mas não é suportada pelo Firefox. Encontrei várias soluções alternativas com base overflow: hidden
, mas elas não exibem reticências (quero que o usuário saiba que o conteúdo foi truncado) ou o exibem o tempo todo (mesmo que o conteúdo não tenha sido truncado).
Alguém tem uma boa maneira de ajustar texto dinâmico em um layout fixo ou o truncamento do lado do servidor por largura lógica é tão bom quanto o que eu vou conseguir por enquanto?
Respostas:
Atualização:
text-overflow: ellipsis
agora é suportada no Firefox 7 (lançado em 27 de setembro de 2011). Yay! Minha resposta original segue como um registro histórico.Justin Maxwell tem uma solução CSS para vários navegadores. No entanto, ele vem com a desvantagem de não permitir que o texto seja selecionado no Firefox. Confira o post de convidado no blog de Matt Snider para obter todos os detalhes sobre como isso funciona.
Observe que essa técnica também impede a atualização do conteúdo do nó no JavaScript usando a
innerHTML
propriedade no Firefox. Veja o final desta postagem para uma solução alternativa.CSS
ellipsis.xml
conteúdo do arquivoAtualizando o Conteúdo do Nó
Para atualizar o conteúdo de um nó de uma maneira que funcione no Firefox, use o seguinte:
Veja a publicação de Matt Snider para uma explicação de como isso funciona .
fonte
text-overflow
não indica suporte paraoption
elementos (consulte a seção Aplica - se a em msdn.microsoft.com/en-us/library/ms531174(VS.85).aspx ).Março de 2014: Truncando seqüências longas com CSS: uma nova resposta com foco no suporte ao navegador
Demonstração em http://jsbin.com/leyukama/1/ (eu uso o jsbin porque ele suporta a versão antiga do IE).
A propriedade CSS -ms-text-overflow não é necessária: é um sinônimo da propriedade CSS de excesso de texto, mas as versões do IE de 6 a 11 já suportam a propriedade CSS de excesso de texto.
Testado com sucesso (no Browserstack.com) no sistema operacional Windows, para navegadores da web:
Firefox: como apontado por Simon Lieschke (em outra resposta), o Firefox suporta apenas a propriedade CSS de estouro de texto do Firefox 7 em diante (lançado em 27 de setembro de 2011).
Eu verifiquei esse comportamento novamente no Firefox 3.0 e Firefox 6.0 (o excesso de texto não é suportado).
Seriam necessários alguns testes adicionais em navegadores da Web Mac OS.
Nota: você pode mostrar uma dica de ferramenta ao passar o mouse quando uma reticência é aplicada, isso pode ser feito via javascript, consulte estas perguntas: Detecção de reticulação de transbordamento de texto em HTML HTML e HTML - como mostrar apenas a dica de ferramenta quando as reticências estão ativadas
Recursos:
fonte
Se você está bem com uma solução JavaScript, há um plug-in jQuery para fazer isso de uma maneira diferente do navegador - consulte http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for -firefox-via-jquery /
fonte
OK, Firefox 7 implementado
text-overflow: ellipsis
, bem comotext-overflow: "string"
. O lançamento final está previsto para 27/09/2011.fonte
Outra solução para o problema poderia ser o seguinte conjunto de regras CSS:
A única desvantagem do CSS acima é que ele adicionaria o "..." independentemente de o texto estourar o contêiner ou não. Ainda assim, se você tiver um caso em que tenha vários elementos e tiver certeza de que o conteúdo será estourado, esse seria um conjunto de regras mais simples.
Meus dois centavos. Tiremos o chapéu para a técnica original de Justin Maxwell
fonte
position: absolute; right: 0;
(e não se esqueçaposition: relative
do elemento real para que ele funcione). Ele se sobrepõe ao texto, portanto, convém adicionar uma cor de fundo também.