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

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

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

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

HTML5

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

HTML

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

CSS

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

Q&A

解決済

2回答

4579閲覧

BEMにおける使いまわしするクラスの記述の仕方について

Silky

総合スコア34

CSS3

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

HTML5

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

HTML

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

CSS

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

1グッド

1クリップ

投稿2019/09/08 04:54

編集2019/09/08 13:48

現在BEMの学習中で、少し悩んでいることがあります。
BEMは「Block__Element--Modifier」形式でクラスの記述を行い、クラス同士の関係性がより明確になるのだと感じました。
ただし、共通で使いまわししているクラスを入れ込むと、いきなり流れが変わり不自然になる感じがします。
しかし、実際問題は共通のクラスを使いまわししたいので、これでいいのか。。。?と悩んでいます。

例をあげてみます。

下記のコードでいうと、「inner」と「section____ttl」は仮に、他の箇所で定義されているクラスで、ここでも使いたいクラスということにします。
なので、「about____inner」や「about__ttl」という風に記述していません。

ブロックの中にいきなり他のブロック内で使用されているクラスが出てくるのはBEM的にはありなのでしょうか?

<section id="about"> <div class="inner"> <h1 class="section__ttl">このサイトについて</h1> <div class="about__item"> <p class="about__item-ttl">タイトル</p> <p class="about__item-txt">テキスト</p> </div> <div class="about__item"> <p class="about__item-ttl">タイトル</p> <p class="about__item-txt">テキスト</p> </div> </div> </div> </section>
ganota888👍を押しています

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

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

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

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

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

takopo

2019/09/08 07:09 編集

</div> が2つ多いですがコードはこれで合ってますか? about が id なのと、section__ttl の Block がないのも気になります。
Silky

2019/09/08 13:52

ご指摘ありがとうございます。 Divタグについて修正しました。 aboutがidなのは、ページ内リンクで飛ばすためにid指定が必要だからです。bemのブロックではidを使わないということですが、その場合ページジャンプ用のidはどうしたらいいんですかね????
takopo

2019/09/08 17:35 編集

