2017-07-14 10 views
0

私がテストしたいくつかの電子メールクライアントで正しく表示されるHTMLメールを作成しましたが、私のページにそのプレビューを表示すると、innerHTML親。これを避けることが可能でなければなりません。なぜなら、私がGmailの電子メールを表示するとき、Gmail自体のスタイルを変更することなく正しく表示するからです。ここでインパクト親からのinnerHTMLのスタイルを停止する

は、いくつかの問題を示してHTML(ただし、Gmailの副作用なしで表示されます)です:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <style type="text/css"> 
      * { font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; } 
     </style> 
    </head> 
    <body> 
     <pre style="white-space:pre-wrap;">Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test </pre> 
    </body>  
</html> 

私はそう、私は私のページでそれを含めていますこのようアンギュラ4を使用しています:

<div [innerHTML]="myHtml | safeHtml"> 
</div> 
...とsafeHtmlは私が注入てるHTML上の角度のチェックをバイパスするだけのパイプです:

import { Pipe, PipeTransform } from '@angular/core'; 
import { DomSanitizer, SafeHtml } from "@angular/platform-browser"; 

@Pipe({name: 'safeHtml'}) 
export class SafeHtmlPipe implements PipeTransform { 
    constructor(private sanitizer:DomSanitizer){} 

    transform(html) { 

    return this.sanitizer.bypassSecurityTrustHtml(html); 

    } 
} 

それをdivのhtmlを表示しますが、スタイル情報はページのすべてを変更します。私はそれを得る - 私は文字通り埋め込みスタイルで*を使用しています。 ...しかし、私が言うように、Gmailは何らかの形でこれを「含む」ことを管理しているため、親要素を再レイアウトしていません。これをどのように達成するのですか?

私は理想的には、親スタイルが親や子供のスタイルの影響を受けないようにしたいと思っています(これは、Gmailの動作方法です) 。以下のHTMLを変更する

更新

は、電子メールのために働いて、それを持っていた、とCSSが含まれていますが、角度に埋め込まれて動作しませんでした:

<!DOCTYPE HTML> 
<html class="my-class"> 
    <head> 
     <style type="text/css"> 
      .my-class * { 
       font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; 
       color: blue; 
      } 
      .my-class pre { 
       white-space:pre-wrap; 
      } 
     </style> 
    </head> 
    <body> 
     <pre>Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test </pre> 
    </body>  
</html> 

これは(それはそうされているため、あなたがこれをdivに埋め込むと、htmlbodyのタグは取り除かれます(これは意味があります)。助言petryuno1 @として最善のアプローチはそれとしてコンポーネントを使用することであるスコープCSS /スタイルを考え

<!DOCTYPE HTML> 
<html> 
    <head> 
     <style type="text/css"> 
      .my-class * { 
       font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; 
       color: blue; 
      } 
      .my-class pre { 
       white-space:pre-wrap; 
      } 
     </style> 
    </head> 
    <body> 
     <div class="my-class"> 
      <pre>Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test Test test </pre> 
     </div> 
    </body>  
</html> 
+1

Angular 4は、コンポーネントごとにCSSを処理するように設計されており、親コンポーネントと干渉しないようにする必要があります。おそらく、[innerHTML]の代わりにAngularコンポーネントを使用して問題を防ぐことができます。 https://angular.io/guide/component-styles – petryuno1

+0

しかし、すでに関連性のないコンポーネントに影響を与えています.HTMLを含むコンポーネントに関係なく、ページ全体に影響を与えます。私のメニューのフォントのように、親コンポーネントでもありません。 – WillyC

答えて

2

:両方の組み込みおよび電子メールで - だから、ちょうどクラスでdivを含む親を追加し、すべての作品のみ、そのコンポーネントに、基本的なレベルでは次のような<div [innerHTML]="myHtml | safeHtml"></div>にクラスを適用することができます:コンポーネントが不可能な場合は代わりにクラスの*を対象に、CSSを変更すると

<div class="foo" [innerHTML]="myHtml | safeHtml"></div>

.foo * { font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; }

その<div>classプロパティがinnerHTMLにかかわらず、修正のままです。

うまくいけば助けてください!

+0

上記で言及したように、埋め込みスタイルは、無関係なコンポーネントのスタイルに既に影響を与えています。私はそれがセキュリティトラストを特にバイパスしているからだと思うので、CSSはブラウザを変更せずに与えられ、ブラウザは忠実にそれを適用するだけです。 – WillyC

+0

あなたが提案したソリューションは、HTMLを埋め込むのに役立ちますが、問題は電子メールとして使用するHTML文書全体を生成していることです。これを試してこのクラスを埋め込みHTMLのすべての要素に適用できると思いますか?それはうまくいくかもしれません - 私はそれをチェックしましょう... – WillyC

+0

'*'は**すべて**ページと親ページに適用されます。 '* 'の存在は、' 'innerHTML' '内の** ALL **要素に' font-family'を適用することが目標のように見えます。クラスの接頭辞/名前のスペーシングは、親要素が '*'の影響を受けないようにするのに役立ちます。 'styles'または' stylesUrl'を持つコンポーネントは、デフォルトで独自の名前空間を持ち、親要素が影響を受けないようにします。 –

関連する問題