Forcer les largeurs de colonne de table à toujours être fixes quel que soit le contenu


89

J'ai une table html avec table-layout: fixedet un td avec une largeur définie. La colonne se développe toujours pour contenir le contenu du texte qui ne contient pas d'espace. Existe-t-il un moyen de résoudre ce problème autre que d'encapsuler le contenu de chaque td dans un div?

Exemple: http://jsfiddle.net/6p9K3/29/

<table>
    <tbody>
        <tr>
            <td style="width: 50px;">Test</td>
            <td>Testing 1123455</td>
        </tr><tr>
            <td style="width: 50px;">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td>
            <td>B</td>
        </tr>
    </tbody>
</table>

table
{
    table-layout: fixed;
}

td
{
    border: 1px solid green;
    overflow: hidden;
}

Dans l'exemple, vous pouvez voir que la colonne avec AAAAAAAAAAAA ... se développe bien qu'elle soit explicitement définie sur 50 px de large.


Réponses:



22

Essayez de regarder dans le CSS suivant:

word-wrap:break-word;

Les navigateurs Web ne doivent pas interrompre les «mots» par défaut, de sorte que vous rencontrez un comportement normal d'un navigateur. Cependant, vous pouvez remplacer cela avec la directive CSS word-wrap.

Vous devrez définir une largeur sur le tableau global puis une largeur sur les colonnes. "largeur: 100%;" devrait également être OK en fonction de vos besoins.

L'utilisation de la fonction Word-wrap n'est peut-être pas ce que vous voulez, mais elle est utile pour afficher toutes les données sans déformer la mise en page.


2
Ceci, combiné à la réponse d'Arie Shaw, m'a donné le comportement que je recherchais. La colonne a toujours la même largeur quel que soit le texte et elle enveloppe le texte même s'il n'y a pas d'espaces.
datadamnation du

Je cherche quelque chose comme ça, mais cela ne semble pas fonctionner si la table n'est pas définie sur table-layout: fixed. Cependant, la disposition de table fixe n'est pas stylable en CSS si la tête de table th a un colspan. Comment faire fonctionner le word-wrap dans une table? stackoverflow.com/questions/42371945/…
Manuel

13

Rendre la table solide comme le roc AVANT le css. Calculez la largeur de votre tableau, puis utilisez une ligne de «contrôle» dans laquelle chaque td a une largeur explicite, qui s'ajoutent à la largeur de la balise table.

Devoir faire des centaines d'e-mails html pour travailler partout, en utilisant d'abord le bon HTML, puis le style w / css contournera de nombreux problèmes dans tous les IE, webkit et mozillas.

donc:

<table width="300" cellspacing="0" cellpadding="0">
  <tr>
    <td width="50"></td>
    <td width="100"></td>
    <td width="150"></td>
  </tr>
  <tr>
    <td>your stuff</td>
    <td>your stuff</td>
    <td>your stuff</td>
  </tr>
</table>

Gardera une table à 300px de large. Regardez des images plus grandes que la largeur par des extrêmes


1
w3school dit non pris en charge dans html5
v.oddou

L' widthattribut est, vous utilisez le CSS widthpropriété ou, le HTML recommandé 5 façon de largeur de colonne ensemble, l' utilisation <colgroup>et <col>éléments juste après l' <table>étiquette , et avant tout <thead>, <tbody>ou des <tr>éléments.
S. Esteves

9

Vous pouvez ajouter un divau td, puis le styliser. Cela devrait fonctionner comme prévu.

<td><div>AAAAAAAAAAAAAAAAAAA</div></td>

Puis le css.

td div { width: 50px; overflow: hidden; }

3

Vous pouvez également travailler avec "overflow: hidden" ou "overflow-x: hidden" (uniquement pour la largeur). Cela nécessite une largeur définie (et / ou une hauteur?) Et peut-être aussi un "display: block".

"Overflow: Hidden" masque tout le contenu, qui ne rentre pas dans la zone définie.

Exemple:

http://jsfiddle.net/NAJvp/

HTML:

<table border="1">
    <tr>
        <td><div>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>
        <td>bbb</td>
        <td>cccc</td>
    </tr>
</table>

CSS:

td div { width: 100px; overflow-y: hidden; }

EDIT: Honte à moi, je l'ai vu, vous utilisez déjà le "débordement". Je suppose que cela ne fonctionne pas, car vous ne définissez pas "display: block" sur votre élément ...


0

J'essaierais de le régler sur max-width: 50px;


et largeur: 50px; si vous voulez vraiment avoir une largeur fixe.
Adrian P.

0

Vous pouvez également utiliser des pourcentages et / ou spécifier dans les en-têtes de colonne:

<table width="300">  
  <tr>
    <th width="20%">Column 1</th>
    <th width="20%">Column 2</th>
    <th width="20%">Column 3</th>
    <th width="20%">Column 4</th>
    <th width="20%">Column 5</th>
  </tr>
  <tr>
    <!--- row data -->
  </tr>
</table>

Le bonus avec les pourcentages est une moindre maintenance du code: vous pouvez modifier la largeur de votre table sans avoir à redéfinir la largeur des colonnes.

Mise en garde: Je crois comprendre que la largeur du tableau spécifiée en pixels n'est pas prise en charge dans HTML 5; vous devez utiliser CSS à la place.


-1

Cela fonctionne pour moi

td::after { 
content: ''; 
display: block; 
width: 30px;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.