Eu quero usar CSS text-overflow
em uma célula da tabela, de modo que, se o texto for muito longo para caber em uma linha, ele será cortado com reticências em vez de quebrar em várias linhas. Isso é possível?
Eu tentei isso:
td {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
Mas isso white-space: nowrap
parece fazer com que o texto (e sua célula) se expanda continuamente para a direita, empurrando a largura total da tabela para além da largura do seu contêiner. Sem ele, no entanto, o texto continua a quebrar em várias linhas quando atinge a borda da célula.
overflow
bem. Tente colocar uma div na célula e denominá-la.Respostas:
Para recortar um texto com reticências quando ela estourar uma célula da tabela, você precisará definir a
max-width
propriedade CSS em cadatd
classe para que o estouro funcione. Nenhuma div extra de layout é necessáriaPara layouts responsivos; use a
max-width
propriedade CSS para especificar a largura mínima efetiva da coluna ou use apenasmax-width: 0;
para flexibilidade ilimitada. Além disso, a tabela que contém precisará de uma largura específica, normalmentewidth: 100%;
, e as colunas terão sua largura definida como porcentagem da largura totalHistórico: para o IE 9 (ou menos), você precisa ter isso em seu HTML, para corrigir um problema de renderização específico do IE
fonte
width: 100%;
emin-width: 1px;
a célula sempre será a maior possível e usará reticências para truncar o texto quando necessário (e não quando a largura do elemento atingir um determinado tamanho) - isso é muito útil para layouts responsivos.display: table-cell
fato, mas não quando omax-width
é definido em porcentagem (%). Testado em FF 32table-layout: fixed
no elemento comdisplay: table
irá fazer o truqueEspecificar uma
max-width
largura fixa ou não funciona para todas as situações, e a tabela deve ser fluida e espaçar automaticamente suas células. É para isso que servem as mesas.Use isto: http://jsfiddle.net/maruxa1j/
HTML:
CSS:
Funciona no IE9 e em outros navegadores.
fonte
<span>
elementos.display: block
fez nãoPor que isso acontece?
Parece que esta seção no w3.org sugere que o excesso de texto se aplica apenas a elementos de bloco :
O MDN diz o mesmo .
Este jsfiddle possui seu código (com algumas modificações de depuração), que funciona bem se for aplicado a um em
div
vez de atd
. Ele também tem a única solução alternativa em que eu poderia pensar rapidamente, envolvendo o conteúdo dotd
em umdiv
bloco contendo . No entanto, isso parece uma marcação "feia" para mim, então espero que outra pessoa tenha uma solução melhor. O código para testar isso se parece com o seguinte:fonte
Caso você não queira definir largura fixa para nada
A solução abaixo permite que você tenha um conteúdo longo da célula da tabela, mas não deve afetar a largura da tabela pai nem a altura da linha pai. Por exemplo, onde você deseja ter uma tabela com
width:100%
isso ainda aplica o recurso de tamanho automático a todas as outras células. Útil em grades de dados com a coluna "Notas" ou "Comentário" ou algo assim.Adicione estas três regras ao seu CSS:
Formate HTML como este em qualquer célula da tabela em que você deseja um estouro dinâmico de texto:
Além disso, aplique o desejado
min-width
(ou nenhum) à célula da tabela.Claro que o violino: https://jsfiddle.net/9wycg99v/23/
fonte
max-width: X
pois agora elas podem ser mais amplas - pensei que isso fosse pordisplay: flex
ser usado, mas removi isso e não vejo diferença ...Parece que se você especificar
table-layout: fixed;
otable
elemento, seus estilostd
deverão entrar em vigor. Isso também afetará o tamanho das células.O Sitepoint discute um pouco os métodos de layout da tabela aqui: http://reference.sitepoint.com/css/tableformatting
fonte
Se você apenas deseja que a tabela faça o layout automático
Sem usar
max-width
, ou porcentagem de larguras de coluna,table-layout: fixed
etc.https://jsfiddle.net/tturadqq/
Como funciona:
Etapa 1: deixe o layout automático da tabela fazer sua parte.
Quando houver uma ou mais colunas com muito texto, as outras colunas serão reduzidas o máximo possível e, em seguida, envolverá o texto das colunas longas:
Etapa 2: agrupar o conteúdo da célula em uma div e defina essa div como
max-height: 1.1em
(o 0.1em extra é para caracteres que ficam um pouco abaixo da base do texto, como o final de 'g' e 'y')
Etapa 3: defina
title
as divsIsso é bom para a acessibilidade e é necessário para o pequeno truque que usaremos em um momento.
Etapa 4: adicione um CSS
::after
na divEsta é a parte complicada. Definimos um CSS
::after
, comcontent: attr(title)
, em seguida, posicionamos isso em cima da div e definimostext-overflow: ellipsis
. Eu pintei de vermelho aqui para deixar claro.(Observe como a coluna longa agora possui reticências de cauda)
Etapa 5: defina a cor do texto div para
transparent
E nós terminamos!
fonte
<a>
vez de<div>
dentro da célula da tabela. A adiçãoword-break: break-all;
resolve o problema. Exemplo: jsfiddle.net/de0bjmqvQuando está na porcentagem de largura da tabela, ou você não pode definir largura fixa na célula da tabela. Você pode se inscrever
table-layout: fixed;
para fazê-lo funcionar.fonte
Enrole o conteúdo da célula em um bloco flexível. Como bônus, a célula se ajusta automaticamente à largura visível.
fonte
white-space: nowrap;
àchild
classe.Eu resolvi isso usando uma div absolutamente posicionada dentro da célula (relativa).
É isso aí. Em seguida, você pode adicionar um valor top: à div ou centralizá-lo verticalmente:
Para obter algum espaço no lado direito, você pode reduzir um pouco a largura máxima.
fonte
Isso funcionou no meu caso, no Firefox e no Chrome:
fonte
Esta é a versão que funciona no IE 9.
http://jsfiddle.net/s27gf2n8/
fonte