Existe-t-il une solution de contournement pour le bogue 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>
Cela ressemble à ceci:
Firefox CSS bug http://i42.tinypic.com/245x9ud.png
Existe-t-il une solution CSS pure à cela?
J'étais un peu incertain sur ma table, alors la voici à nouveau:
Avec effondrement de la frontière:
Firefox CSS bug http://i42.tinypic.com/245x9ud.png
Avec cellspacing = "0" et sans border-collapse comme suggéré:
Firefox CSS bug http://i44.tinypic.com/2rg0qxi.png
Alors maintenant, les bordures à l'intérieur de ma table sont doubled, mais je veux une bordure de 1px sur ma table.
Lorsque je supprime la bordure 1px du tableau, je termine par:
Firefox CSS bug http://i40.tinypic.com/2vbokmq.png
Les frontières sont encore doublées à l'intérieur de ma table.
Je ne pouvais définir que les bordures droite et inférieure pour chaque DT, TH et la bordure gauche pour chaque premier enfant de TR pour obtenir ce que je voulais, mais je pense qu'il existe un moyen plus simple?
Supprimez border-collapse et utilisez cellspacing = 0 à la place.
<table style="border: 15px solid green; width: 100%" cellspacing="0">
Cela se produit parce que lorsque vous définissez border-collapse: collapse, Firefox 2.0 place la bordure à l'extérieur du tr. Les autres navigateurs le mettent à l'intérieur.
Définissez la largeur de votre bordure sur 10px dans votre code pour voir ce qui se passe réellement.
modifier après la modification de l'OP
Vous pouvez utiliser l'ancienne astuce "frontière" de la table. Définissez la couleur d'arrière-plan sur la table. Définissez les couleurs td et th sur blanc. Cellpacing utilisateur = 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>
Pour ceux qui préfèrent garder la présentation en dehors du balisage, ou qui n’ont pas accès au balisage, voici une solution purement CSS. J'ai moi-même rencontré ce problème et testé cette solution dans FF3.5, IE6, IE7, IE8, Safari 4, Opera 10 et Google Chrome.
table { border-spacing: 0; *border-collapse: collapse; }
Ceci définit la table pour utiliser l'espacement des bordures dans tous les navigateurs (y compris le coupable, Firefox). Ensuite, il utilise le hack étoile CSS pour présenter la règle de réduction de la bordure uniquement à IE, qui n’applique pas correctement l’espacement des bordures (vous pouvez également inclure une feuille de style séparée pour IE avec des commentaires conditionnels hacks).
Si vous préférez utiliser l'espacement des cellules, utilisez-le. Ceci est simplement offert comme une méthode alternative utilisant CSS.
Ce problème n'existe plus. Dans Firefox 47.0.1, le CSS suivant ne présente pas le problème d'un pixel:
table {
border-collapse: collapse;
}
th, td {
border: solid 1px #000;
}
Nous pouvons également utiliser des bordures nettes d'un pixel sans recourir à 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 que ça fait? Le truc, c'est que nous mettons seulement une bordure supérieure et gauche sur les cellules:
+------+------
| cell | cell
+------+------
| cell | cell
Cela laisse la table sans bord droit et inférieur: nous appelons ceux-ci sur table
+ ------ + ------- | + ------- + ------ + | cellule | cellule | | cellule | cellule | + ------ + ------- + | = + ------- + ------ + | cellule | cellule | | cellule | cellule | | | --------- + + ------- + ------ +
Le border-spacing: 0
est essentiel sinon ces lignes ne se connecteront pas.
table {bordure-espacement: 0; effondrement de la bordure: effondrement; }/* fonctionne dans FF 3.5 * /
table { border-spacing: 0; *border-collapse: collapse; }
ça ne marchait pas pour moi dans FF 31. Comme j'ai des couleurs différentes pour les cellules thead et tbody, l'astuce couleur-fond du tableau ne fonctionnait pas non plus. La seule solution était la suivante:
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;
}
}
Meilleure solution CSS uniquement:
Ajouter
td {
background-clip: padding-box
}
Plus d'informations: https://developer.mozilla.org/en-US/docs/CSS/background-clip
Merci à @medoingthings
Ma solution est la suivante.
border-collapse
, border
et border-spacing
du CSS.Ajoutez 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.
Je ne pense pas avoir jamais entendu parler d'un "bogue 1px vers la gauche", vous devriez télécharger votre code quelque part afin que nous puissions le vérifier et nous assurer qu'il ne s'agit pas d'un bogue "j'ai manqué quelque chose" :) parcourez votre balisage avec Firebug pour déterminer s’il ya autre chose qui ne va pas.
Couru dans ce problème et comme un travail autour. J'ai utilisé :
table{border-collapse:separate;border-spacing:1px;border:none;background-color:#ccc;}
table td{border:none;}
fondamentalement trompé la frontière en utilisant une couleur de fond. Ce qui empêchait donc les doubles frontières intérieures.
J'ai été mordu par cela aujourd'hui. Les solutions proposées ne fonctionnaient pas pour moi, alors j'ai trouvé le mien:
table { border: 1px solid transparent; border-collapse: collapse; }
De cette façon, vous obtenez des bordures effondrées, pas de double bordure, et tout ce qui se trouve dans les limites souhaitées, sans règles spécifiques au navigateur. Aucun inconvénient.
J'ai rencontré ce problème - mais dans mon cas, il s'agissait de l'imbrication de la table dans un div défini sur overflow: hidden J'ai enlevé ceci et cela a fonctionné.