[解決済み】Angular 2 - innerHTML スタイリング
質問
私はHTTPコールからHTMLコードのチャンクを取得しています。HTMLブロックを変数に入れ、[innerHTML]でページに挿入していますが、挿入されたHTMLブロックにスタイルを設定することができません。どなたか、これを達成するための方法をご存知ですか?
@Component({
selector: 'calendar',
template: '<div [innerHTML]="calendar"></div>',
providers: [HomeService],
styles: [`h3 { color: red; }`]
})
スタイルを設定したい HTML は、変数 "calendar" に含まれるブロックです。
どのように解決するのですか?
アップデート2
::slotted
::slotted
はすべての新しいブラウザでサポートされるようになったので
ViewEncapsulation.ShadowDom
https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
アップデート1 ::ng-deep
/deep/
は非推奨となり、代わりに
::ng-deep
.
::ng-deep
もすでに非推奨とされていますが、まだ代替はありません。
いつ
ViewEncapsulation.Native
はすべてのブラウザで適切にサポートされ、シャドウ DOM 境界を越えたスタイリングをサポートします。
::ng-deep
はおそらく廃止されるでしょう。
オリジナル
AngularはDOMに追加するHTMLにあらゆる種類のCSSクラスを追加し、シャドーDOMのCSSカプセル化をエミュレートして、コンポーネントからのスタイルのにじみ出しを防ぎます。Angularはまた、これらの追加されたクラスに合わせて追加したCSSを書き直します。を使って追加されたHTMLに対して
[innerHTML]
が追加されていないため、書き換えたCSSが一致しません。
回避策として
- コンポーネントに追加されたCSSの場合
/* :host /deep/ mySelector { */
:host ::ng-deep mySelector {
background-color: blue;
}
-
に追加されたCSSについて
index.html
/* body /deep/ mySelector { */
body ::ng-deep mySelector {
background-color: green;
}
>>>
(そして、同等の
/deep/
しかし
/deep/
はSASSでよりよく機能する)と
::shadow
これらは shadow DOM CSS combinators (非推奨) に類似しており、以下のような場合にのみ動作します。
encapsulation: ViewEncapsulation.Emulated
これは Angular2 のデフォルトです。これらはおそらく
ViewEncapsulation.None
が、その場合は必要ないので無視されるだけです。
これらのコンビネータは、クロスコンポーネント・スタイリングのためのより高度な機能がサポートされるまでの中間的な解決策に過ぎない。
別のアプローチとして
@Component({
...
encapsulation: ViewEncapsulation.None,
})
CSS をブロックするすべてのコンポーネント(CSS を追加する場所と、スタイルを設定したい HTML がある場所に依存します - たとえば、次のようになります)。 すべて コンポーネントを使用します。)
更新
関連
-
Angularインタビュー質問まとめ1~基礎知識(Angular v8+)編
-
[解決済み] jQueryを使用してdivのinnerHTMLを置き換えるには?
-
[解決済み] Angular HTMLバインディング
-
[解決済み] Angular:*ngClassを使った条件付きクラス
-
[解決済み] モジュール "@angular-devkit/build-angular" が見つかりませんでした。
-
[解決済み] Angular 2の "select "で新しい選択範囲を取得するにはどうすればよいですか?
-
[解決済み] Angular CLI SASSオプション
-
[解決済み】Angular 6でサービスを生成する際に、InjectableデコレータでprovidedInの目的は何ですか?
-
[解決済み] Angular Compiler は TypeScript >=3.4.0 と <3.5.0 を要求しているが、代わりに 3.5.3 が検出された
-
[解決済み] angular-cli server - デフォルトのポートを指定する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Angularフレームワーク入門
-
[解決済み] ionic 5 - ngForがデータを表示しない
-
[解決済み] Angular HTMLバインディング
-
[解決済み] コンポーネントテンプレートで要素を選択するには?
-
[解決済み] 例外が発生しました。既知のネイティブプロパティではないため、'ngFor'にバインドできない
-
[解決済み】親コンポーネントのCSSファイルから子コンポーネントのスタイルを設定する方法は?
-
[解決済み] Angularアプリケーションが本番モードと開発モードのどちらで動作しているかを確認する方法
-
[解決済み] angular2 tslintの警告を止めるためにコンポーネントのデフォルトプレフィックスを変更する方法
-
[解決済み] Angular 2の無効化されたコントロールがform.valueに含まれない
-
[解決済み] ページを離れる前に、未保存の変更点を警告する