「Webページ上の文字を、まるでWordやメモ帳みたいに直接書き換えられたら面白くない?」
そんな風に思ったことはありませんか?実は、HTMLには魔法のような属性があるんです。それが今回紹介する`contenteditable`(コンテンツエディタブル)属性。
今回は、この魔法を使って`p`タグや`pre`タグを「編集可能な場所」に変えていく方法と、そこで待ち受けている「ブラウザごとのちょっとしたクセ」について、現場の知見を交えてお話ししますね。
—
魔法の呪文「contenteditable」を使ってみよう
HTMLで書かれたテキストは、通常「表示するだけ」のもの。でも、要素に `contenteditable=”true”` を付け加えるだけで、その場所が入力フォームに早変わりします。
まずは、試しに `
` タグにこの魔法をかけてみましょう。
ここをクリックすると、文章を自由に書き換えられます!
これだけで、ユーザーが直接テキストを編集できる仕組みが作れました。まるで、真っ白なキャンバスに絵を描くような感覚ですよね。
—
なぜか起きる「改行の謎」:br vs p
ここからが少し泥臭い話です。現場でエンジニアが頭を抱えるポイントの一つが、「改行したときに何が起きるか」です。
実は、`contenteditable` を有効にした要素の中で `Enter` キーを押したとき、ブラウザがどう振る舞うかは意外とバラバラなんです。
1. `
` で囲む派:新しい段落(pタグなど)を生成する。
2. `
` を挿入する派:単に改行タグを入れるだけ。
これ、なぜ困るのかというと、CSSでデザインを整えているときに「思っていたレイアウトと違う!」という事態を招くからです。
比較してみましょう
例えば、あなたが作ったブログの編集画面で、ユーザーが改行を繰り返したとき。あるブラウザでは「段落ごとに綺麗なマージン(余白)」がつくのに、別のブラウザでは「ギュッと詰まった改行」になってしまう。これでは、せっかくのデザインが泣いてしまいますよね。
これを解決するための「現場の知恵」を一つ教えます。
—
実践:きれいな編集環境を作るヒント
もし、本格的なリッチテキストエディタを作りたいのであれば、ブラウザの「おまかせ」にせず、自分たちで挙動を制御するのが基本です。ただ、学習中の段階では「ブラウザによって改行のルールが違うことがある」と知っておくだけで、つまずいた時に「ああ、あのアレか!」と冷静になれるはずです。
` `タグを使うときの注意点
`pre`タグは「整形済みテキスト」を扱うためのもの。コードをそのまま表示する時によく使いますよね。ここに `contenteditable` を当てると、スペースや改行がそのまま反映されるので、プログラミングの学習ノートのようなものを作るには最適です。
function hello() {
console.log("ここを書き換えて試してみてね!");
}
`pre`タグの中では、Enterキーを押しても段落が分かれるのではなく、純粋な「改行コード」として扱われることが多いため、`p`タグよりも「コードの編集」には向いています。
---
つまずいても大丈夫。それがWebの面白さです
ここまで読んでみて、「なんだか奥が深そうだな」と感じたかもしれませんね。その通りです!
`contenteditable` を使って本格的なエディタを作るのは、プロの現場でも「かなり難易度が高い」部類に入ります。なぜなら、ブラウザごとに「Enterを押したときの挙動」や「コピペした時のタグの混入」がバラバラだからです。
でも、「まずは触ってみる」ことが大切。
- 「なぜ今の改行は`
`になったんだろう?」 - 「どうしてさっきの改行は`
`になったんだろう?」
そうやって自分なりに観察するだけで、あなたはもう立派なフロントエンドの卵です。まずは、上のコードをコピーして、ご自身の環境で遊んでみてください。思うようにいかなくて「なんだこれ!」と叫ぶ瞬間こそが、一番成長できる時間ですからね。
応援しています!何か疑問があれば、いつでもまた聞きに来てくださいね。

コメント