2012-08-28 5 views
7

私はレポートを作成しています。報告書の中で、私は別のプロバイダから電子メールをレンダリングする必要があります。この電子メールは独自のCSS(通常はインラインCSSですが、私は通常、CSSをカプセル化するためにiframeを使用しているので、私は壊れませんが、今は使用できません。encapsulate css

iframeを使用せずにCSSをカプセル化する方法はありますか?

<html> 
    <head> 
    <style> 
     // I enclose it to content so it doesn't override the email css 
     #my_content table, #my_content p { 
     color: black; 
     } 
    </style> 
    </head> 
    <body> 
    <div id='my_content'> 
     ... some stuff ... 
    <div id='email'> 
     <html> 
      <head> 
      <style> 
       table { 
       margin-left: 100cm; // screws up all my tables 
       } 
       .... some styles that should only apply inside the email div ... 
      </style> 
      </head> 
      <body> 
      .... email content ... 
      </body> 
     </html> 
     </div> 
    </div> 
    </body> 
</html> 

を私はHTML構造を抽出し、本体だけで何を得るが、その後はないすべての私の電子メールは、それが必要となりますことができます:ここ

は私が午前問題の一例です。また、htmlは有効なものでなければなりません。

+0

あなたはクラスを使用していませんか? – ChaosPandion

+2

はい! 'scoped'属性を使います。私はそれがどこでもまだサポートされているとは思わない。 (Chromeでは 'chrome:// flags'でGoogle Chromeを有効にすることができます) – Ryan

+0

私はクラスを使用して、メールがどのように私のCSSを壊しているのかという質問をよりうまく説明しましょう – Hassek

答えて

1

自分のクラス名との衝突のために電子メールのCSS部分をチェックすることができます。彼らは唯一のあなたのdivに適用すること、 Listing known CSS classes using Javascript

+2

これが終わったら、彼は何をやろうとしているのですか? –

+0

私はこれらの衝突を若干修正された識別子で置き換えることができるかもしれませんが、単純にhaykのようなCSSを使うのは簡単ではありません。マート – Andre

5

あなたのCSSセレクタに#emailを付加することができます 私はちょうどあなたのために役立つことができ、この記事を見つけました。

例えば、

.classname { display: block }

#email .classname { display: block }

にある[編集]を変更します。あなたは、電子メールのCSSを制御することはできません場合はarxanasとして、 LESSの使用を検討することを提案。 lessは、CSSセレクタのネストを可能にするCSSプリプロセッサです。あなたがless.jsを含める場合は、このような何かを行うことができます。

#email { 
    CSS goes here 
} 

less.jsはこれを解析し、CSSに変換します。

+0

私は問題は、スタイルがロードされており、彼はそれらを制御できないと考えています。 –

+0

説明のためのarxanasに感謝します。私はこのシーンに対して提案を追加しましたo。 –

+0

私は電子メールの一部であるため、CSSを制御できません – Hassek