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

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

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

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

CSS

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

Q&A

4回答

858閲覧

指定の頁のセレクタにのみCSSを適用させる方法を教えてください

takami3

総合スコア15

HTML

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

CSS

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

0グッド

0クリップ

投稿2025/01/30 07:50

編集2025/01/30 23:49

指定の頁のセレクタにのみCSSを適用させたい
サイト内全体にセレクタが指定してありますが、どのように指定されているのかわかりません。
個別の頁作成時に、普通にセレクタを指定すると必ず干渉しまいます
例えば、h2 {プロパティ: 値;}、p {プロパティ: 値;}、div {プロパティ: 値;}
よって、h2.sample{プロパティ: 値;}、p.sample {プロパティ: 値;}、div.sample {プロパティ: 値;}、.sample{プロパティ: 値;}
という方法を使っていますが、それでも干渉しあうものがあります
その場合は!important;を記述しています。
HTMLは以下の通りです

<h2 class="プロパティ">テキスト</h2> <p class="プロパティ">テキスト</p> <div class="プロパティ">テキスト</p> !important;を記述せずに指定のセレクタに適用させる方法はありませんか また、HTMLを上記のように毎回記述するため手間がかかります よい方法があればご教示いただけると幸いです 何卒よろしくお願いいたします。

<style>
h2.sample {
color: red;
font-weight: bold;
}
</style>
<h2 class="kimari">テキスト</h2>

1/30追記
色々試してみましたが、どうしてもh2とh3タグだけが反映されません
画像を添付しましたのでご確認いただけると幸いです
何卒宜しくお願い致します。イメージ説明

1/31追記
私の拙い説明で申し訳ございません。
説明を追記します
頁を作成する場合、HTMLタグやCSSが他のHTMLタグやCSSから影響を受けないよう記述しなければなりません。
ページ自体とその他のヘッターやフッター等と干渉しあうものがあるので、HTML記述の際にタグに「class」や「id」を定義する必要があるということです
「*・body div・p span・div p span・見出しタグ」等直接指定できません
例えば、body {}、div{}、p span{}、div p span{}の記述は干渉します
また、下記のように記述しても干渉します

<h2 class="sample">テキスト</h2> <div class="sample"> <h2>HTMLテキスト</h2> <p>HTMLテキスト</p> 干渉を受けないように「class」や「id」の定義の仕方(記述の方法)を教えてください 何卒宜しくお願い致します

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

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

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

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

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

maisumakun

2025/01/30 07:57

えっと、「サイト全体にかかっているCSSを除外したページを作りたい」ということでしょうか。 あまりに質問が抽象的すぎますので、もう少し掘り下げて状況説明がほしいところです。
juner

2025/01/30 08:05

各頁事に id とか class は指定されていないんでしょうか? 究極 data-page="1" みたいな独自属性でも可能ですが
Lhankor_Mhy

2025/01/30 23:51

質問の変更を拝読。 おそらく、ここに書かれていないコードの影響であろうかと思います。
Lhankor_Mhy

2025/02/01 04:20

コードのご提示をいただけないと、これ以上のお手伝いは難しそうです。
guest

回答4

0

ようこそ、CSSの沼へ!
とりあえず結論を書きます。

セレクタはクラス名の指定だけにしましょう
全てのクラス名をユニークにしましょう


まず、ひとつのサイトで同じコンポーネント(ページの部品)は同じデザインである、ということが前提です。
あるページのサイドバーのリンクが、別のページでは全然別の場所に別のデザインで配置されている、となると閲覧する人のためにならないからです。
ですので、同じコンポーネントに対するスタイルは、『干渉』を気にしなくていいというか、原則として同じになるべきです。


違うコンポーネントについて『干渉』が起きてしまう場合、これはおおむねクラスの名づけが悪いです。
原則として、完全に同じ意味を持つためデザインが完全に同じであるべき要素以外は、全て別のクラス名にすれば『干渉』はしません。

簡単に言うと、

html

1<style> 2 .user-card { 3 /* ... */ 4 } 5 6 .user-card h1 { 7 /* ... */ 8 } 9 10 .user-card .info { 11 /* ... */ 12 } 13</style> 14<div class="user-card"> 15 <h1></h1> 16 <div class="info"></div> 17</div>

