2009-03-08 6 views
1

J'ai une disposition basée sur une table, avec une table principale à deux colonnes, pour les côtés gauche et droit d'un formulaire. Chaque colonne contient une table interne à deux colonnes, avec une étiquette et une colonne d'entrée, et chaque champ sur sa propre ligne. Puis-je utiliser CSS pour définir la largeur des deux colonnes d'entrée?Comment définir la largeur de tous les éléments dans une colonne de table avec CSS

E.g.

<table id="frameTable"> 
    <tr> 
    <td id="leftFieldList"> 
     <table class="formColumn"> 
     <tr> 
      <td>Surname</td> 
      <td><asp:TextBox.....></td> 
     </tr> 
     <tr> 
      <td>Address</td> 
      <td><asp:TextBox.....></td> 
     </tr> 
     .... 
     .... 
     <table> 
    </td> 
</table> 

Dans la table avec classe « formColumn », je veux régler la largeur de la deuxième <td>, avec les commandes du serveur. Je préférerais faire ceci sans assigner une classe à chaque seconde <td> dans mes listes de champs.

Répondre

7

La meilleure solution autour de: utiliser col tags!

<style> .col2 { width: 200px; } </style> 
... 

<table class="formColumn"> 
    <colgroup> 
    <col></col> 
    <col class="col2"></col> 
    </colgroup> 
    <tbody> 
    <tr>... 
    </tbody> 
</table> 
+0

juste ajouter à ceci: voici la spécification col http://www.w3.org/TR/html4/struct/tables.html#h-11.2.4 sont incroyablement utiles Col. exactement le but des besoins d'affiches –

+1

oh et une autre chose à ajouter, les cols supportent réellement les classes css. Donc c'est vraiment une solution css –

+0

Oui, l'élément col est la meilleure solution. Vous pouvez définir le style des colonnes avec CSS: utiliser avec .theclass {width: thewidth} – DisgruntledGoat

2

Habituellement, vous pouvez faire:

table.formColumn tr td:last-child { width: 200px; } 

mais IE7 ne reconnaît pas le dernier enfant, alors vous pourriez avoir à aller avec

table.formColumn tr td+td { width: 200px; } 

IE6 ne reconnaît pas le sélecteur +, selon quirksmode.org. Si vous envisagez de prendre en charge IE6, je n'ai pas de solution pour vous, avec votre balisage actuel. Cela dit, certains soutiennent que vous ne devriez pas utiliser de tables pour concevoir la mise en page de votre site Web. Cette deuxième table (formColumn) aurait pu être remplacé par quelque chose comme ceci:

<fieldset><label ...>Surname</label><YourTextInput /></fieldset> 
+0

Bonne réponse. Surtout comme la suggestion fieldset; J'ai lutté pour trouver un moyen de suggérer cela sans paraître impoli et finalement abandonné, mais je pense que vous l'avez cloué. Suppression de la mienne, upvoting this. – Shog9

+0

Pourquoi seriez-vous impoli? Je te connais et ta maîtrise du web, et je connais mon ignorance.J'ai utilisé des tableaux parce que je copiais comment notre mise en page au travail est faite, et cette disposition est ce qui est impoli. – ProfK

1

Si vous voulez les mettre à la même largeur, il est facile:

table.formColumn td { 
    width: 150px; 
} 

Si vous voulez qu'ils soient Différentes largeurs, c'est un peu plus problématique mais pas énormément. l'option la plus simple est juste d'attribuer une classe aux éléments td dans la première rangée:

<table id="frameTable"> 
    <tr> 
    <td id="leftFieldList"> 
     <table class="formColumn"> 
     <tr> 
      <td class="left">Surname</td> 
      <td class="right"><asp:TextBox.....></td> 
     </tr> 
     <tr> 
      <td>Address</td> 
      <td><asp:TextBox.....></td> 
     </tr> 
     .... 
     .... 
     <table> 
    </td> 
</table> 

alors:

table.formColumn td.left { 
    width: 150px; 
} 


table.formColumn td.right { 
    width: 300px; 
} 

Depuis le reste de la colonne prendra les largeurs.

Vous pouvez également utiliser le sélecteur +, mais ce n'est pas pris en charge dans IE6:

table.formColumn td { 
    width: 150px; 
} 


table.formColumn td + td { 
    width: 300px; 
} 
3

Une autre solution IE6 est hostile

.formColumn td:last-child { width: 200px; } 

Si vous n'êtes pas coincé sur CSS, vous pouvez utiliser des groupes col

<table class="formColumn"> 
    <colgroup> 
     <col /> 
     <col width="200px" /> 
    </colgroup> 
    <tr> 
     <td>Surname</td> 
     <td><asp:textbox..../></td> 
    </tr> 
</table> 
+0

pas coincé sur CSS - Je n'ai pas pensé HTML pourrait le faire. – ProfK

Questions connexes