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

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

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

Q&A

解決済

1回答

758閲覧

<button>の中に、常に<p>を入れるべきか

ageo

総合スコア2

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/10/04 11:13

###質問概要
teratailで投稿するとボタンにローダーが表示されますよね
それと同じことをしたいのですが、そのために<button>の中に常に<p>を入れるべきかどうか悩んでいます

以下の例にあるようにローダーを表示したい<button>の中に<p>を入れました
ですがクリックしてもローダーを表示したくない<button>もあります

いずれに場合でも<p>を入れるように統一すべきでしょうか?
それともローダーを表示したい場合だけに留めるべきでしょうか?

個人的な考えですが、CSSで文字色を常に button > p と統一した方がわかりやすいかと思っているので、常に<p>を入れておこうと思っていますが、アドバイス戴けましたら幸いです

###例
通常のボタンがこうあるとして

html

1<button type="button" class="send"> 2 <span class="icon"></span> 3 送信 4</button>

クリックすると次のようにjQueryでローダーをappendしようという考えです

jquery

1var loadingAnimation = '<div class="loadingAnimation" style="position:absolute;">・・・</div>'; 2$("button.send").append(loadingAnimation);

これだけですと「送信」のテキストの上に「・・・」のアニメーションがかぶりますが、「送信」のボタンが表示されているのがやな感じです

そのため「送信」のテキストを<p>で囲むという結論になりました

html

1<button type="button" class="send"> 2 <span class="icon"></span> 3 <p>送信</p><!-- ここを<p>で囲む --> 4</button>

これによってjQeuryで<p>を隠せば「・・・」のアニメーションだけを表示できる

jQeury

1var loadingAnimation = '<div class="loadingAnimation" style="position:absolute;">・・・</div>'; 2$("button.send").append(loadingAnimation); 3$("p").css('display':'none'); // <p>を隠す

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

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

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

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

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

kuma_kuma_

2020/10/04 11:19

この場合<P>ではなく<span>では?
ageo

2020/10/04 12:30

いつもありがとうです <span>よくわかりませんでしたが、他の方のご回答でなるほどと思いました
kuma_kuma_

2020/10/04 12:35

そっか この場合<span>は必ず書くと答えておきます。 一応書いとくとここの質問Googleがすぐに拾っちゃうの その際あんまりデカデカと「間違っています」としたくない場合こちらに書くようにしています。
ageo

2020/10/04 12:42

なるほど
guest

回答1

0

ベストアンサー

マークアップ構造は仕様に沿う形で決定します。

ご質問のように button > p の構造(要素の親子関係)に悩んだら「MDNで調べて判断する方法」を実践してみてください。

親要素にしたい要素の「許可されている内容」と子要素にしたい要素の「コンテンツカテゴリ」を比較して決定する方法です
(「MDN + <tagname>」をキーワードにGoogle検索してMDNのページを開く)。

許可されている内容:記述コンテンツ、但し対話型コンテンツがあってはならない

コンテンツカテゴリ:フローコンテンツ、知覚可能コンテンツ

button > p は誤った用法と判断できます。

HTML5 の仕様はセマンティクスの観点も含めて定められていますし、検索サイトもアルゴリズム開発には参考にしていると考えられますので、「インデックスさせたい」のであれば、代替要素として <span> を用いて、CSSは class で指定するのが良いでしょう。

投稿2020/10/04 12:18

AkitoshiManabe

総合スコア5434

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

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

ageo

2020/10/04 12:30

ありがとうございます!<span>にします ちなみに、常に<span>を入れるべきでしょうか
AkitoshiManabe

2020/10/04 12:36

いえ、「常に」ではありません。https://developer.mozilla.org/ja/docs/Web/HTML/Element/span には「汎用的な行内コンテナ」とありますので、button の子要素で区切るときは 「基本的に <span> でも良い」と言えるのですが、特別な意味合いを持たせたい場合には要素名は使い分けるのが正しいです(強調の <em>など)。テンプレートエンジン等で機械的な出力をする場合は <span> が手軽といった感じですね。
ageo

2020/10/04 12:41

いろいろなソースをありがとうございました 納得いたしましたので回答を締め切らせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問