Firefox 1 pixel bug avec border-collapse, solution de contournement?

y a-t-il une solution de contournement pour le bug suivant "1 pixel à gauche"?

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">                                   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">   
<body>
<div style="padding: 50px">
<div style="border: 1px solid red">Table header info</div>
<table style="border: 1px solid green; border-collapse: collapse; width: 100%">
    <tbody>
        <tr>
            <th>Col1</th>
            <th>Col2</th>
        </tr>
        <tr>
            <td>Hello</td>
            <td>World</td>
        </tr>
    </tbody>
</table>
<div style="border: 1px solid red">Table footer info</div>
</div>
</body>
</html>

Il ressemble à ceci:

Firefox CSS bug http://i42.tinypic.com/245x9ud.png

y a-t-il une solution CSS pure à cela?


Modifier

j'étais un peu confus au sujet de ma table donc ici il est de nouveau:

Avec border-collapse:

Firefox CSS bug http://i42.tinypic.com/245x9ud.png

Avec cellspacing="0" et sans border-collapse comme l'a suggéré:

Firefox CSS bug http://i44.tinypic.com/2rg0qxi.png

alors maintenant les bordures à l'intérieur de ma table sont doublé, mais je veux que 1px border traverse ma table.

quand je supprime 1px border de la table je termine avec:

Firefox CSS bug http://i40.tinypic.com/2vbokmq.png

Les bordures sont encore doublées à l'intérieur de ma table.

Je ne pouvais fixer que la frontière droite et la frontière du bas pour chaque TD, TH et la frontière de gauche pour chaque premier enfant EN TR pour atteindre ce que je veux, mais je pense qu'il y a un moyen plus simple?

34
demandé sur Offir Pe'er 2009-06-24 03:00:52

12 réponses

enlever la bordure-s'effondrer et utiliser cellspacing=0 à la place.

<table style="border: 15px solid green; width: 100%"  cellspacing="0">

cela arrive parce que quand vous mettez border-collapse: collapse, Firefox 2.0 place la frontière à l'extérieur du tr. Les autres navigateurs le mettre à l'intérieur.

Réglez la largeur de votre bordure à 10px dans votre code pour voir ce qui se passe réellement.


modifier après l'OP edit

vous pouvez utiliser le vieux tour de table "border". Définissez la couleur de fond sur la table. Définir la couleur td et th au blanc. L'utilisateur cellspacing = 1;

table {background-color: green;width:100%;}
td, th{background-color:white;}

<div style="padding: 50px">
<div style="border: 1px solid red">Table header info</div>
<table cellspacing="1" >
        <tbody>
                <tr>
                        <th>Col1</th>
                        <th>Col2</th>
                </tr>
                <tr>
                        <td>Hello</td>
                        <td>World</td>
                </tr>
        </tbody>
</table>
<div style="border: 1px solid red">Table footer info</div>
</div>
18
répondu Emily 2009-06-25 14:04:00

pour ceux qui préfèrent garder la présentation hors du markup, ou qui n'ont pas accès au markup, voici une solution purement CSS. Je viens de rencontrer ce problème moi-même, et j'ai testé cette solution en FF3.5, IE6, IE7, IE8, Safari 4, Opera 10, et Google Chrome.

table { border-spacing: 0; *border-collapse: collapse; } 

