J'essaie de concevoir du HTML / CSS qui peut mettre une bordure autour de lignes spécifiques dans un tableau. Oui, je sais que je ne suis pas vraiment censé utiliser des tableaux pour la mise en page mais je ne connais pas encore assez de CSS pour le remplacer complètement.
Quoi qu'il en soit, j'ai une table avec plusieurs lignes et colonnes, certaines fusionnées avec rowspan et colspan, et j'aimerais mettre une simple bordure autour de certaines parties de la table. Actuellement, j'utilise 4 classes CSS distinctes (haut, bas, gauche, droite) que j'attache aux <td>
cellules situées respectivement en haut, en bas, à gauche et à droite du tableau.
.top {
border-top: thin solid;
border-color: black;
}
.bottom {
border-bottom: thin solid;
border-color: black;
}
.left {
border-left: thin solid;
border-color: black;
}
.right {
border-right: thin solid;
border-color: black;
}
<html>
<body>
<table cellspacing="0">
<tr>
<td>no border</td>
<td>no border here either</td>
</tr>
<tr>
<td class="top left">one</td>
<td class="top right">two</td>
</tr>
<tr>
<td class="bottom left">three</td>
<td class="bottom right">four</td>
</tr>
<tr>
<td colspan="2">once again no borders</td>
</tr>
<tr>
<td class="top bottom left right" colspan="2">hello</td>
</tr>
<tr>
<td colspan="2">world</td>
</tr>
</table>
</html>
Existe-t-il un moyen plus simple de faire ce que je veux? J'ai essayé d'appliquer le haut et le bas à un <tr>
mais cela n'a pas fonctionné. (ps Je suis nouveau dans CSS, donc il y a probablement une solution vraiment basique à cela que j'ai manquée.)
Remarque: j'ai besoin d'avoir plusieurs sections bordées. L'idée de base est d'avoir plusieurs clusters bordés contenant chacun plusieurs lignes.
la source
Réponses:
Et pourquoi pas
tr {outline: thin solid black;}
? Fonctionne pour moi sur des éléments tr ou tbody, et semble être compatible avec la plupart des navigateurs, y compris IE 8+ mais pas avant.la source
Merci à tous ceux qui ont répondu! J'ai essayé toutes les solutions présentées ici et j'ai fait plus de recherches sur Internet pour d'autres solutions possibles, et je pense en avoir trouvé une qui est prometteuse:
Production:
Au lieu d'avoir à ajouter les
top
,bottom
,left
et desright
classes à tous<td>
, tout ce que je dois faire est d' ajoutertop row
au sommet<tr>
,bottom row
au fond<tr>
, etrow
à tous<tr>
entre les deux. Y a-t-il un problème avec cette solution? Y a-t-il des problèmes multiplateformes dont je devrais être conscient?la source
cellspacing
attribut est obsolète en HTML5. On dirait que CSStable { border-collapse: collapse; border-spacing: 0; }
est la voie à suivre maintenant.Si vous définissez le
border-collapse
style surcollapse
sur la table parent, vous devriez être en mesure de styliser letr
: (les styles sont en ligne pour la démonstration)Production:
la source
Je jouais juste avec ça aussi, et cela semblait être la meilleure option pour moi:
Notez que cela empêchera l'utilisation de largeurs de colonne fluides / automatiques , car les cellules ne s'aligneront plus avec celles des autres lignes, mais le formatage des bordures / couleurs fonctionne toujours correctement. La solution consiste à donner au TR et aux TD une largeur spécifiée (soit px ou%).
Bien sûr, vous pouvez faire le sélecteur
tr.myClass
si vous ne souhaitez l'appliquer qu'à certaines lignes. Apparemment,display: table
cela ne fonctionne pas pour IE 6/7, mais il y a probablement d'autres hacks (hasLayout?) Qui pourraient fonctionner pour ceux-là. :-(la source
Voici une approche utilisant des éléments du corps qui pourrait être le moyen de le faire. Vous ne pouvez pas définir la bordure sur un tbody (comme vous ne pouvez pas sur un tr) mais vous pouvez définir la couleur d'arrière-plan. Si l'effet que vous souhaitez obtenir peut être obtenu avec une couleur d'arrière-plan sur les groupes de lignes au lieu d'une bordure, cela fonctionnera.
la source
Regroupez les lignes à l'aide de l'
<tbody>
étiquette, puis appliquez le styleEt le css dans style.css
la source
La seule autre façon dont je peux penser pour le faire est de placer chacune des lignes autour desquelles vous avez besoin d'une bordure dans une table imbriquée. Cela rendra la bordure plus facile à faire mais créera potentiellement d'autres problèmes de mise en page, vous devrez définir manuellement la largeur des cellules du tableau, etc.
Votre approche peut être la meilleure en fonction de vos autres exigences de mise en page et l'approche suggérée ici n'est qu'une alternative possible.
la source
En fonction de votre exigence que vous vouliez placer une bordure autour d'un bloc arbitraire de cellules MxN, il n'y a vraiment pas de moyen plus simple de le faire sans utiliser Javascript. Si vos cellules sont fixes, vous pouvez utiliser des flotteurs, mais cela pose problème pour d'autres raisons. ce que vous faites peut être fastidieux mais ça va.
Ok, si vous êtes intéressé par une solution Javascript, en utilisant jQuery (mon approche préférée), vous vous retrouvez avec ce morceau de code assez effrayant:
J'accepterai volontiers des suggestions sur des moyens plus simples de le faire ...
la source
l'astuce est avec la propriété de contour grâce à la réponse d' énigment avec peu de modification
utiliser cette classe
puis dans le HTML
et le résultat est que cela vous aidera
la source
Un moyen plus simple consiste à faire de la table un contrôle côté serveur. Vous pouvez utiliser quelque chose de similaire à ceci:
la source