140 votes

Coins de table arrondis CSS uniquement

J'ai cherché et cherché, mais je n'ai pas trouvé de solution à mon problème.

J'ai un simple tableau HTML. Je veux des coins arrondis, sans à l'aide d'images ou de JS, c'est-à-dire purement CSS uniquement . Comme ceci :

Table layout sketch

Coins arrondis pour les cellules d'angle, et 1px une bordure épaisse pour les cellules.

Jusqu'à présent, j'ai ceci :

table {
  -moz-border-radius: 5px !important;
  border-collapse: collapse !important;
  border: none !important;
}
table th,
table td {
  border: none !important
}
table th:first-child {
  -moz-border-radius: 5px 0 0 0 !important;
}
table th:last-child {
  -moz-border-radius: 0 5px 0 0 !important;
}
table tr:last-child td:first-child {
  -moz-border-radius: 0 0 0 5px !important;
}
table tr:last-child td:last-child {
  -moz-border-radius: 0 0 5px 0 !important;
}
table tr:hover td {
  background-color: #ddd !important
}

Mais je n'ai pas de bordures pour les cellules. Si j'ajoute des bordures, elles ne sont pas arrondies !

Des solutions ?

0voto

Younes Hadry Points 1

Vous pouvez essayer cette méthode si vous souhaitez obtenir des coins arrondis de chaque côté du tableau sans toucher aux cellules : http://jsfiddle.net/7veZQ/3983/

<table>
    <tr class="first-line"><td>A</td><td>B</td></tr>
    <tr class="last-line"><td>C</td><td>D</td></tr>
</table>

0voto

Ajouter entre <head> étiquettes :

