Considere o seguinte exemplo: ( demonstração ao vivo aqui )
$(function() {
console.log("width = " + $("td").width());
});
td {
border: 1px solid black;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Hello Stack Overflow</td>
</tr>
</tbody>
</table>
A saída é width = 139
:, e as reticências não aparecem.
O que estou perdendo aqui?
width
eheight
nas células da tabela são sempre usadas como largura e altura mínimas . As células da tabela são diferentes!Respostas:
Aparentemente, adicionando:
resolve o problema também.
Outra solução possível é definir
table-layout: fixed;
a tabela e também defini-lawidth
. Por exemplo: http://jsfiddle.net/fd3Zx/5/fonte
display: table-cell
(o padrão paratd
elementos) não aceitam uma largura.display: block;
meio que derrota o propósito de usar uma tabela. Eu gosto datable-layout: fixed;
opção, funcionou bem para mim.table-layout:fixed
distribui a largura das colunas de uma maneira menos inteligente. Existe outra opção que atribuirá a largura da coluna da mesma maneiratable-layout: normal
e ainda exiba as reticências corretamente?Também é importante colocar
Na tabela que contém, também funciona bem no IE9 (se você utiliza largura máxima).
fonte
Como dito anteriormente, você pode usar,
td { display: block; }
mas isso anula o propósito de usar uma tabela.Você pode usar,
table { table-layout: fixed; }
mas talvez queira que ele se comporte de maneira diferente em algumas colunas.Portanto, a melhor maneira de conseguir o que você deseja seria agrupar seu texto em um
<div>
e aplicar seu CSS ao<div>
(não ao<td>
) desta forma:fonte
Tente usar em
max-width
vez dewidth
, a tabela ainda calculará a largura automaticamente.Funciona mesmo em
ie11
(com o modo de compatibilidade ie8).jsfiddle .
fonte
Página de demonstração
Para tabelas com largura dinâmica, encontrei o caminho abaixo para produzir resultados satisfatórios. Cada um
<th>
que deseje ter a capacidade de cortar o texto deve ter um elemento de revestimento interno que envolva o conteúdo da<th>
permissãotext-overflow
para trabalhar.Isso fará com que a largura do elemento seja "limitada" à largura da janela de visualização (janela do navegador) e resultará em um recorte de conteúdo responsivo. Defina as
vw
unidades com um valor satisfatório necessário.CSS mínimo:
Aqui está uma demonstração executável:
fonte
Apenas oferecer uma alternativa, pois eu tive esse problema e nenhuma das outras respostas aqui teve o efeito desejado que eu queria. Então, em vez disso, usei uma lista. Agora, semanticamente, as informações que eu estava produzindo poderiam ter sido consideradas dados tabulares, mas também dados listados.
Então, no final, o que eu fiz foi:
Então basicamente
ul
étable
,li
étr
espan
étd
.Então, no CSS, defino os
span
elementos comodisplay:block;
efloat:left;
(prefiro essa combinação,inline-block
pois ela funcionará em versões mais antigas do IE, para limpar o efeito de flutuação, consulte: http://css-tricks.com/snippets/css/clear- corrigir / ) e também ter as elipses:Então, tudo o que você faz é definir a
max-widths
extensão e isso dará à lista a aparência de uma tabela.fonte
<td><ul>...</ul></td>
)? Parece que não funciona para mim :(Em vez de usar reticências para resolver o problema de excesso de texto, descobri que uma entrada desabilitada e com estilo parecia melhor e ainda permite ao usuário visualizar e selecionar a sequência inteira, se necessário.
Parece um campo de texto, mas pode ser destacado para ser mais amigável ao usuário
fonte
Verifique a
box-sizing
propriedade css dos seustd
elementos. Eu tive um problema com o modelo css, que o define comoborder-box
valor. Você precisa definirbox-sizing: content-box
.fonte
Deixe suas mesas como estão. Apenas envolva o conteúdo dentro dos TDs com um intervalo que tenha o CSS de truncamento aplicado.
fonte
Se você não deseja definir a largura máxima como td (como nesta resposta ), pode definir a largura máxima como div:
function so_hack(){}
http://jsfiddle.net/fd3Zx/754/function so_hack(){}
Nota: 100% não funciona, mas 99% funciona no FF. Outros navegadores modernos não precisam de hacks div tolos.
fonte