Edit - Titre: Y at - il une autre façon d'atteindre border-collapse:collapse
en CSS
(afin d'avoir une table d'angle effondré, arrondi)?
Comme il s'avère que le simple fait de réduire les bordures du tableau ne résout pas le problème racine, j'ai mis à jour le titre pour mieux refléter la discussion.
J'essaie de faire une table avec des coins arrondis en utilisant la CSS3
border-radius
propriété. Les styles de table que j'utilise ressemblent à ceci:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
Voici le problème. Je veux également définir la border-collapse:collapse
propriété, et lorsque cela est défini border-radius
ne fonctionne plus. Existe-t-il un moyen basé sur CSS pour obtenir le même effet que border-collapse:collapse
sans l'utiliser réellement?
Modifications:
J'ai créé une page simple pour illustrer le problème ici (Firefox / Safari uniquement).
Il semble qu'une grande partie du problème est que le fait de définir la table pour avoir des coins arrondis n'affecte pas les coins des td
éléments de coin . Si le tableau n'était qu'une seule couleur, ce ne serait pas un problème car je pouvais juste td
arrondir les coins supérieur et inférieur pour la première et la dernière ligne respectivement. Cependant, j'utilise différentes couleurs d'arrière-plan pour le tableau pour différencier les titres et pour les rayures, de sorte que les td
éléments intérieurs montreraient également leurs coins arrondis.
Résumé des solutions proposées:
Entourer la table d'un autre élément aux coins arrondis ne fonctionne pas car les coins carrés de la table "saignent".
La spécification de la largeur de la bordure à 0 ne réduit pas le tableau.
Les td
coins inférieurs sont toujours carrés après avoir défini l'espacement des cellules à zéro.
Utiliser plutôt JavaScript fonctionne en évitant le problème.
Solutions possibles:
Les tables sont générées en PHP, donc je pourrais simplement appliquer une classe différente à chacun des th / tds externes et styliser chaque coin séparément. Je préfère ne pas le faire, car ce n'est pas très élégant et un peu pénible à appliquer à plusieurs tables, alors continuez à faire des suggestions.
La solution 2 possible consiste à utiliser JavaScript (jQuery, en particulier) pour styliser les coins. Cette solution fonctionne également, mais toujours pas tout à fait ce que je recherche (je sais que je suis difficile). J'ai deux réserves:
- c'est un site très léger, et je voudrais garder JavaScript au minimum
- une partie de l'attrait que l'utilisation de border-radius a pour moi est la dégradation gracieuse et l'amélioration progressive. En utilisant border-radius pour tous les coins arrondis, j'espère avoir un site régulièrement arrondi dans les navigateurs compatibles CSS3 et un site toujours carré dans les autres (je vous regarde, IE).
Je sais qu'essayer de faire cela avec CSS3 aujourd'hui peut sembler inutile, mais j'ai mes raisons. Je voudrais également souligner que ce problème est le résultat de la spécification w3c, et non d'une mauvaise prise en charge de CSS3, donc toute solution sera toujours pertinente et utile lorsque CSS3 aura une prise en charge plus répandue.
Réponses:
Je l'ai compris. Il vous suffit d'utiliser des sélecteurs spéciaux.
Le problème avec l'arrondi des coins de la table était que les éléments td ne devenaient pas également arrondis. Vous pouvez résoudre cela en faisant quelque chose comme ceci:
Maintenant, tout tourne correctement, sauf qu'il y a toujours le problème de
border-collapse: collapse
tout casser.Une solution de contournement consiste à ajouter
border-spacing: 0
et à laisser la valeur par défautborder-collapse: separate
sur la table.la source
border-spacing: 0;
un style de bordure?border-spacing: 0;
comme Ramon recommande de le réparer pour moi. Assurez - vous que vous ajoutez laborder-radius
etborder-spacing
styles au<th>
ou<td>
éléments, non<thead>
ou<tbody>
.border-spacing: 0; border-collapse: separate;
La méthode suivante fonctionne (testée dans Chrome) en utilisant un
box-shadow
avec une propagation de1px
au lieu d'une "vraie" bordure.la source
Si vous voulez une solution CSS uniquement (pas besoin de définir
cellspacing=0
dans le HTML) qui autorise des bordures 1px (ce que vous ne pouvez pas faire avec laborder-spacing: 0
solution), je préfère faire ce qui suit:border-right
etborder-bottom
pour vos cellules de tableau (td
etth
)border-top
border-left
first-child
etlast-child
, arrondissez les coins appropriés pour les cellules du tableau aux quatre coins.Voir une démo ici.
Étant donné le code HTML suivant:
VOIR l'exemple ci-dessous:
la source
table.Info
classe a à voir avec quoi que ce soit?Avez-vous essayé d'utiliser
table{border-spacing: 0}
au lieu detable{border-collapse: collapse}
???la source
border-spacing: 0
est que vous ne pouvez pas avoir une bordure 1px, non? Parce que les bordures s'empilent au lieu de s'effondrer.border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;
a donné exactement ce dont j'avais besoin.Vous devrez probablement mettre un autre élément autour de la table et le style avec une bordure arrondie.
Le projet de travail spécifie que
border-radius
cela ne s'applique pas aux éléments du tableau lorsque la valeur deborder-collapse
estcollapse
.la source
overflow:hidden;
Comme Ian l'a dit, la solution consiste à imbriquer la table à l'intérieur d'un div et à la définir comme ça:
Avec
overflow:hidden
, les coins carrés ne saignent pas à travers le div.la source
overflow: hidden
n'importe quel popover / info-bulle, il sera coupé par les dimensions du wrapper.À ma connaissance, la seule façon de le faire serait de modifier toutes les cellules comme ceci:
Et puis pour obtenir la bordure en bas et à droite en arrière
:last-child
n'est pas valide dans ie6, mais si vous utilisez,border-radius
je suppose que vous ne vous en souciez pas.ÉDITER:
Après avoir regardé votre exemple de page, il semble que vous puissiez peut-être contourner ce problème avec l'espacement des cellules et le remplissage.
Les épaisses bordures grises que vous voyez sont en fait l'arrière-plan du tableau (vous pouvez le voir clairement si vous changez la couleur de la bordure en rouge). Si vous définissez l'espacement des cellules sur zéro (ou de manière équivalente:),
td, th { margin:0; }
les "bordures" grises disparaîtront.EDIT 2:
Je ne peux pas trouver un moyen de le faire avec une seule table. Si vous changez votre ligne d'en-tête en une table imbriquée, vous pourrez peut-être obtenir l'effet que vous souhaitez, mais ce sera plus de travail et non dynamique.
la source
J'ai essayé une solution de contournement en utilisant les pseudo-éléments
:before
et:after
sur lethead th:first-child
etthead th:last-child
En combinaison avec l'emballage de la table avec un
<div class="radius borderCCC">
voir jsFiddle
Fonctionne pour moi en chrome (13.0.782.215) Faites-moi savoir si cela fonctionne pour vous dans d'autres navigateurs.
la source
En fait, vous pouvez ajouter votre
table
intérieurdiv
comme enveloppe. puis attribuez cesCSS
codes au wrapper:la source
Les réponses données ne fonctionnent que lorsqu'il n'y a pas de frontières autour de la table, ce qui est très limitant!
J'ai une macro dans SASS pour ce faire, qui prend entièrement en charge externe les bordures et internes, réalisant le même style que border-collapse: collapse sans le spécifier.
Testé dans FF / IE8 / Safari / Chrome.
Donne de belles bordures arrondies en CSS pur dans tous les navigateurs mais IE8 (se dégrade gracieusement) car IE8 ne prend pas en charge border-radius :(
Certains navigateurs plus anciens peuvent nécessiter des préfixes de fournisseur pour fonctionner avec
border-radius
, donc ne hésitez pas à ajouter les préfixes à votre code si nécessaire.Cette réponse n'est pas la plus courte - mais elle fonctionne.
Pour appliquer ce style, changez simplement votre
avec la balise suivante:
et assurez-vous d'inclure les styles CSS ci-dessus dans votre code HTML.
J'espère que cela t'aides.
la source
border-radius
.Pour un tableau bordé et déroulant, utilisez-le (remplacez les variables, les
$
textes de départ)Si vous utilisez
thead
,tfoot
outh
, remplacez simplementtr:first-child
ettr-last-child
ettd
avec eux.HTML:
la source
J'ai eu le même problème. supprimer
border-collapse
entièrement et utiliser:cellspacing="0" cellpadding="0"
dans le document html. exemple:la source
Je viens d'écrire un ensemble fou de CSS pour cela qui semble fonctionner parfaitement:
la source
Solution avec border-collapse: séparé pour la table et l'affichage: table en ligne pour le corps et la tête.
la source
Je suis nouveau avec HTML et CSS et je cherchais également une solution pour cela, voici ce que je trouve.
J'essaye, devine ce que ça marche :)
la source
J'ai trouvé cette réponse après avoir rencontré le même problème, mais j'ai trouvé que c'était assez simple: il suffit de donner au débordement de la table: caché
Pas besoin d'un élément d'emballage. Certes, je ne sais pas si cela aurait fonctionné il y a 7 ans lorsque la question a été initialement posée, mais cela fonctionne maintenant.
la source
Table à coins arrondis et à cellules bordées. Utilisation de la solution @Ramon Tayag .
La clé est d'utiliser
border-spacing: 0
comme il le souligne.Solution utilisant SCSS .
la source
J'ai commencé à expérimenter avec « affichage » et je trouve que:
border-radius
,border
,margin
,padding
, entable
sont affichés avec:Par exemple
Mais nous devons définir un
width
de chaque colonnela source
Voici un exemple récent de la façon d'implémenter une table avec des coins arrondis de http://medialoot.com/preview/css-ui-kit/demo.html . Il est basé sur les sélecteurs spéciaux suggérés par Joel Potter ci-dessus. Comme vous pouvez le voir, il inclut également de la magie pour rendre IE un peu heureux. Il comprend quelques styles supplémentaires pour alterner la couleur des lignes:
la source
Voici un moyen:
Ou
la source
Je fais toujours ça avec Sass
la source
border-collapse: collapse
activé.border-collapse: collapse
. Pardonnez encore, j'attendrai votre mise à jour.Jusqu'à présent, la meilleure solution vient de votre propre solution et elle se présente comme suit:
la source
Border-radius est désormais officiellement pris en charge. Ainsi, dans tous les exemples ci-dessus, vous pouvez supprimer le préfixe "-moz-".
Une autre astuce consiste à utiliser la même couleur pour les rangées supérieure et inférieure que votre bordure. Avec les 3 couleurs identiques, il se fond et ressemble à une table parfaitement arrondie même si ce n'est pas physiquement.
la source