如何在 Angular 中根据屏幕大小设置不同的 CSS 类?

Posted

技术标签:

【中文标题】如何在 Angular 中根据屏幕大小设置不同的 CSS 类?【英文标题】:How to set different css class based on screen size in Angular? 【发布时间】:2021-12-23 16:19:19 【问题描述】:

我的 Angular 应用程序中有这个浮动按钮,

  <button [ngClass]="
  'mdc-fab--extended': extendedClass,
  'mdc-fab--mini': miniClass
" class="mdc-fab mdc-fab--touch    ">
<div class="mdc-fab__ripple"></div>
<span class="material-icons mdc-fab__icon">mail</span>
<!-- <span class="floating-span">My Invite Link</span> -->
<div class="mdc-fab__touch"></div>

当屏幕尺寸为 768 像素或更低时,我需要将 mdc-fab--extended className 更改为 mdc-fab--mini 吗? 我能做些什么来实现这个功能? 谢谢

我已经尝试过了,但没有删除/添加类

    if (window.innerWidth < 768) 
  this.miniClass = true;
  this.extendedClass = false;
 else 
  this.miniClass = false;
  this.extendedClass = true;

【问题讨论】:

你正在考虑调整窗口大小?? 您的模板中的表达式写得不正确。我将其添加到答案中。 【参考方案1】:

您可以将hostlistener 添加到您的组件中。

public size700_1020 = false;
public size400_700 = false;

@HostListener('window:resize', ['$event'])
onResize(event) 
   alert(window.screen.availWidth);
   alert(window.screen.availHeight);

   if(window.innerWidth < 700 && window.innerHeight < 1020) 
       // now based on the screen size you want to check 
       // enable the variable and make it true
       // based on it, you can enable the class in template
    

在模板中:

<div class="size700_1020 ? 'addThisClass' : 'elseThis'"></div>

window 对象有多个属性可以满足您的要求。我附上了一些链接,它们可能会给你更多的方法here1和here2。

你也可以这样做。

import  Platform  from 'ionic-angular';

...
private width:number;
private height:number;

constructor(private platform: Platform)
    platform.ready().then(() => 
        this.width = platform.width();
        this.height = platform.height();
    );

根据问题中所做的更改:

  <button [ngClass]="miniClass ? 'addMiniClass':'extendedClass'" class="mdc-fab mdc-fab--touch    ">
<div class="mdc-fab__ripple"></div>
<span class="material-icons mdc-fab__icon">mail</span>
<!-- <span class="floating-span">My Invite Link</span> -->
<div class="mdc-fab__touch"></div>

【讨论】:

【参考方案2】:

组件.ts

    classFlag = false;
    ngOnInit()
     if (screen.width <= 768) 
      this.classFlag = true;
     else 
      this.classFlag = false;
     
  

html

<button class="mdc-fab  mdc-fab--touch"
  [ngClass]="classFlag ? 'mdc-fab--extended' : 'mdc-fab--mini'">
</button>

尝试screen.width 而不是window.innerWidth

【讨论】:

【参考方案3】:

组件:

classFlag = false;
ngOnInit()
  if (window.innerWidth <= 768) 
    this.classFlag = true;
   else 
    this.classFlag = false;
   
 

HTML:

<button class="mdc-fab  mdc-fab--touch"
  [ngClass]="classFlag ? 'mdc-fab--extended' : 'mdc-fab--mini'">
</button>

在调整窗口或浏览器大小时触发 检查这个:https://***.com/a/49917082/11492378

【讨论】:

我已经尝试过了,但是当宽度 您是否通过调整浏览器大小来检查它? 是的,我打开了检查器,并且浏览器的宽度为 768 像素或更小,它仍然是相同的 mdc-fab--扩展类而不是 mdc-fab--mini 类 您需要附加主机侦听器,并在此基础上添加类。如果这有任何意义,请检查我的回答。 否,那么您需要使用HostListener 进行事件。喜欢@Apoova 回答

以上是关于如何在 Angular 中根据屏幕大小设置不同的 CSS 类?的主要内容,如果未能解决你的问题,请参考以下文章

Angular Material 中的响应式排版

如何使用情节提要为不同的 iPhone 屏幕尺寸设置不同的字体尺寸?

Angular.js:如何根据字符长度动态减小字体大小?

Kivy - 如何根据显示大小设置窗口大小?

如何让div的大小占满整个屏幕

在剪辑内缩放