dsfr icon indicating copy to clipboard operation
dsfr copied to clipboard

đŸ‡«đŸ‡· Official french government's design system (SystĂšme de Design de l'État)

đŸ‡«đŸ‡· SystĂšme de Design de l’État

GitHub release Generic badge Generic badge Npm package monthly downloads

Le SystĂšme de Design de l’État (ci-aprĂšs, le DSFR) est un ensemble de composants web HTML, CSS et Javascript pour faciliter le travail des Ă©quipes projets des sites Internet publics, et crĂ©er des interfaces numĂ©riques de qualitĂ© et accessibles.

L'outil est développé, maintenu et géré par le Service d'Information du Gouvernement (SIG).

Son utilisation par les administrations est soumise à une demande d'agrément (voir partie 5 des Conditions Générales d'Utilisation).

Voir la documentation officielle.

Licence et droit d'utilisation

Le contenu de ce projet est placé sous licence MIT License, à l'exception de la fonte Marianne. Voir LICENSE.md.

⚠ Utilisation interdite en dehors des sites Internet de l'État

Il est formellement interdit Ă  tout autre acteur d’utiliser le SystĂšme de Design de l’État (les administrations territoriales ou tout autre acteur privĂ©) pour des sites web ou des applications. Le SystĂšme de Design de l’État reprĂ©sente l’identitĂ© numĂ©rique de l’État. En cas d’usage Ă  des fins trompeuses ou frauduleuses, l'État se rĂ©serve le droit d’entreprendre les actions nĂ©cessaires pour y mettre un terme.

Voir les conditions générales d'utilisation.

⚠ Prohibited Use Outside Government Websites

This Design System is only meant to be used by official French public services' websites and apps. Its main purpose is to make it easy to identify governmental websites for citizens. See terms.

Installation

L'installation du SystĂšme de Design de l'État (ci-aprĂšs, le DSFR) peut se faire de maniĂšres diffĂ©rentes. En tĂ©lĂ©chargeant l'ensemble des fichiers nĂ©cessaires Ă  son utilisation, en utilisant le gestionnaire de paquets NPM, ou encore via git.

Fichiers statiques

Il est possible de télécharger l'ensemble du DSFR au format zip ci-dessous. Le zip contient un ensemble de fichiers CSS et Javascript, ainsi que les différentes polices web utilisées (Marianne et Spectral), et un ensemble d'icÎnes et de pictogrammes.

Vous trouverez sur la page Release de Github, toutes les sources des versions précédentes et la derniÚre en date.

NPM

