我试图改变整个页面的Angular 背景色(将使用身体,或html标签时,没有框架工作).我找不到最佳实践,我希望它是在框架内,如果可能的话,因为我正在建设一个应用程序的未来几年.
jgwigjjp1#
如果您使用的是angular-cli。应存在全局样式文件。
在那里你应该能够把你的风格,例如html { background-color: black; },以影响整个页面。
html { background-color: black; }
ogq8wdun2#
您可以从任何组件执行此操作。例如:
export class AppComponent implements AfterViewInit { constructor(private elementRef: ElementRef) {} ngAfterViewInit() { this.elementRef.nativeElement.ownerDocument .body.style.backgroundColor = 'yourColor'; } }
通过使用this.elementRef.nativeElement.ownerDocument,您可以访问window.document对象而不违反任何Angular 约定。当然,您可以使用window.document直接访问document对象,但是,我认为通过ElementRef访问它会更好。
this.elementRef.nativeElement.ownerDocument
window.document
document
ElementRef
4xrmg8kj3#
一般来说,使用ElementRef会使您的应用更容易受到XSS攻击。有关详细信息,请参阅this official Angular doc。此外,如果您使用的是多个具有自己的Shadow DOMs的组件,则如Andresson所建议的那样在styles.css文件中设置全局样式可能无法解决问题。这里有一个更安全的问题解决方案,使用 * 查看封装 *。在app.component.ts中将视图封装设置为None(不要忘记导入):
import {Component, ViewEncapsulation} from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], encapsulation: ViewEncapsulation.None })
接下来,转到app.component.css文件,简单地添加背景颜色:
body { background-color: green; }
此更改将在全局范围内影响你的应用。单击此处了解有关详细信息。
7gyucuyw4#
我不知道为什么没有提到它,但是把它添加到全局css文件中可以很好地工作:
body { background-color: red !important; }
mjqavswn5#
下面的解决方案是我遇到同样问题时遇到的另一种选择。为了让应用程序更好地适应不同的平台,我们可以使用Angular提供的Renderer2类作为服务,如下所示:
Renderer2
export class AppComponent { constructor(private el: ElementRef, private renderer:Renderer2){} ngAfterViewInit(){ this.renderer.setStyle(this.el.nativeElement.ownerDocument.body,'backgroundColor', 'yourchoice color'); } }
有关Renderer2及其方法的更多详细信息,请访问:渲染图2_描述
kninwzqo6#
您可能还需要重新考虑字体颜色:
body { background-color: black !important; color:greenyellow; } h1 { color: aquamarine;
aor9mmx17#
你可以在一个div中设置全部内容,并为该div设置样式:
<div style=" background-color: black; height: 100vh;">
height:100vh将把height设置为你屏幕的全长,这样背景颜色就像设置整个html的背景一样,但只适用于那个页面。
7条答案
按热度按时间jgwigjjp1#
如果您使用的是angular-cli。
应存在全局样式文件。
*样式.css
在那里你应该能够把你的风格,例如
html { background-color: black; }
,以影响整个页面。ogq8wdun2#
您可以从任何组件执行此操作。例如:
通过使用
this.elementRef.nativeElement.ownerDocument
,您可以访问window.document
对象而不违反任何Angular 约定。当然,您可以使用window.document
直接访问document
对象,但是,我认为通过ElementRef
访问它会更好。4xrmg8kj3#
一般来说,使用ElementRef会使您的应用更容易受到XSS攻击。有关详细信息,请参阅this official Angular doc。
此外,如果您使用的是多个具有自己的Shadow DOMs的组件,则如Andresson所建议的那样在styles.css文件中设置全局样式可能无法解决问题。
这里有一个更安全的问题解决方案,使用 * 查看封装 *。
在app.component.ts中将视图封装设置为None(不要忘记导入):
接下来,转到app.component.css文件,简单地添加背景颜色:
此更改将在全局范围内影响你的应用。单击此处了解有关详细信息。
7gyucuyw4#
我不知道为什么没有提到它,但是把它添加到全局css文件中可以很好地工作:
mjqavswn5#
下面的解决方案是我遇到同样问题时遇到的另一种选择。为了让应用程序更好地适应不同的平台,我们可以使用Angular提供的
Renderer2
类作为服务,如下所示:有关Renderer2及其方法的更多详细信息,请访问:渲染图2_描述
kninwzqo6#
您可能还需要重新考虑字体颜色:
aor9mmx17#
你可以在一个div中设置全部内容,并为该div设置样式:
height:100vh将把height设置为你屏幕的全长,这样背景颜色就像设置整个html的背景一样,但只适用于那个页面。