すみません、こちらの返信を見ていませんでした。。 idを使ってはいけないわけではないです。(自分はアンカーリンク用と js 用にしか使わないのですが使う人もいると思います。) .about__item のブロックである .about がなかったのでそれが必要ですね。(なので、もしジャンプ用の id がいる場合は、下の回答と合わせて <section class="about section" id="about"> とするのが良いのではないでしょうか。
Silky

2019/09/08 17:49

ご返信ありがとうございます!! なるほど、確かに以下のようにclassとidを同居するといいですね <section class="about section" id="about"> takopoさんから教えていただいたFLOCSSの考え方も取り入れつつ、今後もBEMを積極的に使って慣れていきたいと思います。 ありがとうございました!!!
guest

回答2

0

こんにちは!一部コードの切り出しかと思いますので
局部的な事しかわかりませんが...以下ではダメなのでしょうか?

<section id="aboutpage"> <div class="inner"> <div class="section"> <h1 class="section__ttl">このサイトについて</h1> <div class="about"> <div class="about__item"> <p class="about__item-ttl">タイトル</p> <p class="about__item-txt">テキスト</p> </div> <div class="about__item"> <p class="about__item-ttl">タイトル</p> <p class="about__item-txt">テキスト</p> </div> </div> </div> </div> </section>

投稿2019/09/08 08:13

編集2019/09/08 08:15
Meeets

総合スコア48

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

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

Silky

2019/09/08 13:56

ご回答ありがとうございます! 説明が漏れていましたが、section__ttlは別の箇所(sectionブロック)で定義されたクラスであり、 それをaboutセクションで使いたいんです。。 その場合、aboutブロックの中で、いきなり単純にsection__ttlが使えますか?
guest

0

ベストアンサー

BEMだけではSilkyさんのような問題にぶつかってしまうので、FLOCSSなどのCSS設計手法を取り入れて、そのルールに従うのが良いのではないでしょうか。
CSS設計手法を使うと、再利用・拡張しやすいCSSを作ることができるようになります。

FLOCSS

もし自分が MindBEMding をベースに FLOCSS で設計するとしたら下記のようにするかなと思います。

html

1<section class="p-about"> 2 <div class="c-inner"> 3 <h1 class="c-ttl">このサイトについて</h1> 4 <div class="p-about__item"> 5 <p class="p-about__item-ttl">タイトル</p> 6 <p class="p-about__item-txt">テキスト</p> 7 </div> 8 <div class="p-about__item"> 9 <p class="p-about__item-ttl">タイトル</p> 10 <p class="p-about__item-txt">テキスト</p> 11 </div> 12 </div> 13</section>
  • about というプロジェクトには接頭辞にp-を付けます。
  • inner と ttl は共通するコンポーネントなので、接頭辞にc-を付けます。
  • プロジェクトからコンポーネントを上書きできますが、その逆はできません。

つまり

css

1.p-about .c-ttl {}

は許容されていますが、

css

1.c-inner .p-about__item {}

のような書き方は許容されていません。ただなるべく別レイヤーへの上書きは避けたいです。

なのでもし .ttl だけ色を変えたいというような場合、下のようにModifierを使うか、

html

1<h1 class="c-ttl c-ttl--primary">このサイトについて</h1>

css

1.c-ttl { 2 color: red; 3} 4 5.c-ttl--primary { 6 color: blue; 7}

もしくは.about 内だけ変えるのでしたら、

html

1<h1 class="p-about__ttl c-ttl">このサイトについて</h1>

css

1/* Component */ 2.c-ttl { 3 color: red; 4} 5 6/* Project */ 7.p-about__ttl { 8 color: blue; 9}

のように .p-about のElementとして別にスタイルを設定すれば、より分かりやすい書き方になるかなと思います。

ご質問の答えとしましては、CSS設計の種類によりますが、Blockの中に他のBlock内で使用されているクラスが出てくるのは「あり」だと思います。
ただしElementはそのBlockがあることが前提なので.section__ttlを使う場合は.sectionが必要です。

投稿2019/09/08 08:06

編集2019/09/08 12:36
takopo

総合スコア484

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

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

Silky

2019/09/08 14:07 編集

ご回答ありがとうございます! FLOCSSの考え方も教えていただきありがとうございます! >ご質問の答えとしましては、CSS設計の種類によりますが、Blockの中に他のBlock内で使用されているクラスが出てくるのは「あり」だと思います。 ただしElementはそのBlockがあることが前提なので.section__ttlを使う場合は.sectionが必要です。 Sectionといったような抽象的なブロックは単体で作りづらいので以下のような形はどうでしょうか? <section class="about section"> <div class="inner"> <h1 class="section__ttl">about</h1> <div class="about__item"> <p class="about__item-ttl">タイトル</p> <p class="about__item-txt">テキスト</p> </div> </div> </section> <section class="contact section"> <div class="inner"> <h1 class="section__ttl">contact</h1> <div class="contact__item"> <p class="contact__item-ttl">タイトル</p> <p class="contact__item-txt">テキスト</p> </div> </div> </section>
takopo

2019/09/08 15:21

>Sectionといったような抽象的なブロックは単体で作りづらいので以下のような形はどうでしょうか? いいと思います。スタイルの内容が分からないのであれなのですが、FLOCSSで書くと↓のような感じでしょうか。BEMは慣れてくるととても使いやすいのでぜひ覚えてみてください! ■ html <section class="p-about c-section"> <div class="c-inner"> <h1 class="c-section__ttl">about</h1> <div class="p-about__item"> <p class="p-about__item-ttl">タイトル</p> <p class="p-about__item-txt">テキスト</p> </div> </div> </section> <section class="p-contact c-section"> <div class="c-inner"> <h1 class="c-section__ttl">contact</h1> <div class="p-contact__item"> <p class="p-contact__item-ttl">タイトル</p> <p class="p-contact__item-txt">テキスト</p> </div> </div> </section> ■ scss // Component .c-inner { } .c-section { &__ttl { } } // Project .p-about { &__item { &-ttl { } &-txt { } } } .p-contact { &__item { &-ttl { } &-txt { } } }
Silky

2019/09/08 15:54

なるほど!非常に勉強になりました!BEMを用いながらも、足りないと感じたところはFLOCSSなど他のコンセプトで補って、より分かりやすいコードを書いていきたいと思います! 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問