125 votes

Bordure autour des lignes spécifiques dans un tableau ?

Je suis en train de design HTML/CSS qui peut mettre une bordure autour de lignes dans une table. Oui, je sais que je ne suis pas vraiment censé utiliser des tableaux pour la mise en page, mais je ne connais pas assez bien le CSS pour remplacer complètement encore.

De toute façon, j'ai un tableau avec plusieurs lignes et colonnes, certaines ont fusionné avec rowspan et colspan, et j'aimerais mettre une simple bordure autour des parties de la table. Actuellement, je suis à l'aide de 4 classes CSS (haut, bas, gauche, droite) que j'attache à l' <td> des cellules qui sont en haut, en bas, à gauche et à droite de la table, respectivement.

<html>
<head>

<style type="text/css">
.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;
}
</style>

</head>
<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>

Est-il un moyen plus facile de faire ce que je veux? J'ai essayé d'appliquer le haut et le bas d'un <tr> mais il ne fonctionne pas. (p.s. Je suis nouveau sur le CSS, il y a probablement vraiment une solution de base de ce que j'ai manqué.)

note: j'ai besoin d'avoir plusieurs bordé sections. L'idée de base est d'avoir plusieurs bordé clusters contenant chacun plusieurs lignes.

120voto

enigment Points 1044

Qu’en est-il `` ? Fonctionne pour moi sur éléments tbody ou tr et semble être compatible avec la plupart des navigateurs, y compris IE 8 +, mais pas avant.

54voto

Kyle Cronin Points 35834

Merci à tous ceux qui ont répondu! J'ai essayé toutes les solutions présentées ici et j'ai fait plus de recherche sur l'internet pour d'autres solutions possibles, et je pense en avoir trouvé un qui est prometteur:

<html>
<head>

<style type="text/css">
tr.top td { border-top: thin solid black; }
tr.bottom td { border-bottom: thin solid black; }
tr.row td:first-child { border-left: thin solid black; }
tr.row td:last-child { border-right: thin solid black; }
</style>

</head>
<body>

<table cellspacing="0">
  <tr>
    <td>no border</td>
    <td>no border here either</td>
  </tr>
  <tr class="top row">
    <td>one</td>
    <td>two</td>
  </tr>
  <tr class="bottom row">
    <td>three</td>
    <td>four</td>
  </tr>
  <tr>
    <td colspan="2">once again no borders</td>
  </tr>
  <tr class="top bottom row">
    <td colspan="2">hello</td>
  </tr>
  <tr>
    <td colspan="2">world</td>
  </tr>
</table>

</body>
</html>

Sortie:

enter image description here

Au lieu d'avoir à ajouter de l' top, bottom, left, et right classes pour chaque <td>, tout ce que j'ai à faire est d'ajouter top row haut <tr>, bottom row pour le bas, <tr>, et row chaque <tr> entre les deux. Il n'y a rien de mal avec cette solution? Il y a aucune croix-plate-forme de questions, je devrais être au courant?

36voto

Sunrise Points 400

Si vous définissez la style à sur la table parente, vous devriez être en mesure de style le `` : (styles sont en ligne pour la démo)

Sortie :

HTML output

9voto

Simon Points 4467

J'étais en train de jouer avec faire trop, et cela semblait être la meilleure option pour moi:

<style>
    tr { 
        display: table;            /* this makes borders/margins work */
        border: 1px solid black;
        margin: 5px;
    }
</style>

Notez que cela permettra d'éviter l'utilisation d'un fluide/automatique des largeurs de colonne, que les cellules n'étaient plus alignés avec ceux des autres lignes, mais la frontière/couleur formatage fonctionne toujours OK. La solution est de donner le TR et td d'une largeur spécifiée (px ou en %).

Bien sûr, vous pourriez faire le sélecteur tr.myClass si vous voulait s'appliquent uniquement à certaines lignes. Apparemment display: table ne fonctionne pas pour IE 6/7, cependant, mais il y a probablement d'autres hacks (hasLayout?) c'est peut-être pour ceux. :-(

3voto

sipwiz Points 15291

Voici une approche utilisant des éléments tbody qui pourraient être le moyen de le faire. Vous ne pouvez pas définir la frontière sur un tbody (le même que vous ne pouvez pas sur un tr) mais vous pouvez définir la couleur d’arrière-plan. Si l’effet que vous êtes désireux d’atteindre peut être obtenu avec une couleur de fond sur les groupes de lignes au lieu d’une bordure que cela va fonctionner.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X