32 votes

Briser un <tr> en utilisant uniquement CSS

Je suis à la recherche d'un moyen de "casser" une ligne de la table en utilisant uniquement CSS.

Je veux changer ce:
one line

Pour cela:
broken line

Je n'ai pas accès au code HTML, mais peuvent contrôler le CSS.

J'ai essayé

td:nth-child(3) {
    display: block;
}

Mais il ne semble pas fonctionner.

Voici quelques simplifié le code pour les tests:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style>
td:nth-child(3) {
    display: block;
    background-color: yellow;
}
</style>
</head>

<body>
<table border="1">
    <tr>
        <td>111111</td>
        <td>222222</td>
        <td>333333</td>
        <td>444444</td>
    </tr>
</table>
</body>
</html>

29voto

Mr. Alien Points 60232

Comment sur l'utilisation d' inline-block avec un fixe, width tableau... Ou à l'aide de % environ 45% de width votre td éléments de sorte que vous n'aurez pas besoin de définir width de la table

Démo

Ici, je suis tout simplement en tournant l' td de display: inline-block; , et en raison de l'fixe width tableau, ils seront obligés de passer à la ligne suivante.

Aussi, je suis en utilisant word-wrap: break-word; de la propriété, de sorte que non espacés les chaînes sont tenues de se rompre.

table {
    width: 120px;
}

table tr td {
    width: 50px;
    word-wrap: break-word;
}

table tr td {
    display: inline-block;
    margin-top: 2px;
}

Vous pouvez utiliser % base width , de sorte que vous n'avez pas besoin de se soucier de la cellule largeurs....

Vous pourriez avoir besoin d' vertical-align: top; avec min-height si dans le cas d'une cellule est vide dans votre table

table tr td {
    display: inline-block;
    margin-top: 2px;
    vertical-align: top;
    min-height: 20px;
}

Démo (requis Uniquement si une cellule est vide)


Il suffit de noter qu' inline-block va causer quelques problèmes avec 4px de décalage, dans ce cas il suffit d'attribuer font-size: 0; de la table re-régler l' font-size de retour pour votre td d'élément, de cette façon, vous obtiendrez la cohérence dans la cellule de la marge.

Avertissement: je ne pourrais jamais vous recommandons de faire ce genre de choses, de sorte gardez ce que votre dernière priorité. Si vous avez le contrôle JavaScript, que envisager d'inclure tr autour de la td


A partir d'ici, s'il vous plaît ignorer si vous ne pouvez pas utiliser jQuery, dire supposons que vous disposez d'une aide de la bibliothèque de jQuery, vous pouvez simplement ajouter l'extrait de code pour que le fichier JS....

(Am ajout d'un class ici pour identifier l'élément, class peuvent également être ajoutés à l'aide de .addClass() par définir certains des plus proche sélecteur CSS) , donc pas question de modifier le code HTML ici.

$('table.wrap_trs tr').unwrap(); //Remove default pre-generated tr
var cells = $('table.wrap_trs tr td');
for (var i = 0; i < cells.length; i += 2) {
    cells.slice(i, i + 2).wrapAll('<tr></tr>'); //Wrapping the tds with tr
}

Démo

7voto

Pravin Vaichal Points 1353

Vous pouvez utiliser la propriété float et jouer avec la largeur de TD car vous devez ajuster la largeur de bordure de la table

 table{
        width:100%;
    }

td:nth-child(3) {
    display: block;
    background-color: yellow;
}


tr td {
    float: left;
    width: 49.5%;
}
 

J'espère que cela t'aides! mais il faut vérifier la compatibilité du navigateur

5voto

sanjeev Points 1893

Méthode CSS appropriée, simple et facile

Cela peut vous aider, mais cela peut créer un problème de longueur variable, donc j'ai utilisé une largeur minimale

     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"   "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <style>

    td:nth-child(3) {
        display: block;
        background-color: yellow;
        clear:left;
    }
    tr{
    float:left;
    }
    td{
    float:left;
    min-width:100px; //used min-width for proper alignment
    }
    </style>
    </head>

    <body>
    <table border="1">
        <tr>
            <td>111111</td>
            <td>222222</td>
            <td>333333</td>
            <td>444444</td>
        </tr>
    </table>
    </body>
    </html>
 

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