Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

polygon()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨janvier 2020⁩.

La fonction CSS polygon() fait partie du type de donnée <basic-shape>. Elle permet de dessiner un polygone en fournissant une ou plusieurs paires de coordonnées, chacune représentant un sommet de la forme.

Exemple interactif

clip-path: polygon(
  0% 20%,
  60% 20%,
  60% 0%,
  100% 50%,
  60% 100%,
  60% 80%,
  0% 80%
);
clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);
<section class="default-example" id="default-example">
  <div class="transition-all" id="example-element"></div>
</section>
#default-example {
  background: #ffee99;
}

#example-element {
  background: linear-gradient(to bottom right, #ff5522, #0055ff);
  width: 100%;
  height: 100%;
}

Syntaxe

css
/* Spécifié comme liste de coordonnées */
/* polygon(<length-percentage> <length-percentage>, ... )*/
polygon(50% 2.4%, 34.5% 33.8%, 0% 38.8%, 25% 63.1%, 19.1% 97.6%)
polygon(0px 0px, 200px 100px, 0px 200px)
polygon(0% 0px, 100% 100px, 0% 100%)
polygon(0 0, 50% 1rem, 100% 2vw, calc(100% - 20px) 100%, 0 100%)

/* Spécifié comme liste de coordonnées et règle de remplissage */
/* polygon(<fill-rule> <length-percentage> <length-percentage>, ... )*/
polygon(nonzero, 0% 0%, 50% 50%, 0% 100%)
polygon(evenodd, 0% 0%, 50% 50%, 0% 100%)

Les paramètres de polygon() sont séparés par une virgule et des espaces optionnels. Le premier paramètre est une valeur optionnelle <fill-rule>. Les paramètres suivants sont des points qui définissent le polygone. Chaque point est une paire de coordonnées x/y <length-percentage> séparées par un espace, par exemple « 0 0 » et « 100% 100% » pour les coins en haut à gauche et en bas à droite.

Remarque : l'élément SVG <polygon> possède des attributs séparés pour fill-rule et points, et points accepte indifféremment les espaces ou les virgules comme séparateurs. En CSS, les règles de séparation de polygon() sont strictes.

Paramètres

<fill-rule> Facultatif

Valeur optionnelle nonzero (par défaut si omise) ou evenodd, qui définit la règle de remplissage.

<length-percentage>

Chaque sommet du polygone est représenté par une paire de valeurs <length-percentage>, qui donne les coordonnées x/y du sommet par rapport à la boîte de référence de la forme.

Valeur de retour

Retourne une valeur <basic-shape>.

Description

Vous pouvez créer presque n'importe quelle forme avec la fonction polygon() en définissant les coordonnées de ses points. L'ordre dans lequel vous définissez les points a de l'importance et peut produire des formes différentes. La fonction polygon() exige au moins 3 points (ce qui crée un triangle), mais il n'y a pas de limite supérieure.

La fonction polygon() accepte des coordonnées ou points séparés par des virgules. Chaque point est représenté par une paire de valeurs x et y séparées par un espace, qui indiquent les coordonnées du point dans le polygone.

polygon(x1 y1, x2 y2, x3 y3, x4 y4, xn yn)

La correspondance des coordonnées du conteneur peut être visualisée ainsi :

axis point 1 point 2 point 3 point 4 point n
x 0% 100% 100% 0% xn
y 0% 0% 100% 100% yn

En appliquant ces coordonnées à la propriété CSS clip-path avec la fonction polygon() :

css
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);

Cela crée un rectangle de la taille de son parent en définissant les coordonnées de ses quatre coins : en haut à gauche (0% 0%), en haut à droite (100% 0%), en bas à droite (100% 100%) et en bas à gauche (0% 100%).

Syntaxe formelle

<polygon()> = 
polygon( <'fill-rule'>? [ round <length> ]? , [ <length-percentage> <length-percentage> ]# )

<fill-rule> =
nonzero |
evenodd

<length-percentage> =
<length> |
<percentage>

Examples

Créer un triangle

Dans cet exemple, un triangle est formé en définissant les coordonnées de ses trois points.

HTML

html
<div class="triangle"></div>

CSS

css
.triangle {
  width: 400px;
  height: 400px;
  background-color: magenta;
  clip-path: polygon(100% 0%, 50% 50%, 100% 100%);
}

Résultat

Les coordonnées du triangle sont le coin en haut à droite (100% 0%), le point central (50% 50%) et le coin en bas à droite (100% 100%) du conteneur.

Définir un polygone pour shape-outside

Dans cet exemple, une forme est créée pour que le texte la suive grâce à la propriété shape-outside.

html
<div class="box">
  <div class="shape"></div>
  <p>
    Une nuit de novembre en 1782, paraît‑il, deux frères étaient assis près de
    leur feu d'hiver dans la petite ville française d'Annonay, observant les
    volutes de fumée grises s'élever de la large cheminée. Ils s'appelaient
    Stephen et Joseph Montgolfier, ils exerçaient le métier de papetier, et
    étaient connus pour leur esprit réfléchi et leur vif intérêt pour toute
    connaissance scientifique et toute nouvelle découverte. Avant cette nuit—une
    nuit mémorable, comme elle devait le devenir—des centaines de millions de
    personnes avaient vu s'élever la fumée de leurs feux sans en tirer une
    inspiration particulière.
  </p>
</div>
css
.box {
  width: 250px;
}

.shape {
  float: left;
  shape-outside: polygon(
    0 5%,
    15% 12%,
    30% 15%,
    40% 26%,
    45% 35%,
    45% 45%,
    40% 55%,
    10% 90%,
    10% 98%,
    8% 100%,
    0 100%
  );
  width: 300px;
  height: 320px;
}

p {
  font-size: 0.9rem;
}

Spécifications

Specification
CSS Shapes Module Level 1
# funcdef-basic-shape-polygon

Compatibilité des navigateurs

Voir aussi