Data publikacji: 20 marca 2025 r.
Gdy chcesz zezwolić użytkownikowi na wpisywanie informacji w postaci zwykłego tekstu, możesz od razu sięgnąć po element <textarea>
. Ta metoda sprawdza się w wielu przypadkach i nie wymaga żadnych specjalnych działań, aby działać z formularzami, ale ma też pewne ograniczenia.
Jednym z nich jest dynamiczne zwiększanie rozmiaru elementu <textarea>
w zależności od treści bez stosowania hacków. Dostępna jest field-sizing: content
, ale ma ograniczoną obsługę w przeglądarkach. Tutaj do głosu dochodzi kombinacja wartości atrybutu contenteditable="plaintext-only"
. Możesz dodać je do elementów ogólnych, takich jak <div>
, a element automatycznie zajmie się zmianą rozmiaru.
Innym ograniczeniem jest stylizacja. Interfejs CSS Custom Highlight API udostępnia mechanizm stylizacji dowolnych zakresów tekstu w dokumencie za pomocą kodu JavaScript do tworzenia zakresów i CSS do stylizacji. <textarea>
używa wewnętrznie <div>
w korzeniach cienia użytkownika, dlatego stylowanie tekstu za pomocą interfejsu CSS Custom Highlight API nie działa. Jeśli używasz go bezpośrednio w elemencie takim jak <div>
, który został utworzony przez Ciebie contenteditable
, interfejs API Custom Highlight API dla usługi porównywania cen działa prawidłowo.
<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>
Oto zrzut ekranu z prezentacji, która pokazuje to ograniczenie. Zwróć uwagę, że tekst w elemencie <textarea>
nie ma stylizacji, ale tekst w elementach <div>
i <div>
ma stylizację.contenteditable