HTML 属性: readonly

readonly は論理属性で、存在する場合、要素が変更可能ではなくなり、ユーザーがそのコントロールを編集できなくなります。

試してみましょう

概要

readonly 属性が input 要素に指定された場合、その入力欄をユーザーが編集できないので、その要素は制約検証が行われません。

readonly 属性はフォームコントロールの text, search, url, tel, email, password, date, month, week, time, datetime-local, number<input> 型と <textarea> 要素が対応しています。これらの入力型や要素のいずれかに設定された場合、 :read-only 擬似クラスが一致します。この属性が含まれなかった場合は、 :read-write 擬似クラスが一致します。

この属性は <select> や、 checkboxradio のように既に変更不可能な入力型、 file 入力型のように定義上初期状態で値を設定できない入力型は対応していません。 rangecolor は、どちらも既定値があります。 hidden も、非表示であればユーザーが値を入力することが期待できないので対応していません。ボタン型も、image を含め、すべて対応していません。

メモ: テキストコントロールだけが読み取り専用にすることができます。他のコントロール(チェックボックスやボタンなど)は、読み取り専用と無効との間に有用な違いがないため、 readonly 属性は適用されません。

入力に readonly 属性が設定されている場合、 :read-only 擬似クラスも適用されます。逆に、 readonly 属性に対応していても、この属性が設定されていない入力欄は、 :read-write 擬似クラスに一致します。

属性の相互作用

disabledreadonly の違いは、読み取り専用 (readonly) のコントロールは機能し、フォーカスを設定することもできるのに対し、無効な (disabled) コントロールはフォーカスを受け取ることができず、フォームで送信されず、一般に有効化されるまでコントロールとしては機能しません。

読み取り専用のフィールドはユーザーの操作で値を変更することはできないので、 requiredreadonly 属性が一緒に指定されている入力欄では効果がありません。

readonly が付いた値を動的に変更できる唯一の方法は、スクリプトを通して行うことです。

メモ: required 属性は readonly 属性が指定された入力欄では許可されていません。

ユーザビリティ

ブラウザーは readonly 属性を表示します。

制約検証

要素が読み取り専用である場合、要素の値をユーザーによって更新することができないため、制約検証は行われません。

HTML

html
<div class="group">
  <input type="text" value="Some value" readonly="readonly" id="text" />
  <label for="text">Text box</label>
</div>
<div class="group">
  <input type="date" value="2020-01-01" readonly="readonly" id="date" />
  <label for="date">Date</label>
</div>
<div class="group">
  <input type="email" value="Some value" readonly="readonly" id="email" />
  <label for="email">Email</label>
</div>
<div class="group">
  <input type="password" value="Some value" readonly="readonly" id="pwd" />
  <label for="pwd">Password</label>
</div>
<div class="group">
  <textarea readonly="readonly" id="ta">Some value</textarea>
  <label for="ta">Message</label>
</div>

結果

仕様書

Specification
HTML Standard
# attr-input-readonly
HTML Standard
# the-readonly-attribute

ブラウザーの互換性

html.elements.input.readonly

BCD tables only load in the browser

html.elements.textarea.readonly

BCD tables only load in the browser

関連情報