Wil*_*een 13 css media-queries angular
我在 Angular 中读到,使用CSS隐藏元素来隐藏这样的元素是一种非常糟糕的做法:
.container{
background-color : powderblue;
height : 50px;
width : 100%
}
@media (max-width: 400px){
.container{
display: none;
}
}Run Code Online (Sandbox Code Playgroud)
<div class="container"></div>Run Code Online (Sandbox Code Playgroud)
而且我知道显示或隐藏元素的 Angular 方式是使用*ngIf指令。
我怎样才能* ngIf以“角度方式”对媒体查询做出反应?
小智 28
您可以使用angular/breakpoints-angular-cdk
按着这些次序
在终端上
npm install @angular/cdk
Run Code Online (Sandbox Code Playgroud)
然后导入布局模块并将其添加到 NgModule 的导入列表中
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { LayoutModule } from '@angular/cdk/layout';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
LayoutModule
],
providers: [],
bootstrap: [AppComponent]
})
Run Code Online (Sandbox Code Playgroud)
在你可以在你的组件中使用它之后,只需从 @angular/cdk/layout
import { Component, OnInit } from '@angular/core';
import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';
@Component({ ... })
export class AppComponent implements OnInit {
public showContainer: boolean;
constructor(public breakpointObserver: BreakpointObserver) {}
ngOnInit() {
this.breakpointObserver
.observe(['(min-width: 400px)'])
.subscribe((state: BreakpointState) => {
if (state.matches) {
this.showContainer = true;
} else {
this.showContainer = false;
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
检查文档它是一个简单的 API
Angular Flex 布局是更好的解决方案。您不需要媒体查询,并且它具有特殊的响应功能来显示和隐藏例如
fxShow:此标记指定是否应显示其宿主元素
<div fxShow [fxShow.xs]="isVisibleOnMobile()"></div>
Run Code Online (Sandbox Code Playgroud)
fxHide:此标记指定是否不应显示其宿主元素
<div fxHide [fxHide.gt-sm]="isVisibleOnDesktop()"></div>
Run Code Online (Sandbox Code Playgroud)
无需编写大量 CSS,并且与 Angular 材质非常兼容。 https://github.com/angular/flex-layout