J'ai un tableau simple qui est utilisé pour une boîte de réception comme suit:
<table border="1">
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
Comment définir la largeur de sorte que le début et la date représentent 15% de la largeur de la page et que le sujet représente 70%. Je veux aussi que le tableau prenne toute la largeur de la page.
<table style="width: 100%">
<colgroup>
<col span="1" style="width: 15%;">
<col span="1" style="width: 70%;">
<col span="1" style="width: 15%;">
</colgroup>
<!-- Put <thead>, <tbody>, and <tr>'s here! -->
<tbody>
<tr>
<td style="background-color: #777">15%</td>
<td style="background-color: #aaa">70%</td>
<td style="background-color: #777">15%</td>
</tr>
</tbody>
</table>
HTML:
<table>
<thead>
<tr>
<th class="from">From</th>
<th class="subject">Subject</th>
<th class="date">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>[from]</td>
<td>[subject]</td>
<td>[date]</td>
</tr>
</tbody>
</table>
CSS:
table {
width: 100%;
border: 1px solid #000;
}
th.from, th.date {
width: 15%
}
th.subject {
width: 70%; /* Not necessary, since only 70% width remains */
}
La meilleure pratique consiste à garder votre HTML et CSS séparés pour éviter les doubles emplois et la séparation des problèmes (HTML pour la structure et la sémantique, et CSS pour la présentation).
Notez que, pour que cela fonctionne dans les anciennes versions d'Internet Explorer, vous devrez peut-être attribuer à votre tableau une largeur spécifique (par exemple, 900 pixels). Ce navigateur a des problèmes pour rendre un élément avec des cotes en pourcentage si son enveloppe n'a pas de cotes exactes.
Utilisez les CSS ci-dessous, la première déclaration garantira que votre table respecte les largeurs que vous indiquez (vous devrez ajouter les classes dans votre code HTML):
table{
table-layout:fixed;
}
th.from, th.date {
width: 15%;
}
th.subject{
width: 70%;
}
Autre manière avec une seule classe tout en conservant vos styles dans un fichier CSS, qui fonctionne même dans IE7:
<table class="mytable">
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
<style>
.mytable td, .mytable th { width:15%; }
.mytable td + td, .mytable th + th { width:70%; }
.mytable td + td + td, .mytable th + th + th { width:15%; }
</style>
Plus récemment, vous pouvez également utiliser le sélecteur nth-child()
de CSS3 (IE9 +), où vous venez de placer le n °. de la colonne respective dans la parenthèse au lieu de les lier avec le sélecteur adjacent. Comme ceci, par exemple:
<style>
.mytable tr > *:nth-child(1) { width:15%; }
.mytable tr > *:nth-child(2) { width:70%; }
.mytable tr > *:nth-child(3) { width:15%; }
</style>
Ce sont mes deux suggestions.
Utilisation des classes. Il n'est pas nécessaire de spécifier la largeur des deux autres colonnes car elles seront automatiquement définies à 15% par le navigateur.
table { table-layout: fixed; }
.subject { width: 70%; }
<table>
<tr>
<th>From</th>
<th class="subject">Subject</th>
<th>Date</th>
</tr>
</table>
Sans utiliser de cours. Trois méthodes différentes mais le résultat est identique.
une)
table { table-layout: fixed; }
th+th { width: 70%; }
th+th+th { width: 15%; }
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
b)
table { table-layout: fixed; }
th:nth-of-type(2) { width: 70%; }
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
c) Celui-ci est mon préféré. Identique à b) mais avec un meilleur support du navigateur.
table { table-layout: fixed; }
th:first-child+th { width: 70%; }
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
En fonction de votre corps (ou de la div qui enveloppe votre table), vous devriez être capable de faire ceci:
body {
width: 98%;
}
table {
width: 100%;
}
th {
border: 1px solid black;
}
th.From, th.Date {
width: 15%;
}
th.Date {
width: 70%;
}
<table>
<thead>
<tr>
<th class="From">From</th>
<th class="Subject">Subject</th>
<th class="Date">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Me</td>
<td>Your question</td>
<td>5/30/2009 2:41:40 AM UTC</td>
</tr>
</tbody>
</table>
<table>
<col width="130">
<col width="80">
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
<tr>
<td>February</td>
<td>$80</td>
</tr>
</table>
N'utilisez pas l'attribut border, utilisez CSS pour tous vos besoins en matière de style.
<table style="border:1px; width:100%;">
<tr>
<th style="width:15%;">From</th>
<th style="width:70%;">Subject</th>
<th style="width:15%;">Date</th>
</tr>
... rest of the table code...
</table>
Cependant, incorporer CSS comme cela est une mauvaise pratique - on devrait plutôt utiliser des classes CSS et placer les règles CSS dans un fichier CSS externe.
Essayez ceci à la place.
<table style="width: 100%">
<tr>
<th style="width: 20%">
column 1
</th>
<th style="width: 40%">
column 2
</th>
<th style="width: 40%">
column 3
</th>
</tr>
<tr>
<td style="width: 20%">
value 1
</td>
<td style="width: 40%">
value 2
</td>
<td style="width: 40%">
value 3
</td>
</tr>
</table>
Voici un autre moyen minimal de le faire dans CSS qui fonctionne même dans les navigateurs plus anciens qui ne supportent pas :nth-child
et les sélecteurs similaires: http://jsfiddle.net/3wZWt/ .
HTML:
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
<tr>
<td>Dmitriy</td>
<td>Learning CSS</td>
<td>7/5/2014</td>
</tr>
</table>
CSS:
table {
border-collapse: collapse;
width: 100%;
}
tr > * {
border: 1px solid #000;
}
tr > th + th {
width: 70%;
}
tr > th + th + th {
width: 15%;
}
table { table-layout: fixed; }
.subject { width: 70%; }
<table>
<tr>
<th>From</th>
<th class="subject">Subject</th>
<th>Date</th>
</tr>
</table>
Ajoutez colgroup après votre balise de table. Définissez la largeur et le nombre de colonnes ici. et ajouter une balise tbody. Mets ton tr dans le corps.
<table>
<colgroup>
<col span="1" style="width: 30%;">
<col span="1" style="width: 70%;">
</colgroup>
<tbody>
<tr>
<td>First column</td>
<td>Second column</td>
</tr>
</tbody>
</table>