↑こうではなくて↓こう書きましょう、ということです。

html

1<style> 2 .user-card { 3 /* ... */ 4 } 5 6 .user-card__name { 7 /* ... */ 8 } 9 10 .user-card__info { 11 /* ... */ 12 } 13</style> 14<div class="user-card"> 15 <h1 class="user-card__name"></h1> 16 <div class="user-card__info"></div> 17</div>

これについては、BEMというCSS設計手法(とその分派)が一般に使われています。


ただ、BEMにせよ、その派生のOOCSSにせよ、SassやCSS変数が本格的に使われるようになる前の思想でして、2025年現在に古典的なCSS設計を忠実に使うのが正しいのか、疑問が残るところです。
さらに、@layer@scopeの実装により、これらの手法は今後使われなくなっていくかもしれません。
また、別の設計思想を持つBootstrapやTailwindのようなユーティリティクラスベースのCSSライブラリなどもありますし、VueやReactなどではスコープ付きCSSなどのライブラリを使ってクラス名をユニークにビルドすることもあります。


質問の変更を受けて追記

もし、ご質問の内容が「あるページのスタイルを別のスタイルの干渉を受けずに書きたいが、別のスタイルを変更できない|したくない」ということであるなら、カスケードレイヤーはどうでしょうか。

html

1 <div class="test">.test は、赤字イタリック</div> 2 <style> 3 @layer test{ 4 .test { 5 color: red; 6 font-style: italic; 7 } 8 } 9 </style> 10 <h1 class="test">h1.test は、赤字イタリックではない</h1> 11 <style> 12 h1 { 13 all: revert; 14 } 15 </style>

ただし、完全に干渉から逃れられるかというと、そういうことはないだろうと思います。
CSSファイルからの読み込みであれば、@import test.css layer(test)のように、@importルールで読み込んでください。

投稿2025/01/30 08:33

編集2025/01/31 01:21
Lhankor_Mhy

総合スコア37207

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

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

takami3

2025/01/30 12:54

ご回答いただき誠にありがとうございます 色々試してみました、 教えていただいたコードに簡単に記述してみましたが、どうしてもh2とh3タグだけが反映されません 画像を添付しましたのでご確認いただけると幸いです 何卒宜しくお願い致します。
Lhankor_Mhy

2025/01/30 23:53

質問の補足欄にも書きましたが、おそらく提示されている部分のコードだけでは解決することはできません。 回答に書いた、「セレクタはクラス名の指定だけ」「全てのクラス名をユニークに」は、全てのページの全てのスタイルで実行するものです。
takami3

2025/01/31 02:55

Lhankor_Mhy様 ご回答ありがとうございます おっしゃる通りカスケードレイヤーでも解決はできませんでした。 しかし指定しないものを指定できるので使い道があると感じます 色々試してみます ありがとうございます
Lhankor_Mhy

2025/01/31 03:42 編集

> 指定しないものを指定できる そうではないのです…… カスケードレイヤーとして指定すると、優先度を下げることができるのです。 優先度を下げれば、後から書いたスタイルで上書きできるのです。 上書きができるということは、別のスタイルから干渉されないということなのです。
juner

2025/01/31 04:04

