【发布时间】:2020-01-03 19:47:19
【问题描述】:
我有以下代码,它使用 Angular Material 使我的图像响应:
<picture [ngStyle.xs]="{'width': '100%'}" [ngStyle.gt-xs]="{'width': '448px', 'height': '60px'}">
<source srcset="/assets/images/logo-text-lg.webp" type="image/webp" [ngStyle.xs]="{'width': '100%'}" [ngStyle.gt-xs]="{'width': '448px', 'height': '60px'}">
<source srcset="/assets/images/logo-text-lg.png" type="image/png" [ngStyle.xs]="{'width': '100%'}" [ngStyle.gt-xs]="{'width': '448px', 'height': '60px'}">
<img src="/assets/images/logo-text-lg.png" alt="TechScore" [ngStyle.xs]="{'width': '100%'}" [ngStyle.gt-xs]="{'width': '448px', 'height': '60px'}">
</picture>
我们的目标是让它精确到 448x60,除非它在一个超小的屏幕上。那么它应该是页面宽度的 100%。这个方法除了,因为我通过 Angular Universal 实现了服务器端渲染,即使在更大的屏幕上,我也能以 100% 的速度获得图像的闪光。
如果我查看源代码(禁用缓存),我可以看到来自服务器的标记包括 style="width: 100%",这意味着服务器端渲染版本认为屏幕特别小。
我如何让 Angular Universal 知道屏幕分辨率是多少,以及如何将该信息传递给 Angular Material 并覆盖它认为的分辨率,以便它选择正确的宽度?
更新
我认为我通过用户代理字符串检测它是否是移动浏览器然后设置默认断点,如下所述:https://github.com/angular/flex-layout/wiki/Using-SSR-with-Flex-Layout
FlexLayoutModule.withConfig({ssrObserveBreakpoints: [isMobile() ? 'xs' : 'md']})
但我一定做错了,因为我没有看到任何效果。
【问题讨论】:
-
当您的页面通过 SSR 提供时,我认为 Angular 中的内容不可用。稍后,当水合作用发生时,所有的 ng 规则都会启动,你会得到预期的结果。我会建议,通过可以加载 SSR 的 CSS 来执行此操作并查看需求,它看起来并不多
-
我同意 Praveen 的观点,我认为您将不得不为此使用 css。媒体查询是一种选择,您也可以使用
max-width,尽管如果没有可重现的 sn-p,很难更具体。
标签: css angular responsive-design angular-material angular-universal