Como posso definir a largura máxima de uma célula da tabela usando porcentagens?

100
<table>
<tr>
<td>Test</td>
<td>A long string blah blah blah</td>
</tr>
</table>

<style>
td{max-width:67%;}
</style>

O acima não funciona. Como posso definir a largura máxima de uma célula da tabela usando porcentagens?

Leo Jiang
fonte
Expanda em "não funciona" .
Sparky de
1
Você tem que se certificar de que o PAI do seu td tem uma largura específica (seja que você passe a largura: 100%; todo o caminho do corpo ao seu td, ou você pode dar ao pai (aqui: tr) 1000px ou o que você preferir . Ao usar %% em css, ele sempre usa o px exato definido no pai e, em seguida, transforma o px em %% para os filhos, pois eles têm um tamanho em relação ao pai.
Philipp Meissner
Para registro, largura máxima agora funciona no Safari e no Chrome. Não tenho certeza de quanto tempo ele é suportado.
Jacob

Respostas:

71

De acordo com a definição de largura máxima nas especificações CSS 2.1, “o efeito de 'largura mínima' e 'largura máxima' em tabelas, tabelas embutidas, células de tabela, colunas de tabela e grupos de colunas é indefinido.” Portanto, você não pode definir diretamente a largura máxima em um elemento td.

Se você quiser que a segunda coluna ocupe no máximo 67%, você pode definir a largura (que é, na verdade, a largura mínima, para células da tabela) para 33%, por exemplo, no caso de exemplo

td:first-child { width: 33% ;}

Definir isso para ambas as colunas não funcionará muito bem, pois tende a fazer com que os navegadores dêem às colunas a mesma largura.

Jukka K. Korpela
fonte
Na verdade, a largura máxima funciona no Safari e no Chrome agora. Não tenho certeza de quanto tempo ele é suportado.
Jacob
114

Uma pergunta antiga eu sei, mas agora isso é possível usando a propriedade css table-layout: fixedna tag da tabela. Responda abaixo a partir desta questão CSS largura percentual e estouro de texto em uma célula da tabela

Isso é feito facilmente usando table-layout: fixed, mas um pouco complicado porque poucas pessoas sabem sobre essa propriedade CSS.

table {
  width: 100%;
  table-layout: fixed;
}

Veja-o em ação no violino atualizado aqui: http://jsfiddle.net/Fm5bM/4/

superfônico
fonte
2
Obrigado! Eu estava com medo de que fixo significa que ele não vai recalcular a largura das células que não têm nenhuma largura definida, mas felizmente não é o caso.
fassl
4
Em seu jsfiddle, se eu remover as propriedades de largura, a largura máxima ainda não funciona, então não tenho certeza de como isso resolve o problema.
frezq
4
@superphonic Acho que você está confuso. Se você remover o max-widthnesse jsfiddle, a largura permanecerá a mesma, então não é o max-widthque o define. Pode ficar mais claro se você substituí-lo max-width: 10%pelo primeiro td... você verá que ele não muda. jsfiddle.net/w3f8ey22/1
frezq
4
table-layout: fixed não resolve o problema de OP. Não faz com que a 'largura mínima' funcione magicamente em uma célula da tabela. Ambos os violinos referenciados não têm diferença na exibição se table-layout: fixed for removido.
cmerriman
2
esta resposta é enganosa, pois não está relacionada à pergunta
Zoltán Süle
8

Sei que isso aconteceu literalmente um ano depois, mas achei melhor compartilhar. Eu estava tentando fazer a mesma coisa e me deparei com essa solução que funcionou para mim. Definimos uma largura máxima para a tabela inteira e, em seguida, trabalhamos com os tamanhos das células para o efeito desejado.

Coloque a tabela em seu próprio div e, em seguida, defina a largura, largura mínima e / ou largura máxima do div conforme desejado para a tabela inteira. Em seguida, você pode trabalhar e definir a largura e as larguras mínimas para outras células e a largura máxima para o div trabalhando efetivamente ao redor e para trás para atingir a largura máxima que desejamos.

<div id="tablediv">
<table width="100%">
 <tr>
  <td class="tdleft">Test</td>
  <td>A long string blah blah blah</td>
 </tr>
</table>
</div>

Então, em seus estilos, coloque:

#tablediv {
    width:90%;
    min-width:800px
    max-width:1500px;
}
.tdleft {
    width:20%;
    min-width:200px;
}

Reconhecidamente, isso não dá a você uma largura "máxima" de uma célula por si só, mas permite algum controle que pode funcionar no lugar de tal opção. Não tenho certeza se funcionará para suas necessidades. Sei que funcionou para a nossa situação, em que queremos que o lado da navegação na página seja escalonado para cima e para baixo até um ponto, mas para todas as telas grandes hoje em dia.

Damon
fonte
0

a porcentagem deve ser relativa a um tamanho absoluto, tente isto:

<table>
<tr>
<td>Testasdas 3123 1 dasd as da</td>
<td>A long string blah blah blah</td>
</tr>
</table>

<style>
table{width:200px;}
td{width:65%;border:1px solid black;}
</style>
dov.amir
fonte