ce paramètre définit la table pour utiliser l'espacement des frontières dans tous les navigateurs (y compris le coupable, Firefox). Ensuite, il utilise le hack CSS star pour présenter la règle border-collapse seulement à IE, qui ne s'applique pas correctement border-spacing (vous pouvez également inclure une feuille de style séparée pour IE avec des commentaires conditionnels si vous n'aimez pas les hacks).

si vous préférez utiliser l'espacement des cellules, utilisez-le. Il s'agit simplement d'une méthode alternative utilisant les CSS.

22
répondu 2009-09-25 19:51:05

cette question n'existe plus. Dans Firefox 47.0.1, le CSS suivant n'affiche pas le problème d'un pixel:

table {
  border-collapse: collapse;
}

th, td {
  border: solid 1px #000;
}

nous pouvons également obtenir des bordures propres d'un pixel pour fonctionner sans compter sur une implémentation fonctionnelle de border-collapse, comme ceci:

table {
  border: solid 1px #000;
  border-width: 0 1px 1px 0;
  border-spacing: 0;
}

th, td {
  border: solid 1px #000;
  border-width: 1px 0 0 1px;
}

Vous voyez ce qu'elle fait? Le truc, c'est qu'on ne met qu'un bord supérieur et gauche sur les cellules:

 +------+------
 | cell | cell
 +------+------
 | cell | cell

cela laisse la table sans bord droit et en bas: nous les coiffons sur table

+------+-------               |         +-------+------+ 
| cell | cell                 |         | cell  | cell |
+------+-------   +           |    =    +-------+------+
| cell | cell                 |         | cell  | cell |
|      |             ---------+         +-------+------+

border-spacing: 0 est essentiel sinon, ces lignes ne se connecte pas.

5
répondu Kaz 2016-07-05 18:15:16

table { border-spacing: 0; border-collapse: collapse; } /* fonctionne dans FF 3.5 */

2
répondu chovy 2009-11-10 22:23:27
table { border-spacing: 0; *border-collapse: collapse; }
table {
  border-collapse: separate;
}    
table tbody td {
  border: 1px solid #000;
  border-top: none;
  border-left: none;

  &:first-child {
    border-left: 1px solid #000;
  }
}
table thead th {
  border-bottom: 1px solid #ff0000;

  &:first-child {
    border-left: 1px solid #ff0000;
  }
  &:last-child {
    border-right: 1px solid #ff0000;
  }
}
2
répondu Tobias Hartmann 2014-08-21 09:12:04

Je ne pense pas que j'ai jamais entendu parler d'un "1px vers le bug de gauche", vous devriez télécharger votre code quelque part pour que nous puissions le vérifier et nous assurer qu'il ne s'agit pas d'un bug "j'ai oublié quelque chose quelque part":) je suggérerais aussi de courir à travers votre markup avec Firebug pour déterminer s'il y a quelque chose d'autre qui va de travers.

0
répondu Sampson 2009-06-23 23:10:02

j'ai rencontré ce problème-mais dans mon cas, il était lié au fait que la table était imbriquée dans un div défini à overflow:hidden. J'ai enlevé ça et ça a marché.

0
répondu 2010-01-15 17:37:09

rencontré ce problème et que cela fonctionne. J'ai utilisé :

table{border-collapse:separate;border-spacing:1px;border:none;background-color:#ccc;}
table td{border:none;}

essentiellement triché la frontière en utilisant une couleur de fond. Ce qui empêchait ainsi les doubles frontières intérieures.

0
répondu Shane 2011-03-11 02:42:58

Ma solution est la suivante.

  1. Supprimer border-collapse,border et border-spacing de CSS.
  2. ajouter ce code JavaScript:

    $('table tbody tr td').css('border-right', '1px solid #a25c17');
    $('table tbody tr td').css('border-bottom', '1px solid #a25c17');
    $('table tbody tr td:last-child').css('border-right', 'none');
    $('table').css('border-bottom', '1px solid #a25c17');
    

Pour être honnête, je ne sais pas pourquoi cela fonctionne. C'est de la magie jQuery.

0
répondu oEN 2012-10-05 09:31:06

meilleure solution CSS only:

Ajouter

td {
    background-clip: padding-box
}

Plus d'informations:https://developer.mozilla.org/en-US/docs/CSS/background-clip

merci à @medoingthings

0
répondu helpse 2014-07-16 17:20:09

j'ai été mordu par ceci aujourd'hui. Les solutions de rechange proposées n'ont pas fonctionné pour moi, donc j'ai trouvé la mienne:

table { border: 1px solid transparent; border-collapse: collapse; }

de cette façon, vous obtenez des bordures effondrées, pas de double bordures, et tout dans les limites que vous désirez, sans règles spécifiques au navigateur. Aucun inconvénients.

0
répondu rasenplanscher 2018-06-30 05:57:51

j'ai également rencontré ce problème la solution de preuve complète est très simple dans votre asp: gridview juste ajouter

GridLines="None" 

et les lignes disparaissent dans Firefox, pas de css modification nécessaire.

-4
répondu webGuy 2012-11-27 18:23:56