質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1511閲覧

divタグの中にinputタグがある時に、親であるdivタグのどの領域をクリックした場合にも子のinputにフォーカスしたい

tanana_m

総合スコア28

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/07/11 02:01

編集2021/07/11 06:39

# 知りたいこと

タイトル通りなのですが、以下ソースで赤枠内のどの領域をクリックした場合でもinputにフォーカスしたいです。

https://codepen.io/takahirohimi/pen/NWjRMrr

html

1<div class='container'> 2 <input /> 3</div>

css

1.container { 2 border: 5px solid red; 3 padding: 50px; 4}

イメージ説明

実際の実装はReact(Next.js)で行っています。
できればid属性は使わないやり方を教えていただきたいです。

以上、ご教示よろしくお願いいたします。

ーーーーーーーーーーー追記ーーーーーーーーーーー

説明不足な内容がありました。
実際には以下のようにcontainerの中に複数のdiv(buttonタグを含む)が入ります。

https://codepen.io/takahirohimi/pen/NWjRMrr

html

1<div class='container'> 2 <div class='other'> 3 <button> 4 other 5 </button> 6 </div> 7 <input /> 8</div>

css

1.container { 2 border: 5px solid red; 3 padding: 50px; 4}

イメージ説明

このような場合に「赤枠内のotherボタン以外の場所をクリックした場合にinputにフォーカスしたい」です。

説明が不足しており大変申し訳ありませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayato7

2021/07/11 02:11

divタグをlabelタグに変更することも難しいのでしょうか?
tanana_m

2021/07/11 02:39

情報を補足しました。 可能ですが、補足した内容を考慮してもlabelタグで対応可能でしょうか?
guest

回答1

0

ベストアンサー

label要素で囲めばいいでしょう。

html

1<div class='container'> 2 <label> 3 <div class='other'>other</div> 4 <input /> 5 </label> 6</div>

css

1.container { 2 border: 5px solid red; 3} 4.container label { 5 padding: 50px; 6 display: block; 7} 8.other { 9 background-color: blue; 10}

あるいは、div を label に変えればいいでしょう。

html

1<label class='container'> 2 <div class='other'>other</div> 3 <input /> 4</label>

css

1.container { 2 border: 5px solid red; 3 padding: 50px; 4 display: block; 5} 6.other { 7 background-color: blue; 8}

<label> - HTML: HyperText Markup Language | MDN

labelタグの使い方 - HTMLリファレンス

投稿2021/07/11 02:14

編集2021/07/11 06:20
hatena19

総合スコア34064

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tanana_m

2021/07/11 02:39

ご回答ありがとうございます。 申し訳ありません、説明不足な内容がありましたので補足させていただきました。 補足を考慮した上でもご回答いただいた内容で対応可能でしょうか?
hatena19

2021/07/11 06:06 編集

可能です。 回答にリンクを追加しておきましたので、仕様、使い方を確認してください。 あとLabelは既定ではインライン要素なので、display: block; でブロックレベル要素に変換しておく必要があります。
tanana_m

2021/07/11 06:13

ありがとうございます。リンク先も確認しました。 otherのdivタグの中にbutton要素が入るのですが、この場合だとlabelは厳しいですかね…?
hatena19

2021/07/11 06:22

回答のコードをcontainerの中にdivがある場合のものに修正しましたので、確認ください。
tanana_m

2021/07/11 06:40

何度も申し訳ありません、試してみたのですがうまくいかず…。 私の方も質問の追記内容をさらに修正しましたので、ご確認いただけますでしょうか。
hatena19

2021/07/11 06:48

複数のフォーム要素があるということですね。 その場合、idとforを使うのがまっとうな解決法ですが、id属性を使えないという理由は何でしょうか。 <label class='container' for="input"> <div class='other'> <button> other </button> </div> <input id="input" /> </label>
tanana_m

2021/07/11 06:55

やはりidを使うことになるのですね。 使いたくない理由としては、ReactではCSSのスタイリングにおいてグローバルな名前空間を使用することは基本的に避けるべきとされているためです。 classであればコンポーネント単位でクローズドな名前空間にすることができるので問題無いのですが…。
hatena19

2021/07/11 07:04

Reactのことはあまり分からないのですが、 ラベルとフォーム要素の関連付けは、CSSのスタイリングではなくHTMLの機能なので関係ないようにおもいますが。 idを使わずにとなると、labelを position: absolute; で絶対配置するとか、スクリプトでクリック時イベントでフォーカス移動させるとか、無理やりの方法になってしまいます。
tanana_m

2021/07/11 07:15

承知しました。 参考にしていたNotionのInviteフォームのUIでは私の質問内容が実現されており、HTML, CSSを見る限りdivとinputのみで構成されていたので、おそらく後者のスクリプトでフォーカス移動等が行われていそうです。 たくさんご教示いただきありがとうございました、HMLTとCSSはまだまだ未熟なので大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問