--- title: Rendre le contenu éditable slug: Web/Guide/HTML/Editable_content translation_of: Web/Guide/HTML/Editable_content original_slug: Web/HTML/Contenu_editable --- > **Attention :** Comme indiqué par l'avertissement de la spécification pour [`execCommand()`](https://w3c.github.io/editing/docs/execCommand/), les fonctionnalités correspondantes ne sont pas implémentées complètement ou de façon cohérente entre les différents agents utilisateurs. De plus, cette fonction est indiquée comme dépréciée sur la page de référence pour [`Document.execCommand()`](/fr/docs/Web/API/Document/execCommand). Aussi, ce qui suit sur cette page ne devrait pas être utilisé pour du code en production. En HTML, tout élément peut être éditable. En utilisant des gestionnaires d'évènements JavaScript, on peut transformer une page web en un éditeur de texte riche. Cet article fournit des informations à propos de cette fonctionnalité. > **Note :** À partir de Firefox 63 Beta/Dev, certaines des fonctionnalités d'édition de texte riche ont été désactivées par défaut pour des raisons de compatibilité entre navigateurs. Les fonctionnalités retirées concernent des objets pour redimensionner des images ([``](/fr/docs/Web/HTML/Element/Img)), des tableaux ([``](/fr/docs/Web/HTML/Element/table)), et des éléments positionnés de façon absolue ; l'édition de tableaux en ligne pour ajouter ou retirer des lignes ou des colonnes ; la poignée qui permet de déplacer des éléments positionnés de façon absolue. Voir le [bug 1449564](https://bugzilla.mozilla.org/show_bug.cgi?id=1449564) pour plus de détails. ## Le fonctionnement Pour rendre un élément HTML éditable, il suffira de lui ajouter l'attribut [`contenteditable`](/fr/docs/Web/HTML/Global_attributes#attr-contenteditable). Cela fonctionne pour la quasi-totalité des éléments. Voici un exemple simple qui crée un élément [`
`](/fr/docs/Web/HTML/Element/div) dont le contenu peut être édité par l'utilisateur. ```html
Vous pouvez éditer ce texte lorsque vous consultez la page.
``` Et voici le résultat obtenu avec ce fragment HTML : {{EmbedLiveSample('Le fonctionnement')}} ## Exécuter des commandes Lorsqu'un élément HTML a un attribut `contenteditable` qui vaut `true`, la méthode [`document.execCommand()`](/fr/docs/Web/API/Document/execCommand) devient disponible. Cela permet d'exécuter des [commandes](/fr/docs/Web/API/Document/execCommand#commandes) pour manipuler les contenus de la région éditable. Certaines commandes affectent la sélection du document en mettant par exemple en forme le texte (gras, italique, etc.) tandis que d'autres insèrent de nouveaux éléments (par exemple un nouveau lien) ou portent sur tout une ligne (par exemple pour l'indenter). Lorsqu'on utilise `contentEditable`, appeler `execCommand()` aura un impact sur l'ensemble de l'élément éditable courant qui est actif. ## Différences de génération de balisage L'utilisation de `contenteditable` parmi les différents navigateurs fut longtemps compliqué en raison des différences sur le balisage généré. Ainsi, même une action simple (presser Entrée pour créer une nouvelle ligne de texte au sein d'un élément éditable) pouvait être gérée différemment selon les navigateurs (Firefox insérait un élément [`
`](/fr/docs/Web/HTML/Element/br), IE/Opera ajoutaient un élément [`

`](fr/docs/Web/HTML/Element/p), Chrome/Safari ajoutaient un élément [`

`](/fr/docs/Web/HTML/Element/div). Cela s'est heureusement amélioré avec le temps et une meilleure cohérence s'est mise en place. Avec [Firefox 60](/fr/docs/Mozilla/Firefox/Releases/60), Firefox placera les différentes lignes dans des éléments [`
`](/fr/docs/Web/HTML/Element/div), ayant ainsi le même comportement que Chrome, Opera, Edge, et Safari. Vous pouvez essayer ceci dans l'exemple ci-avant. > **Note :** Internet Explorer, qui n'est plus maintenu, utilisait des éléments [`

`](/fr/docs/Web/HTML/Element/p) plutôt que des [`

`]. Si vous souhaitez utiliser un séparateur de paragraphe différent, l'ensemble des navigateurs prennent en charge [`document.execCommand`](/fr/docs/Web/API/Document/execCommand), qui fournit une commande `defaultParagraphSeparator` pour changer ce séparateur. Ainsi, pour utiliser des paragraphes ([`

`](/fr/docs/Web/HTML/Element/p)), on pourra exécuter : ```js document.execCommand("defaultParagraphSeparator", false, "p"); ``` De plus, Firefox prend en charge un argument *non-standard*, `br`, pour `defaultParagraphSeparator` depuis Firefox 55. Celui-ci peut s'avérer utile au cas où votre application web se base sur le comportement utilisé par les anciennes versions de Firefox. Pour retrouver l'ancien comportement de Firefox, vous pourrez utiliser cette ligne (uniquement dans Firefox) : ```js document.execCommand("defaultParagraphSeparator", false, "br"); ``` ## Sécurité Pour des raisons de sécurité, par défaut, Firefox ne permet pas au code JavaScript d'utiliser les fonctionnalités du presse-papier (copier, coller, etc.). Cela peut être débrayé dans les préférences `about:config` : user_pref("capability.policy.policynames", "allowclipboard"); user_pref("capability.policy.allowclipboard.sites", "https://www.mozilla.org"); user_pref("capability.policy.allowclipboard.Clipboard.cutcopy", "allAccess"); user_pref("capability.policy.allowclipboard.Clipboard.paste", "allAccess"); ## Un exemple d'éditeur de texte ```html Rich Text Editor

Lorem ipsum

``` ## Voir aussi - [`HTMLElement.contentEditable`](/fr/docs/Web/API/HTMLElement/contentEditable) - L'attribut universel [`contenteditable`](/fr/docs/Web/HTML/Global_attributes#contenteditable) - [`caret-color`](/fr/docs/Web/CSS/caret-color), qui permet de définir la couleur pour le curseur d'insertion de texte