Ajustar a largura da célula ao conteúdo


266

Dada a marcação a seguir, como eu poderia usar o CSS para forçar uma célula (todas as células da coluna) a se ajustar à largura do conteúdo dentro dela, em vez de esticar (qual é o comportamento padrão)?

<style type="text/css">
td.block
{
border: 1px solid black;
}
</style>
<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

Edição: Eu sei que eu poderia codificar a largura, mas prefiro não fazer isso, pois o conteúdo que vai nessa coluna é dinâmico.

Olhando para a imagem abaixo, a primeira imagem é o que a marcação produz. A segunda imagem é o que eu quero.

insira a descrição da imagem aqui


Eu não entendo sua pergunta. Deseja limitar a última coluna à largura específica?
precisa saber é o seguinte

8
@diEcho eu pensei que era bastante claro. Vou adicionar uma foto ou duas.
Mansfield

Possível duplicado da LARGURA coluna da tabela CSS
Vadzim

Respostas:


451

Não sei se entendi sua pergunta, mas vou tentar. JSiddle do exemplo .

HTML:

<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

CSS:

td{
    border:1px solid #000;
}

tr td:last-child{
    width:1%;
    white-space:nowrap;
}

3
por que você escreve em <table style="width:100%">vez de<table width="100%" >
diEcho

17
@diEcho Eu não escrevi essa parte, isso foi do código de exemplo. Independentemente disso, é uma má prática usar o atributo width nos elementos. Neste exemplo rápido, o CSS embutido é bom, mas deve ser abstraído para um arquivo se esse for o código no nível de produção.
MetalFrog

45
Uma maneira mais limpa de fazer isso IMO seria definir um estilo chamado "nostretch" (ou algo parecido) e, em seguida, apenas definir nostretch no CSS para ter largura: 1% e nowrap. Então o último TD teria 'class = "nostretch block"'. Dessa forma, você pode "nostretch" qualquer célula que desejar.
Tim Holt

3
Esta é uma boa solução, mas, infelizmente, no Bootstrap 3, meus grupos de botões serão agrupados com isso: jsfiddle.net/wexdX/326 Alguma idéia de como posso suprimi-la?
Martin Braun

5
Isso só funciona quando o conteúdo é maior que a largura: 1% - certo? Como se o conteúdo for menor que a largura: 1%, a célula será maior.
Adam

44

Configuração

max-width:100%;
white-space:nowrap;

vai resolver o seu problema.


8

Para mim, este é o melhor ajuste automático e redimensionamento automático de tabelas e colunas (use css! Important ... somente se você não puder sem)

.myclass table {
    table-layout: auto !important;
}

.myclass th, .myclass td, .myclass thead th, .myclass tbody td, .myclass tfoot td, .myclass tfoot th {
    width: auto !important;
}

Não especifique a largura do css para a tabela ou para as colunas da tabela. Se o conteúdo da tabela for maior, ele passará do tamanho da tela para.


3

Definir a largura do CSS para 1% ou 100% de um elemento, de acordo com todas as especificações que eu pude descobrir, está relacionado ao pai. Embora o Blink Rendering Engine (Chrome) e o Gecko (Firefox) no momento da escrita pareçam lidar com 1% ou 100% (faça uma coluna encolher ou uma coluna para preencher o espaço disponível) bem, isso não é garantido de acordo com todas as especificações CSS Eu poderia encontrar para processá-lo corretamente.

Uma opção é substituir a tabela por divs flex do CSS4:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

Isso funciona em novos navegadores, ou seja, IE11 +, veja a tabela na parte inferior do artigo.


1

Há muitas maneiras de fazer isso!

corrija-me se estiver errado, mas a pergunta está procurando esse tipo de resultado.

<table style="white-space:nowrap;width:100%;">
<tr>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:auto">this should be the content width</td>
</tr>
</table>

Os 2 primeiros campos "compartilharão" a página restante (NOTA: se você adicionar mais texto aos campos de 50%, será necessário mais espaço) e o último campo dominará a tabela constantemente.

Se você deseja deixar o texto quebrar, pode mover o espaço em branco: nowrap; ao estilo do terceiro campo
será a única maneira de iniciar uma nova linha nesse campo.

Como alternativa, você pode definir um comprimento no último campo, ou seja. width: 150px e deixe porcentagens nos 2 primeiros campos.

Espero que isto ajude!


-1

Simples:

    <div style='overflow-x:scroll;overflow-y:scroll;width:100%;height:100%'>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.