> カスケードレイヤーでも解決はできませんでした。 もしかして別ファイルで予め読み込んでいませんか?( @import するならそれを廃さないと意味が無いのでは?
takami3

2025/01/31 05:12

ご説明ありがとうございます 干渉されないようにする方法の一つとして理解します ありがとうございます
takami3

2025/01/31 05:12

別ファイルで読み込んではいません
Lhankor_Mhy

2025/02/06 07:02

別質問で、実は @import を使っていないとのことお聞きしました。正しく伝わっていなかったようです。 また、おそらく、「別ファイルで読み込んではいません」というコメントについても正しくは伝わっていなさそうです。 質問に、「サイト内全体にセレクタが指定してありますが、どのように指定されているのかわかりません」とあります。まずは、このスタイルを指定しているファイルを見つけてみましょう。<link rel="stylesheet" ... で始まるタグがあるはずです。これが「別ファイルで読み込んでいる」ということです。
Lhankor_Mhy

2025/02/12 04:39

CSSファイルの見つけるのは難しそうですか? 他の質問を読んだのですが、もしかして、CMSのようなコンテンツ管理システム上でHTMLを書いていませんか? なので、サイトのベースCSSには触ることができないとか、そういうことではありませんか?
Lhankor_Mhy

2025/02/18 07:33

CMSのようなコンテンツ管理システム上でページの一部のHTMLを書いていて、その他の部分にまったく干渉できない、ということでしたら。CSSでの解決方法はないと思っていいです。!important または詳細度を強めて書いていくしかないかと思います。 当方の推測は当たっていましたでしょうか?
guest

0

CSSの優先順位は詳細度によります。正しい詳細度設定すればそうしかなりません

投稿2025/01/30 08:01

yambejp

総合スコア117203

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

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

takami3

2025/01/30 12:57

回答ありがとうございます。 調べてみたのですが私にはとても難しく理解できませんでした
Lhankor_Mhy

2025/01/31 03:14 編集

> takami3 さん CSS詳細度が理解できないのであれば、CSSを書くのは難しいかもしれません。 ↓こちらの文書はわかりやすいと思うのですが、いかがですか。 https://pepabo.github.io/css/specificity/ もしこの文書を読んで、今後も理解できる見込みがなさそうであれば、CSSでHTMLをデザインすることを諦める検討をしてみてもいいのかもしれません。 (BootstrapやTailwindを使う、他人に作らせる、など)
takami3

2025/01/31 05:13

分かりやすい内容でした ありがとうございます
guest

0

どのように指定されているのかわかりません。

まずは、それを特定するのが先決かと思います。ブラウザ内の検証ツールで、どんなセレクタでCSSを適用しているのかも確認できます。

投稿2025/01/30 08:06

maisumakun

総合スコア146329

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

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

0

Windows 11、Edge、Chrome、Firefoxで確認しました。

画像のHTMLとブラウザー表示が合ってないです。
エディターの表示していない部分に何かあると思います。

  • 最初に「test」がある
  • 最初の「緑」と「テキストテキストテキスト」のサイズが違う
  • <h3>の「緑」に下線がある
<style> .user-card { font-size: 2em; } .user-card__name { color: blue; } .user-card__info { color: green; } </style> <div class="user-card"> <h1 class="user-card__name">青</h1> <div class="user-card__info">緑</div> <p>テキスト<span>テキスト</span>テキスト</p> </div> <h2 class="user-card__name">緑</h2> <p>テキスト<span class="user-card__info">midori</span>テキスト</p> <h3 class="user-card__name">緑</h3> <p class="user-card__info">緑</p> <div class="user-card__name"> <p>あお</p> <p>あお<span>あお</span>あお</p> </div>

イメージ説明

投稿2025/01/30 14:25

hiroki-o

総合スコア1255

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

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

takami3

2025/01/30 23:43

ご回答いただきありがとうございます 私の拙い説明で申し訳ございません。 おっしゃる通り各ページに共通反映され干渉しあうため エディターの表示していない部分が影響しています。 頁を作成する場合、HTMLタグやCSSが他のHTMLタグやCSSから影響を受けないよう記述しなければなりません。全てに対してクラスを定義する必要はない。別途CSS定義が必要なタグにのみクラスを定義する必要があります ページ自体とその他のヘッターやフッター等と干渉しあうものがあるので、HTML記述の際にタグに「class」や「id」を定義する必要があるということです 「*・body div・p span・div p span・見出しタグ」等直接指定できません 例えば、body {}、div{}、p span{}、div p span{}の記述は干渉します また、下記のように記述しても干渉します <h2 class="sample">テキスト</h2> <div class="sample"> <h2>HTMLテキスト</h2> <p>HTMLテキスト</p> ご回答いただいた方法 また、ご回答いただいた全て別のクラス名にしても特定のものが干渉する状況です 干渉を受けずにそのページにのみ影響を与える記述の方法がないかご質問です h2に関しては「!important;」を使用することで適用させることはできました 何卒宜しくお願い致します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.33%

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

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

質問する

関連した質問