<style>
  td {background: #ffddaa; width: 20%;}
</style>

et dans le corps :

<div style="background: black; border-radius: 12px;">
  <table width="100%" style="cell-spacing: 1px;">
    <tr>
      <td style="border-top-left-radius: 10px;">
        Noordwest
      </td>
      <td>&nbsp;</td>
      <td>Noord</td>
      <td>&nbsp;</td>
      <td style="border-top-right-radius: 10px;">
        Noordoost
      </td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>West</td>
      <td>&nbsp;</td>
      <td>Centrum</td>
      <td>&nbsp;</td>
      <td>Oost</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td style="border-bottom-left-radius: 10px;">
        Zuidwest
      </td>
      <td>&nbsp;</td>
      <td>Zuid</td>
      <td>&nbsp;</td>
      <td style="border-bottom-right-radius: 10px;">
        Zuidoost
      </td>
    </tr>
  </table>
</div>

La couleur des cellules, leur contenu et leur formatage sont bien sûr des exemples ;
il s'agit d'espacer les cellules remplies de couleur dans une div. Ainsi, les bordures noires des cellules et du tableau sont en fait la couleur d'arrière-plan de la div.
Notez que vous devrez définir le rayon de la bordure de la div à environ 2 valeurs de plus que les rayons des bordures des cellules séparées, afin d'obtenir un effet de coin arrondi lisse.

0voto

BorderlezZ Points 1

Comme aucune des solutions les mieux notées n'a fonctionné pour moi, étant donné que je travaille avec un tableau qui a un schéma de couleurs alternées, j'ai essayé beaucoup et j'ai finalement obtenu ma solution basée sur la solution fournie par @[luke flournoy].

La solution consistant à placer une bordure arrondie sur le tableau fonctionne, mais lorsque vous appliquez une couleur d'arrière-plan à une ligne du tableau ou que vous travaillez avec une tête de tableau désignée, elle écrase la configuration générale du tableau et s'affiche sous la forme d'un rectangle.

Les solutions de Luke ne ciblent que les cellules d'angle spécifiques, ce qui m'a fait penser que je devrais peut-être aussi appliquer la couleur d'arrière-plan alternée aux cellules de cette rangée et non à la rangée elle-même. L'ajout de td au tr:nth-child a fait l'affaire. Il en va de même si vous souhaitez utiliser une troisième couleur sur l'en-tête de la table. Vous pouvez le vérifier dans l'extrait de code ci-dessous.

Je n'ai pas vu d'autre solution pour travailler avec des couleurs d'arrière-plan et surtout pas avec des couleurs différentes dans un même tableau, alors j'espère que celle-ci aidera ceux qui ont besoin de plus qu'un simple tableau monochrome. Notez cette page si elle vous a aidé, afin qu'elle soit placée en haut de la page. Il y a beaucoup de réponses très pointilleuses et pas très utiles ici, alors

Voici un aperçu de mon résultat https://i.stack.imgur.com/XHOEN.png

En voici le code :

    .LezzonPrize{
        text-align: center;
        line-height: 1.8rem;
        border-collapse: collapse;
        border-radius: 36px;
        -moz-border-radius: 36px;
        -webkit-border-radius: 36px;
        background-color: #FCF3C6;
    }

    .LezzonPrize thead th{
        background-color:#FFCF5A;
    }

    .LezzonPrize thead th:first-child{
        border-radius: 36px 0 0 0;
    }

    .LezzonPrize thead th:last-child{
        border-radius: 0 36px 0 0;
    }

    .LezzonPrize th{
        text-align: center;
        vertical-align: middle;
        line-height: 1.8rem;
        font-weight: 700;
        text-transform: none;
        border-bottom:
            2px solid #3F5A1B;
    }

    .LezzonPrize td:first-child{
        text-align:left;
    }

    .LezzonPrize td{
        font-size:18px;
    }

    .LezzonPrize tr:nth-child(2n-1) td{
        background-color: #F3CF87;
    }

    .LezzonPrize tr:last-child td:first-child{
        border-radius: 0 0 0 36px;
        -moz-border-radius: 0 0 0 36px;
        -webkit-border-radius: 0 0 0 36px;
    }

    .LezzonPrize tr:last-child td:last-child{
        border-radius: 0 0 36px 0;
        -moz-border-radius: 0 0 36px 0;
        -webkit-border-radius: 0 0 36px 0;
    }

    <table class="LezzonPrize" width="100%">
        <thead>
            <tr>
                <th width="32%">
                    Head
                </th>
                <th width="17%">
                    Head
                </th>
                <th width="17%">
                    Head
                </th>
                <th width="17%">
                    Head
                </th>
                <th width="17%">
                    Head
                </th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
            </tr>
            <tr>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>           
            </tr>
            <tr>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>
                <td>
                    Content
                </td>   
            </tr>
            <tr>
                <td colspan="5">Try deleting this to confirm that the round corners also work on the 2nth-child table rows</td>
            </tr>
        </tbody>
    </table>

-1voto

Goran Vasic Points 81

CSS :

table {
  border: 1px solid black;
  border-radius: 10px;
  border-collapse: collapse;
  overflow: hidden;
}

td {
  padding: 0.5em 1em;
  border: 1px solid black;
}

-2voto

IqbalHamid Points 685

Leçon sur les bordures de tableau...

REMARQUE : le code HTML/CSS ci-dessous ne doit être visualisé qu'avec IE. Le code ne sera pas affiché correctement dans Chrome !

Nous devons nous en souvenir :

  1. Un tableau a une bordure : sa limite extérieure (qui peut également avoir un rayon de bordure).

  2. Les cellules elles-mêmes ont AUSSI des bordures (qui peuvent elles aussi avoir un rayon de bordure).

  3. Les bordures du tableau et de la cellule peuvent interférer l'une avec l'autre :

    La bordure de la cellule peut traverser la bordure du tableau (c'est-à-dire la limite du tableau).

    Pour voir cet effet, modifiez les règles de style CSS dans le code ci-dessous comme suit :
    i. table {border-collapse : separate;}
    ii. Supprimer les règles de style qui arrondissent les cellules d'angle du tableau.
    iii. Jouez ensuite avec l'espacement des bordures pour que vous puissiez voir l'interférence.

  4. Toutefois, la bordure du tableau et les bordures des cellules peuvent être COLLAPSÉES (en utilisant : border-collapse : collapse ;).

  5. Lorsqu'ils sont repliés, les bordures des cellules et des tableaux interfèrent d'une manière différente :

    i. Si le bord du tableau est arrondi mais que le bord des cellules reste carré, c'est la forme de la cellule qui prévaut et le tableau perd ses coins arrondis.

    ii. Inversement, si les cellules d'angle sont incurvées mais que les limites du tableau sont carrées, vous verrez un coin carré hideux bordant la courbure des cellules d'angle.

  6. Étant donné que l'attribut de la cellule est prioritaire, la façon de contourner les quatre coins du tableau est donc la suivante :

    i. Réduire les bordures du tableau (en utilisant : border-collapse : collapse ;).

    ii. Définir la courbure souhaitée sur les cellules d'angle du tableau.
    iii. Il importe peu que les coins du tableau soient arrondis (c'est-à-dire que le rayon de la bordure peut être nul).

            .zui-table-rounded {
                border: 2px solid blue;
                /*border-radius: 20px;*/
    
                border-collapse: collapse;
                border-spacing: 0px;
            }
    
            .zui-table-rounded thead th:first-child {
                border-radius: 30px 0 0 0;
            }
    
            .zui-table-rounded thead th:last-child {
                border-radius: 0 10px 0 0;
            }
    
            .zui-table-rounded tbody tr:last-child td:first-child {
                border-radius: 0 0 0 10px;
            }
    
            .zui-table-rounded tbody tr:last-child td:last-child {
                border-radius: 0 0 10px 0;
            }
    
            .zui-table-rounded thead th {
                background-color: #CFAD70;
            }
    
            .zui-table-rounded tbody td {
                border-top: solid 1px #957030;
                background-color: #EED592;
            }
    
            <table class="zui-table-rounded">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Position</th>
                    <th>Height</th>
                    <th>Born</th>
                    <th>Salary</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>DeMarcus Cousins</td>
                    <td>C</td>
                    <td>6'11"</td>
                    <td>08-13-1990</td>
                    <td>$4,917,000</td>
                </tr>
                <tr>
                    <td>Isaiah Thomas</td>
                    <td>PG</td>
                    <td>5'9"</td>
                    <td>02-07-1989</td>
                    <td>$473,604</td>
                </tr>
                <tr>
                    <td>Ben McLemore</td>
                    <td>SG</td>
                    <td>6'5"</td>
                    <td>02-11-1993</td>
                    <td>$2,895,960</td>
                </tr>
                <tr>
                    <td>Marcus Thornton</td>
                    <td>SG</td>
                    <td>6'4"</td>
                    <td>05-05-1987</td>
                    <td>$7,000,000</td>
                </tr>
                <tr>
                    <td>Jason Thompson</td>
                    <td>PF</td>
                    <td>6'11"</td>
                    <td>06-21-1986</td>
                    <td>$3,001,000</td>
                </tr>
            </tbody>
        </table>

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