Conheça Fred. Ele é uma mesa:
<table border="1" style="width: 100%;">
<tr>
<td>This cells has more content</td>
<td>Less content here</td>
</tr>
</table>
O apartamento de Fred tem o hábito bizarro de mudar de tamanho, então ele aprendeu a esconder parte de seu conteúdo para não empurrar todas as outras unidades e empurrar a sala da sra. Whitford para o esquecimento:
<table border="1" style="width: 100%; white-space: nowrap; table-layout: fixed;">
<tr>
<td style="overflow: hidden; text-overflow: ellipsis">This cells has more content</td>
<td style="overflow: hidden; text-overflow: ellipsis">Less content here</td>
</tr>
</table>
Isso funciona, mas Fred tem uma sensação incômoda de que se a célula direita (que ele é apelidada de Celldito) desistisse de um pouco de espaço, sua célula esquerda não seria truncada na maior parte do tempo. Você pode salvar sua sanidade?
Em resumo: como as células de uma tabela podem transbordar de maneira uniforme e somente quando todas elas abrem espaço em branco?
html
css
overflow
tablelayout
s4y
fonte
fonte
Respostas:
http://jsfiddle.net/7CURQ/
fonte
<col>
s, acrescentando as larguras aos<td>
estilos: jsfiddle.net/7CURQ/64Eu acredito que tenho uma solução não-javascript! Antes tarde do que nunca, certo? Afinal, essa é uma excelente pergunta e o Google está por toda parte. Não queria me contentar com uma correção de javascript, porque considero inaceitável o ligeiro tremor das coisas que se deslocam depois que a página é carregada.
Características :
Como funciona : dentro da célula da tabela, coloque duas cópias do conteúdo em dois elementos diferentes dentro de um elemento de contêiner relativamente posicionado. O elemento espaçador é posicionado estaticamente e, como tal, afetará a largura das células da tabela. Ao permitir que o conteúdo da célula espaçadora seja encapsulado, podemos obter a largura "mais adequada" das células da tabela que estamos procurando. Isso também nos permite usar o elemento absolutamente posicionado para restringir a largura do conteúdo visível à do pai relativamente posicionado.
Testado e trabalhando em: IE8, IE9, IE10, Chrome, Firefox, Safari, Opera
Imagens dos resultados :
JSFiddle : http://jsfiddle.net/zAeA2/
Exemplo de HTML / CSS :
fonte
title
em vez dedata-spacer
obter uma dica de ferramenta on mouse sobre :)Eu já enfrentei o mesmo desafio há alguns dias. Parece que Lúcifer Sam encontrou a melhor solução.
Mas notei que você deve duplicar o conteúdo no elemento espaçador. Achei que não era tão ruim, mas eu também gostaria de aplicar
title
pop-up ao texto recortado. E isso significa que o texto longo aparecerá pela terceira vez no meu código.Aqui proponho acessar o
title
atributo do:after
pseudoelemento para gerar espaçador e manter o HTML limpo.Funciona no IE8 +, FF, Chrome, Safari, Opera
http://jsfiddle.net/feesler/HQU5J/
fonte
Se o Javascript for aceitável, montei uma rotina rápida que você poderia usar como ponto de partida. Ele tenta adaptar dinamicamente as larguras das células usando a largura interna de um intervalo, em reação aos eventos de redimensionamento da janela.
Atualmente, assume-se que cada célula normalmente obtém 50% da largura da linha e recolhe a célula direita para manter a célula esquerda em sua largura máxima para evitar o transbordamento. Você pode implementar uma lógica de balanceamento de largura muito mais complexa, dependendo dos seus casos de uso. Espero que isto ajude:
Marcação para a linha que usei para testar:
JQuery que conecta o evento de redimensionamento:
fonte
Existe uma solução muito mais fácil e elegante.
Dentro da célula da tabela que você deseja aplicar o truncamento, basta incluir uma div do contêiner com o layout da tabela css: fixed. Esse contêiner ocupa toda a largura da célula da tabela pai, portanto, até age como responsivo.
Certifique-se de aplicar truncamento aos elementos da tabela.
Trabalhos do IE8 +
e css:
aqui está um Fiddle em funcionamento https://jsfiddle.net/d0xhz8tb/
fonte
O problema é o 'layout da tabela: fixo', que cria colunas de largura fixa com espaçamento uniforme. Porém, desabilitar essa propriedade css eliminará o excesso de texto, pois a tabela se tornará o maior possível (e não há nada a notar).
Sinto muito, mas neste caso Fred não pode comer seu bolo e comê-lo para ... a menos que o proprietário dê a Celldito menos espaço para trabalhar, em primeiro lugar, Fred não pode usá-lo.
fonte
Você pode tentar "ponderar" determinadas colunas, assim:
Você também pode tentar alguns ajustes mais interessantes, como usar colunas de 0% de largura e usar alguma combinação da
white-space
propriedade CSS.Você entendeu a ideia.
fonte
Sim, eu diria que trintadot tem, não há como fazê-lo, a menos que você use um método js. Você está falando de um conjunto complexo de condições de renderização que precisará definir. por exemplo, o que acontece quando as duas células estão ficando grandes demais para seus apartamentos, você terá que decidir quem tem prioridade ou simplesmente dar a eles uma porcentagem da área. você estica as pernas na outra célula, de qualquer forma, não há como fazê-lo com css. Embora existam algumas coisas bem descoladas que as pessoas fazem com o CSS, eu não pensei nisso. Eu realmente duvido que você possa fazer isso.
fonte
Como a resposta samplebias, novamente, se o Javascript for uma resposta aceitável, criei um plugin jQuery especificamente para esse fim: https://github.com/marcogrcr/jquery-tableoverflow
Para usar o plugin, basta digitar
Exemplo completo: http://jsfiddle.net/Cw7TD/3/embedded/result/
Editar% s:
fonte
Use algum hack css, parece que
display: table-column;
pode vir resgatar:JSFiddle: http://jsfiddle.net/blai/7u59asyp/
fonte
Basta adicionar as seguintes regras ao seu
td
:Exemplo:
PS: Se você deseja definir uma largura personalizada para outra
td
propriedade de usomin-width
.fonte
Esta questão aparece no topo do Google, então, no meu caso, usei o snippet css em https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/, mas aplicá-lo ao td NÃO deu o resultado desejado.
Eu tive que adicionar uma tag div ao redor do texto no td e as reticências finalmente funcionaram.
Código HTML abreviado;
CSS abreviado;
fonte
Verifique se "nowrap" resolve o problema até certo ponto. Nota: nowrap não é suportado em HTML5
fonte
white-space: nowrap
tem o mesmo efeito que onowrap
atributo (e estou usando no exemplo). Adicioná-lo aqui não muda nada, pelo que sei.você pode definir a largura da célula direita para o mínimo da largura exigida e aplicar o excesso de texto oculto + excesso de texto no interior da célula esquerda, mas o Firefox é um bug aqui ...
embora, aparentemente, o flexbox possa ajudar
fonte
Eu estive trabalhando recentemente nisso. Confira este teste do jsFiddle , tente alterar a largura da tabela base para verificar o comportamento).
A solução é incorporar uma tabela em outra:
Fred agora está feliz com a expansão do Celldito?
fonte
Não sei se isso vai ajudar alguém, mas resolvi um problema semelhante especificando tamanhos de largura específicos em porcentagem para cada coluna. Obviamente, isso funcionaria melhor se cada coluna tiver conteúdo com largura que não varie muito.
fonte
Eu tive o mesmo problema, mas precisava exibir várias linhas (onde
text-overflow: ellipsis;
falha). Eu o resolvo usando umtextarea
dentro deTD
e depois o estilizo para se comportar como uma célula da tabela.fonte
Dado que 'layout da tabela: fixo' é o requisito essencial do layout, que isso cria colunas não ajustáveis com espaçamento uniforme, mas que você precisa criar células com larguras percentuais diferentes, talvez defina o 'colspan' de suas células como um múltiplo?
Por exemplo, usando uma largura total de 100 para facilitar os cálculos de porcentagem e dizendo que você precisa de uma célula de 80% e outra de 20%, considere:
Obviamente, para colunas de 80% e 20%, você pode definir a coluna de célula de 100% de largura para 5, 80% para 4 e 20% para 1.
fonte
td
s?