Eu tenho uma página da Web com um layout elástico que altera sua largura se a janela do navegador for redimensionada.
Nesse layout, há títulos ( h2
) que terão um comprimento variável (na verdade, títulos de postagens de blog sobre os quais eu não tenho controle). Atualmente - se forem mais largos que a janela - são divididos em duas linhas.
Existe uma solução elegante e testada (entre navegadores) - por exemplo, com jQuery - que reduz oHTML interno dessa tag de título e adiciona "..." se o texto for muito amplo para caber em uma linha na tela atual / largura do contêiner?
Respostas:
Eu tenho uma solução trabalhando em FF3, Safari e IE6 + com texto único e multilinha
jquery.ellipsis.js
fonte
A solução CSS a seguir para truncar texto em uma única linha funciona com todos os navegadores listados em http://www.caniuse.com desde a escrita, com exceção do Firefox 6.0. Observe que o JavaScript é totalmente desnecessário, a menos que você precise oferecer suporte à quebra de texto de várias linhas ou a versões anteriores do Firefox.
Se você precisar de suporte para versões anteriores do Firefox, confira minha resposta nesta outra pergunta .
fonte
Criei esse código usando várias outras postagens, com os seguintes aprimoramentos:
display: block
ao estilo, o trabalho se estendeCSS:
jquery.ellipsis.js
fonte
Minha resposta suporta apenas texto de linha única. Confira o comentário de gfullam abaixo para o garfo de várias linhas, parece bastante promissor.
Reescrevi o código da primeira resposta algumas vezes e acho que esse deve ser o mais rápido.
Ele primeiro localiza um tamanho de texto "Estimado" e depois adiciona ou remove um caractere até que a largura esteja correta.
A lógica usada é mostrada abaixo:
Depois que um comprimento de texto "estimado" é encontrado, os caracteres são adicionados ou removidos até que a largura desejada seja atingida.
Tenho certeza de que precisa de alguns ajustes, mas aqui está o código:
fonte
Apenas no caso de vocês terminarem aqui em 2013 - aqui está uma abordagem css pura que encontrei aqui: http://css-tricks.com/snippets/css/truncate-string-with-ellipsis/
Isso funciona bem.
fonte
text-overflow
não funciona comtextarea
elementos (a partir de 2015). Se você precisar de suporte,textarea
poderá obtê-lo modificando a resposta aceita ou usando esta bifurcação .Eu criei um plugin jQuery muito legal para lidar com todas as variedades de reticências de texto, um chamado ThreeDots @ http://tpgblog.com/threedots
É muito mais flexível do que as abordagens CSS e suporta comportamentos e interações personalizáveis muito mais avançados.
Aproveitar.
fonte
Um plug-in jQuery mais flexível, permitindo manter um elemento após as reticências (por exemplo, um botão "leia mais") e atualizar onWindowResize. Também funciona em torno de texto com marcação:
http://dotdotdot.frebsite.nl
fonte
O plugin trunk8 jQuery suporta várias linhas e pode usar qualquer html, não apenas caracteres de reticências, para o sufixo de truncamento: https://github.com/rviscomi/trunk8
Demonstração aqui: http://jrvis.com/trunk8/
fonte
Na verdade, existe uma maneira bastante simples de fazer isso no CSS, explorando o fato de o IE estender isso com padrões não compatíveis com o FF
:after
Você também pode fazer isso em JS, se desejar, inspecionando a largura de rolagem do destino e comparando-a com a largura dos pais, mas, no entanto, isso é menos robusto.
Edit: isto é aparentemente mais desenvolvido do que eu pensava. Em breve, o suporte ao CSS3 poderá existir e algumas extensões imperfeitas estarão disponíveis para você tentar.
Essa última é uma boa leitura.
fonte
Eu tinha feito algo semelhante para um cliente recentemente. Aqui está uma versão do que eu fiz por eles (exemplo testado em todas as versões mais recentes do navegador no Win Vista). Não é perfeito em todos os aspectos, mas pode ser ajustado com bastante facilidade.
Demonstração: http://enobrev.info/ellipsis/
Código:
fonte
Bem, uma solução simples, que não adiciona o "...", mas evita que o <h2> se divida em duas linhas, seria adicionar este pedaço de css:
Pensei mais um pouco, e eu vim com essa solução, você precisa envolver o conteúdo textual da sua tag h2 com outra tag (por exemplo, um espaço) (ou alternativamente, envolver os h2s com algo que tenha a altura especificada) e depois você pode usar esse tipo de javascript para filtrar as palavras desnecessárias:
fonte
Aqui está outra solução JavaScript. Funciona muito bem e muito rápido.
https://github.com/dobiatowski/jQuery.FastEllipsis
Testado no Chrome, FF, IE no Windows e Mac.
fonte
Existe uma solução para texto de várias linhas com css puro. É chamado
line-clamp
, mas só funciona em navegadores de kit da web. Existe, no entanto, uma maneira de imitar isso em todos os navegadores modernos (tudo mais recente que o IE8.) Além disso, ele só funciona em fundos sólidos porque você precisa de uma imagem de fundo para ocultar as últimas palavras da última linha. Aqui está como vai:Dado este html:
Aqui está o CSS:
ellipsis_bg.png sendo uma imagem da mesma cor do plano de fundo, que teria cerca de 100 px de largura e teria a mesma altura que a altura da linha.
Não é muito bonito, pois seu texto pode ser cortado no meio de uma carta, mas pode ser útil em alguns casos.
Referência: http://www.css-101.org/articles/line-clamp/line-clamp_for_non_webkit-based_browsers.php
fonte
Elipse de várias linhas CSS puro para conteúdo de texto:
Confira o snippet para ver um exemplo ao vivo.
fonte
Isso é semelhante ao de Alex, mas faz isso em tempo de log em vez de linear e usa um parâmetro maxHeight.
fonte
Existe uma solução jQuery simples de Devon Govett :
https://gist.github.com/digulla/5796047
fonte
Reescrevi a função de Alex para usar na biblioteca MooTools. Eu mudei um pouco para salto de palavra em vez de adicionar as reticências no meio de uma palavra.
fonte
Não consegui encontrar um script que funcionasse exatamente como eu queria, assim como o meu para o jQuery - algumas opções para definir mais a caminho :)
https://github.com/rmorse/AutoEllipsis
fonte
Fiquei um pouco surpreso com o comportamento do CSS.
A menos que eu fornecesse a largura do controle ao qual eu precisava vincular as elipses, não defendia minha causa. A largura é uma propriedade obrigatória a ser adicionada ??? Por favor, coloque seus pensamentos.
fonte
O ELLIPSIS USANDO SOMENTE CSS
* Este código funciona nos navegadores mais atuais. Se você tiver algum problema com o Opera e o IE (o que provavelmente não acontecerá), adicione-os no estilo:
* Esse recurso faz parte do CSS3. Sua sintaxe completa é:
fonte
Aqui está uma boa biblioteca de widgets / plug-ins que possui reticências embutidas: http://www.codeitbetter.co.uk/widgets/ellipsis/ Tudo o que você precisa fazer é referenciar a biblioteca e chamar o seguinte:
fonte
você pode fazer isso muito mais facilmente apenas com css, por exemplo: modo sass
e você tem reticências;)
fonte
Assim como @acSlater, eu não consegui encontrar algo para o que precisava, então rolei o meu. Compartilhamento caso outras pessoas possam usar:
Método: Uso: Link de código e demonstração: https://gist.github.com/cemerson/10368014fonte
fonte