Le DSFR est disponible sur NPM via un ensemble de packages qu'il est possible d'ajouter directement à votre projet. Il est de ce fait nécessaire d'installer NodeJS, et d'avoir un fichier package.json à la racine de votre projet. (Il est possible d'en créer un directement via la commande npm init).

Une fois en place, il suffit d'installer le package @gouvfr/dsfr contenant l’ensemble des composants:

npm install @gouvfr/dsfr

Il est Ă©galement possible d'installer le package avec Yarn :

yarn add @gouvfr/dsfr

Une fois terminé le dsfr sera alors installé dans le dossier node_modules/@gouvfr/dsfr/.

Pour visualiser les exemples, il est nécessaire de lancer un serveur local. Pour cela, installer le package browser-sync, puis lancer le serveur dans le dossier du dsfr :

npm install browser-sync
cd node_modules/@gouvfr/dsfr/
npm run serve

Une fois le serveur lancé, les exemples sont disponibles à l'adresse : http://localhost:8080/example/

Structure du DSFR

La structure que nous mettons Ă  disposition , sur le zip ou npm est la suivante:

  • dist : contient les fichiers css et js Ă  importer en fonction des packages utilisĂ©s.
  • src : contient les sources sass et js des diffĂ©rents composants.
  • example : contient des snippets html d’example des composants que vous pouvez consulter en local.

Configuration de votre projet

Lors de la crĂ©ation de votre projet, il est nĂ©cessaire d’adopter l’arborescence prĂ©vue par celui-ci, Ă  savoir les fichiers HTML Ă  la racine du projets, et les diffĂ©rentes sources du rĂ©pertoire dist dans des dossiers spĂ©cifiques :

Une structure minimale serait :

/ Racine du projet
└── index.html
└── dsfr.min.css
└── dsfr.module.min.js
└── dsfr.nomodule.min.js
└── icons/
└── favicon/
└── fonts/
└── utility/
  └── utilities.min.css

Les polices de caractĂšres utilisĂ©es sur le DS, Ă  savoir la Marianne et la Spectral, sont des fichiers .woff et .woff2, ils doivent se trouver dans le rĂ©pertoire fonts. Les dossiers fonts et favicon doivent ĂȘtre placĂ©s au mĂȘme niveau que le dossier contenant le CSS du core du dsfr (ou au mĂȘme niveau que le css dsfr.min.css Ă  la racine de dist, qui contient le core).

Le fichier utilities.min.css doit ĂȘtre placĂ© un niveau plus bas que le dossier icons, dans dossier utility par exemple, pour respecter les chemins d'accĂšs vers les icĂŽnes.

Le HTML

Le point de dĂ©part de l’utilisation du DSFR est la crĂ©ation de fichiers HTML, afin de pouvoir utiliser les diffĂ©rents composants. Ces fichiers sont Ă  mettre Ă  la racine de votre projet. L’exemple ci dessous est le code minimal afin de pouvoir utiliser le DSFR.

L’ajout de l’attribut data-fr-scheme sur la balise html permet d’activer la gestion des thĂšmes clair et sombre. Les valeurs possibles sont system, light, dark. La valeur “system” permet d’utiliser la configuration dĂ©finie sur le systĂšme d’exploitation de l’utilisateur.

Consulter la documentation des paramùtres d’affichage afin d’en savoir plus.

<!doctype html>
<html lang="fr" data-fr-scheme="system">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="format-detection" content="telephone=no,date=no,address=no,email=no,url=no">

    <meta name="theme-color" content="#000091"><!-- DĂ©fini la couleur de thĂšme du navigateur (Safari/Android) -->
    <link rel="apple-touch-icon" href="favicon/apple-touch-icon.png"><!-- 180×180 -->
    <link rel="icon" href="favicon/favicon.svg" type="image/svg+xml">
    <link rel="shortcut icon" href="favicon/favicon.ico" type="image/x-icon"><!-- 32×32 -->
    <link rel="manifest" href="favicon/manifest.webmanifest" crossorigin="use-credentials">
    <!-- Modifier les chemins relatifs des favicons en fonction de la structure du projet -->
    <!-- Dans le fichier manifest.webmanifest aussi, modifier les chemins vers les images -->

    <link rel="stylesheet" href="dsfr.min.css">
    <link rel="stylesheet" href="utility/utility.min.css">

    <title>Titre de la page - Nom du site</title>
  </head>
  <body>

    <!--
      code de la page
     -->

    <!-- Script en version es6 module et nomodule pour les navigateurs le ne supportant pas -->
    <script type="module" src="dsfr.module.min.js"></script>
    <script type="text/javascript" nomodule src="dsfr.nomodule.min.js"></script>
  </body>
</html>

Les CSS

Afin d’inclure la totalitĂ© des composants et des styles du systĂšme de design, il est nĂ©cessaire d’inclure la feuille de style dist/dsfr.min.css.

Les classes utilitaires, notamment les icĂŽnes, sont disponibles dans un fichier Ă  part dans dist/utility/utility.scss.

<html>
  <head>
    <link rel="stylesheet" href="dsfr.min.css">
    <link rel="stylesheet" href="utility/utility.min.css">

Il est aussi possible d’importer uniquement ce que l’on souhaite utiliser. En effet, pour ajouter un composant seul il suffit d’importer son CSS ainsi que celui de chacune des dĂ©pendances de ce composant. Ces dĂ©pendances sont listĂ©s dans le README.md de chaque package.

<html>
  <head>
    <link rel="stylesheet" href="core.min.css">
    <link rel="stylesheet" href="link.min.css">
    <link rel="stylesheet" href="button.min.css">

Le Javascript

L’ensemble du code javascript nĂ©cessaire au bon fonctionnement du DS se trouve dans deux fichiers dist/dsfr.module.min.js et dist/dsfr.nomodule.min.js.

Le fichier dsfr.module.min.js utilise les modules javascript natifs - sa balise script d’appel doit avoir l’attribut type=”module”.

Le fichier dsfr.nomodule.min.js est utilisĂ© par les anciens navigateurs ne supportant pas les modules javascript (es6) - sa balise script doit contenir l’attribut nomodule. Il est impĂ©ratif d’appeler les deux fichiers javascript afin que le code s’exĂ©cute correctement sur l’ensemble des navigateurs supportĂ©s :

    <script type="module" src="dsfr.module.min.js"></script>
    <script type="text/javascript" nomodule src="dsfr.nomodule.min.js"></script>
  </body>
</html>

NB : Le package analytics est gĂ©rĂ© indĂ©pendament et doit ĂȘtre ajoutĂ© aprĂšs le js du dsfr. Voir documention analytics

De la mĂȘme façon que le CSS il est possible d’importer uniquement le JS des composants utilisĂ©s (et leurs dĂ©pendances).

IcĂŽnes

Les icÎnes sont stockées dans dist/icons et classées par catégories.

Le design systĂšme utilise principalement des icĂŽnes de la librairie remixIcon. Il existe aussi des icĂŽnes personnalisĂ©es, celles-ci sont prĂ©fixĂ©e par “fr--”.

Afin d’utiliser ces icĂŽnes, des classes utilitaires CSS sont associĂ©s Ă  chaque icĂŽne. Par ex. : fr-icon-error-fill

Ces classes sont disponibles dans utility qui importe dist/utility/icons/icons.css.

Il est aussi possible d’importer uniquement certaines catĂ©gories d’icĂŽnes afin d’optimiser le poids. Par ex. : dist/utility/icons/system/system.css pour les icĂŽnes “system”.

Pour plus d’informations : Voir la documentation des icînes.

Favicon

La documentation des favicons détaille la façon de les implémenter dans vos pages.

Fonctionnement

BEM

Le DSFR utilise la méthodologie BEM (Block - Element - Modifier) comme convention de nommage des classes CSS. Elle permet aux développeurs une meilleure compréhension de la relation entre HTML et CSS dans un projet donné.

Selon cette méthodologie, un block représente le plus haut niveau d'abstraction d'un nouveau composant, par exemple .parent.

Des Ă©lĂ©ments (ou enfants), peuvent ĂȘtre placĂ©s Ă  l'intĂ©rieur de ces blocks, et sont dĂ©signĂ©s par deux underscore prĂ©cĂ©dĂ©s du nom du block : .parent__element.

Les modifiers quant à eux, servent à manipuler les blocs, de maniÚre à les styliser de maniÚre indépendante en s'assurant de ne pas induire de changement à des blocks sans aucun rapport avec celui-ci. Ils sont notés à l'aide de deux tirets précédés du nom du block comme suit : .parent--modifier.

Utilisation

Le DSFR est constitué de différents composants, que vous pouvez utiliser indépendamment au sein de votre projet.

Une documentation spĂ©cifique est prĂ©vue pour chaque composant, prĂ©cisant ses principes d’utilisation, ainsi que les snippets de code HTML Ă  utiliser pour votre projet.

🙌 Vous ĂȘtes maintenant prĂȘt(e) Ă  utiliser le DSFR.

Contribution

Le processus de contribution est détaillé sur la page CONTRIBUTING.md.

Documentation

Documentation développeurs