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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

HTML

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

CSS

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

Q&A

解決済

1回答

1237閲覧

HTMLのBEMについて

shiabinu0607

総合スコア11

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

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

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

HTML

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

CSS

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

0グッド

1クリップ

投稿2020/09/19 11:59

下記HTMLとSassはQ & Aのアコーディオンを作ろうとしたものです。
1つ目のコードは模範回答のもので、2つ目のコードは自作のものです。

1つ目のHTMLについての質問なのですが、BEMの観点からみて、div class="accordion_body-in"(半角下線が入力できず全角になってます。)ではなく、div class="accordion__body--in"が正しい命名だと思うのですがどうなのでしょうか?

私自身BEMについてほとんど知識がなく、下記サイト
https://note.com/yiio/n/n0d9a8c22bf37
を見て、疑問に思ったので、的外れな質問でしたら申し訳ないです。

div class="accordion_body-in"でも問題ないようでしたら、divタグを消してdd class="accordion__bodyにdiv class="accordion_bodyのスタイルをまとめて当ててもいいような気がするのですがどうなのでしょうか?
実際に見てみても、レイアウトの変化は特になさそうです。
コードは2つ目のコードが、divタグを消してHTML、Sassを記述したものです。

ご回答よろしくお願い致します。

HTML

1<dl class="qa_items"> 2 <div class="qa__item accordion"> 3 <dt class="accordion__head">クリックするとどうなりますか?<span class="accordion__icon"></span></dt> 4 <dd class="accordion__body"> 5 <div class="accordion__body-in">アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。</div> 6 </dd> 7 </div> 8</dl>

Sass

1.accordion__body { 2 margin: 0; 3 background: #fff; 4 display: none; 5 border: 1px solid $color-main; 6 font-weight: 700; 7} 8 9.accordion__body-in { 10 padding: 12px 30px 14px 56px; 11 line-height: (24 / 16); 12 color: $color-main; 13 position: relative; 14 font-size: 16px; 15 16 &::before { 17 content: "A"; 18 position: absolute; 19 left: 20px; 20 font-weight: 700; 21 top: 14px; 22 font-size: 15px; 23 } 24}

HTML

1<dl class="qa_items"> 2 <div class="qa_item accordion"> 3 <dt class="accordion_head">クリックするとどうなる?<span class="accordion_icon"></span></dt> 4 <dd class="accordion_body">アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。アコーディオンでここが開きます。</dd> 5 </div> 6</dl>

Sass

1.accordion_body { 2 margin: 0; 3 background: #fff; 4 // display: none; 5 border: 1px solid $main-color; 6 font-weight: 700; 7 padding: 12px 30px 14px 56px; 8 color: $main-color; 9 position: relative; 10 line-height: (24 / 16); 11 font-size: 16px; 12 13 &::before { 14 content: 'A'; 15 position: absolute; 16 left: 20px; 17 font-weight: 700; 18 font-size: 15px; 19 top: 14px; 20 } 21} 22 23

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

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

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

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

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

guest

回答1

0

ベストアンサー

模範回答のサイトを見てないので断言できないのですが、accordion__body-ininはたぶんinnerのことだと思います。box の中に box を追加するときなどによくinnerという名前が使われます。
なのでこの in という部分は--inのような Modifier ではありません。

html

1<div class="box"> 2 <div class="box-inner"> 3 </div> 4</div> 5 6<div class="accordion__body"> 7 <div class="accordion__body-inner"> 8 </div> 9</div>

ハイフンを使わず、下みたいに Element にしたらいいじゃないと思うかもしれませんが、BEM ではblock__elementという関係を順守しますので、 Element をネストするような書き方は NG とされています。
なので上のようなクラス名になったのだと思います。

Element をネストしない
一番詳しいCSS設計規則BEMのマニュアル

html

1<!-- NG --> 2<div class="accordion__body"> 3 <div class="accordion__body__inner"> 4 </div> 5</div>

accordion__bodyの中にbody-inを追加した理由は制作者にしか分からないのですが、装飾のためか js で動かすために必要だったのかもしれません。もしそれが必要ないなら、なくても問題ないと思います。以下はサンプルです。よければ書き方の参考にしてみてください。

html

1<div class="qa"> 2 <dl class="qa__items"> 3 <!-- アイテム1件分ここから --> 4 <div class="qa__item accordion"> 5 <dt class="accordion__head">タイトル</dt> 6 <dd class="accordion__body"> 7 <div class="accordion__body-inner"> 8 テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト 9 </div> 10 </dd> 11 </div> 12 13 <!-- アイテム1件分ここから --> 14 <div class="qa__item accordion"> 15 <dt class="accordion__head">タイトル</dt> 16 <dd class="accordion__body"> 17 <div class="accordion__body-inner"> 18 テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト 19 </div> 20 </dd> 21 </div> 22 23 <!-- アイテム1件分ここから --> 24 <div class="qa__item accordion"> 25 <dt class="accordion__head">タイトル</dt> 26 <dd class="accordion__body"> 27 <div class="accordion__body-inner"> 28 テキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト 29 </div> 30 </dd> 31 </div> 32 </dl> 33</div>

scss

1.qa { 2 &__items { 3 4 } 5 6 &__item { 7 8 } 9} 10 11.accordion { 12 &__head { 13 14 } 15 16 &__body { 17 18 } 19 20 &__body-inner { 21 22 } 23} 24

投稿2020/09/20 18:48

takopo

総合スコア484

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

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

shiabinu0607

2020/09/23 17:08

遅くなってしまい大変申し訳ありません。 参考コード使わせていただきます!! わかりやすい解説ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問