Comment créer des tableaux verticaux en HTML? Par vertical, je veux dire que les rangées seront verticales avec les en-têtes de tableau à gauche.
J'ai également besoin de ce chemin pour pouvoir accéder à ces lignes (dans ce cas vertical) comme dans une table normale, avec <tr>
. En effet, je récupère les données de manière dynamique pour une ligne (comme pour la ligne A) et les insère dans la table. J'utilise angularJS pour éviter les manipulations du DOM, donc je ne cherche pas de manipulations complexes du DOM avec Javascript.
Vous pouvez utiliser <th>
comme première cellule de la ligne. Voici un violon: http://jsfiddle.net/w5nWG/
@vishesh vous voulez donc transposer votre table après que DOM soit prêt? essayez ceci http://Gist.github.com/pgaertig/2376975
$(function() {
var t = $('#thetable tbody').eq(0);
var r = t.find('tr');
var cols= r.length;
var rows= r.eq(0).find('td').length;
var cell, next, tem, i = 0;
var tb= $('<tbody></tbody>');
while(i<rows){
cell= 0;
tem= $('<tr></tr>');
while(cell<cols){
next= r.eq(cell++).find('td').eq(0);
tem.append(next);
}
tb.append(tem);
++i;
}
$('#thetable').append(tb);
$('#thetable').show();
}
Si vous voulez que <tr>
affiche des colonnes, pas des lignes, essayez ce CSS simple
tr { display: block; float: left; }
th, td { display: block; }
Cela devrait afficher ce que vous voulez dans la mesure où vous travaillez avec des cellules monolignes (le comportement de la table est supprimé), voir le violon .
David Bushell a fourni une solution et une implémentation ici: http://dbushell.com/demos/tables/rt_05-01-12.html
L'astuce consiste à utiliser
display: inline-block;
sur les lignes de la table etwhite-space: nowrap;
sur le corps de la table.
Si je comprends bien, il n’existe pas de solution magique pour inverser la tendance. En ce qui concerne une rotation (90 degrés), il est fort probable que la table entière s’écarterait, de la même manière qu’une feuille de papier si on se retournait 90 degrés, et ce n'est pas ce que vous voulez (je pense?).
Si cela est possible (et réaliste), je suggérerais de le modifier dans le code HTML lui-même.
Comme indiqué dans les commentaires, il n'y a aucune suggestion ici, alors voici une alternative javascript de base [même si ce n'est pas ce que vous cherchiez] en utilisant jQuery. Sans connaître votre expérience, j'ai pris le temps de tout commenter pour être sûr de bien comprendre le code.
// Change the selector to suit your needs
$('table').each(function(){
var table = $(this), // Reference each table in the page
header = $('thead', table), // Reference the table head
headings = []; // Set an array for each column
// If the table doesn't have a header, use it's footer for column titles
if(!header.length)
header = $('tfoot', table);
// If there's no header nor footer, skip to the next table
if(!header.length)
continue;
// Loop each heading to get the header value
$('th', header).each(function(){
var heading = $(this).html(); // Each heading value content, including any HTML; use .text() to use the text only
headings.Push(heading); // Add heading value to array
});
// Make sure the content is wrapped in a tbody element for proper syntax
if(!$('tbody', table).length)
table.wrapInner('<tbody></tbody>');
// Set counter to reference the heading in the headings array
var x = 0;
// Loop through each row in the table
$('tbody tr').each(function(){
var row = $(this),
label = headings[x];
// Add the heading to the row, as a <th> for visual cues (default: bold)
row.prepend('<th>'+label+'</th>')
// Move to the next value in the headings value
x++;
});
});
<table>
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
</table>
table { border-collapse: collapse; }
table tr { display: block; float: left; }
table tr tr{ display: block; float: left; }
table th, table td { display: block; border: none; }