La combinazione di valori dell'attributo contenteditable "solo testo normale" è ora disponibile come riferimento base

Data di pubblicazione: 20 marzo 2025

Quando vuoi consentire all'utente di inserire informazioni in testo normale, la prima cosa che ti viene in mente potrebbe essere un <textarea>. Questo approccio funziona in molti casi e non richiede alcuno sforzo particolare per farlo funzionare con i moduli, ma presenta anche delle limitazioni.

Un esempio è l'aumento dinamico del <textarea> con i contenuti senza ricorrere a hack. Esiste field-sizing: content, ma il supporto dei browser è limitato. È qui che entra in gioco la combinazione di valori dell'attributo contenteditable="plaintext-only". Puoi aggiungerlo a elementi generici come <div> e lasciare che sia l'elemento a occuparsi automaticamente del ridimensionamento.

Un'altra limitazione è lo stile. L'API CSS Custom Highlight fornisce un meccanismo per applicare stili a intervalli di testo arbitrari in un documento utilizzando JavaScript per creare gli intervalli e CSS per applicare gli stili. Un <textarea> utilizza internamente un <div> nell'elemento shadow root dell'agente utente, motivo per cui lo stile del testo con l'API CSS Custom Highlight non funziona. Se utilizzata direttamente su un elemento come un <div> che hai creato contenteditable, l'API CSS Custom Highlight funziona perfettamente.

<style>
  ::highlight(highlight) {
    background-color: yellow;
    color: black;
  }
</style>

<div contenteditable="plaintext-only">Edit me</div>

<script>
  const parentNode = document.querySelector('div').firstChild;
  const range = new Range();
  range.setStart(parentNode, 0);
  range.setEnd(parentNode, 3);
  const highlight = new Highlight(range);
  CSS.highlights.set('highlight', highlight);
</script>

Riquadro Elementi di Chrome DevTools che ispeziona un&#39;area di testo che mostra che utilizza un elemento div in un elemento shadow dello user-agent.

Ecco uno screenshot della demo che mostra questa limitazione. Nota che il testo in <textarea> non è stilizzato, ma il testo nei due elementi <div> generici contenteditable lo è.

Demo che mostra come l&#39;API CSS Custom Highlight funzioni solo con gli elementi div contenteditable, ma non con textarea.