テキストエリア

ネイティブのテキストエリア要素をラップした軽量コンポーネントで、面倒なアクセシビリティに関する問題に対処し、ホバーやフォーカスなどの状態についてより明確な定義を提供します。

インストール

はじめに、npm を介して Headless UI をインストールします。

npm install @headlessui/react

基本例

テキストエリアは`Textarea`コンポーネントを使用して構築されています。

import { Textarea } from '@headlessui/react'

function Example() {
  return <Textarea name="description"></Textarea>
}

ネイティブの`textarea`要素に通常渡すプロパティを`Textarea`に渡すことができます。

スタイル設定

Headless UI は、テキストエリアがフォーカスされているかどうか、ポップオーバーが開いているか閉じているか、メニューのどのアイテムが現在キーボードでフォーカスされているかなど、各コンポーネントに関する多くの状態を追跡します。

しかし、コンポーネントはヘッドレスであり、すぐに使える状態では完全にスタイルが適用されていないため、各状態に必要なスタイルを自分で提供するまで、UIでこの情報は確認できません。

データ属性の使用

Headless UI コンポーネントのさまざまな状態をスタイリングする最も簡単な方法は、各コンポーネントが公開する`data-*`属性を使用することです。

たとえば、`Textarea`コンポーネントは`data-focus`属性を公開しており、これはテキストエリアが現在マウスまたはキーボードでフォーカスされているかどうかを示し、`data-hover`属性はテキストエリアが現在マウスでホバーされているかどうかを示します。

<!-- Rendered `Textarea` -->
<textarea name="description" data-focus data-hover></textarea>

これらのデータ属性の存在に基づいて条件付きでスタイルを適用するには、CSS 属性セレクターを使用します。Tailwind CSS を使用している場合、データ属性修飾子を使用すると簡単です。

import { Textarea } from '@headlessui/react'

function Example() {
return <Textarea name="description" className="border data-[hover]:shadow data-[focus]:bg-blue-100"></Textarea>
}

利用可能なすべてのデータ属性のリストについては、コンポーネントAPIを参照してください。

レンダープロップの使用

各コンポーネントは、レンダープロップを介して現在の状態に関する情報を公開しており、これを使用して条件付きで異なるスタイルを適用したり、異なるコンテンツをレンダリングしたりできます。

たとえば、`Textarea`コンポーネントは`focus`状態を公開しており、これはテキストエリアが現在マウスまたはキーボードでフォーカスされているかどうかを示し、`hover`状態はテキストエリアが現在マウスでホバーされているかどうかを示します。

import { Textarea } from '@headlessui/react'
import clsx from 'clsx'
import { Fragment } from 'react'

function Example() {
  return (
    <Textarea name="description" as={Fragment}>
{({ focus, hover }) => (
<textarea className={clsx('border', focus && 'bg-blue-100', hover && 'shadow')}></textarea>
)}
</Textarea> ) }

利用可能なすべてのレンダープロップのリストについては、コンポーネントAPIを参照してください。

ラベルの追加

`Label`と`Textarea`を`Field`コンポーネントでラップして、生成されたIDを使用して自動的に関連付けます。

import { Field, Label, Textarea } from '@headlessui/react'

function Example() {
  return (
<Field>
<Label>Description</Label>
<Textarea name="description"></Textarea>
</Field>
) }

説明の追加

`aria-describedby`属性を使用して`Textarea`と自動的に関連付けるには、`Field`内で`Description`コンポーネントを使用します。

import { Description, Field, Label, Textarea } from '@headlessui/react'

function Example() {
  return (
<Field>
<Label>Description</Label>
<Description>Add any extra information about your event here.</Description>
<Textarea name="description"></Textarea>
</Field>
) }

テキストエリアの無効化

`Textarea`と関連付けられた`Label`と`Description`を無効にするには、`Field`コンポーネントに`disabled`プロパティを追加します。

import { Description, Field, Label, Textarea } from '@headlessui/react'

function Example() {
  return (
<Field disabled>
<Label className="data-[disabled]:opacity-50">Name</Label> <Description className="data-[disabled]:opacity-50">Add any extra information about your event here.</Description> <Textarea name="description" className="data-[disabled]:bg-gray-100"></Textarea> </Field> ) }

`Field`の外側でテキストエリアを無効にするには、`disabled`プロパティを`Textarea`自体に直接追加することもできます。

コンポーネントAPI

Textarea

ネイティブの`textarea`要素を薄くラップしたものです。

プロパティデフォルト説明
astextarea
文字列 | コンポーネント

レンダリングする要素またはコンポーネント。textarea

invalidfalse
ブール値

無効かどうか。textarea

disabledfalse
ブール値

無効かどうか。textarea無効化されている。.

autoFocusfalse
ブール値

無効かどうか。textarea最初にレンダリングされたときにフォーカスを受け取る必要があります。

データ属性レンダープロップ説明
data-invalidinvalid

ブール値

無効かどうか。textarea

data-disableddisabled

ブール値

無効かどうか。textarea無効化されている。

data-focusfocus

ブール値

無効かどうか。textareaフォーカスされている。

data-hoverhover

ブール値

無効かどうか。textareaホバーされている。

data-autofocusautofocus

ブール値

`autoFocus`プロパティが`true`に設定されているかどうか。

`Label`、`Description`、およびフォームコントロールをグループ化します。

プロパティデフォルト説明
asdiv
文字列 | コンポーネント

レンダリングする要素またはコンポーネント。field

disabledfalse
ブール値

フィールドが無効化されているかどうか。

データ属性レンダープロップ説明
data-disableddisabled

ブール値

フィールドが無効化されているかどうか。

`Label`コンポーネントはフォームコントロールにラベルを付けます。

プロパティデフォルト説明
aslabel
文字列 | コンポーネント

レンダリングする要素またはコンポーネント。label

passivefalse
ブール値

trueの場合、ラベルをクリックしても関連付けられたフォームコントロールにフォーカスが移動しません。

データ属性レンダープロップ説明
data-disableddisabled

ブール値

親`Field`が無効化されているかどうか。

`Description`コンポーネントはフォームコントロールについて説明します。

プロパティデフォルト説明
asp
文字列 | コンポーネント

レンダリングする要素またはコンポーネント。description

データ属性レンダープロップ説明
data-disableddisabled

ブール値

親`Field`が無効化されているかどうか。

スタイル設定済み例

事前にデザインされたTailwind CSS テキストエリアの例に興味がある場合は、私たちが作成した美しくデザインされ、熟練したコンポーネントのコレクションである**Tailwind UI**をご覧ください。

これは、このようなオープンソースプロジェクトでの私たちの活動を支援する素晴らしい方法であり、それらを改善し、維持し続けることを可能にします。