あなたが言っているのは、ページの CSS が、挿入したコンテンツのデフォルトのスタイリングをオーバーライドするということです。これはおそらく、コンテンツのすべてのスタイル属性を指定していない (および相対値を使用していない) か、具体性が十分に高くないという2 つの理由のいずれかが原因です。
すべてのスタイル属性を指定
コンテンツが次のようになっているとします。
<div id="#cool-bookmarklet">Here is some content</div>
CSS は次のようになります。
#cool-bookmarklet {
color: #000000;
font-size: 80%;
}
上記の2つの問題。2 つのスタイル属性のみが宣言されているため、他のすべての属性は他のスタイルから継承されます。ページにこのような CSS があった場合はどうなるでしょうか。
div {
width: 70%;
background-color: #000000;
}
その CSS がコンテンツ (div) に適用されるため、問題が発生します。div 'cool-bookmarklet' は親の 70% の幅になり、背景色は黒になります。良くない。
また、font-size は相対値です。つまり、継承された値の 80% になります。したがって、ページで指定された font-size が 10px の場合、フォントは 8px になります。ここでは、継承されたスタイルの問題を回避するために、明示的なサイズ変更を使用するのがおそらく最善です。
継承されたスタイルを避けるために、CSS は次のようになります。
#cool-bookmarklet {
color: #000000;
font-size: 12px;
width: 400px;
background-color: #ffffff;
margin: 0;
padding: 0;
font-weight: normal;
/* etc, etc */
}
特異性
多くの人が学んでいない CSS の部分があり (私も理解するのに時間がかかりました)、それは特異性と呼ばれます。特異性は、2 つのセレクターが競合する場合に要素に適用する CSS スタイルをブラウザーが決定するために使用されます。
CSS仕様から:
セレクターの特異性は、次のように計算されます (仕様から)。
- 宣言がセレクタ付きのルールではなく 'style' 属性である場合は 1、そうでない場合は 0 (= a) (HTML では、要素の "style" 属性の値はスタイル シートのルールです。これらのルールにはセレクタがありません。つまり、a=1、b=0、c=0、d=0 です。)
- セレクター内の ID 属性の数をカウントする (= b)
- セレクター内の他の属性と疑似クラスの数をカウントします (= c)
- セレクター内の要素名と疑似要素の数を数える (= d)
4 つの数 abcd を (基数が大きい数体系で) 連結すると、特異性が得られます。
したがって、html 要素の style 属性の = スタイル。b = id セレクター、c = クラス名と属性、d = タグ名。2 つのセレクターが同じ要素をターゲットにしている場合は、特異性が最も高いセレクターが「勝ち」ます。
少しややこしいですが、数回試してみるとコツがつかめます。
CSS に次の 2 つのルールがあるとします。
#cool-bookmarklet { color: red; }
div { color: blue; }
そして内容:
<div id="cool-bookmarklet">Here is some content</div>
セレクター「#cool-bookmarklet」の特異性は 100 (a=0、b=1、c=0、d=0) になります。セレクター 'div' の特異性は 1 (a=0、b=0、c=0、d=1) です。「#cool-bookmarklet」が勝ち、div に赤いテキストが表示されます。
ブックマークレットがスタイルシートを挿入してコンテンツのスタイルを設定する場合、具体性がより高い場合、ページ上の他の CSS がそれをオーバーライドする可能性があるため、これは重要です。多くの場合、コンテンツに ID を付与するのが最も簡単です (特定性が高い 'b' です)。これにより、コンテンツをターゲットにすることができ、他のスタイルのオーバーライドについて心配する必要がなくなります。
それが役立つことを願っています!