媒体查询在 iframe 中不起作用

Posted

技术标签:

【中文标题】媒体查询在 iframe 中不起作用【英文标题】:Media queries not working inside an iframe 【发布时间】:2015-01-29 09:19:59 【问题描述】:

我有一个响应式网页。它利用媒体查询。

但在 iframe 中加载的同一页面无法正常工作。

例如,考虑到我的网页,当屏幕宽度小于 640 像素时,我将背景颜色设置为红色。

@media only screen and (max-device-width : 640px) 

    .header-text 
        background-color: red;
    

因此,当我在新选项卡中加载该窗口并使浏览器宽度小于 640 像素时,背景颜色变为红色。

但同一个窗口在 320*480 尺寸的 iframe 中加载时没有红色背景色。

如何让媒体查询在 iframe 中工作?

【问题讨论】:

在父窗口中设置视口。解决方案在这里:***.com/a/20838525/5016546 【参考方案1】:

试试这种方式,而不是device,只针对width

改变

@media only screen and (max-device-width : 640px) 

@media only screen and (max-width : 640px) 

此外,如果您想避免在样式表中考虑媒体查询声明的顺序,建议同时针对 minmax 视口宽度

@media screen and (min-width: 320px) and (max-width: 640px) 
    .header-text 
       background-color: blue;
    

【讨论】:

这对我来说适用于“max-device-width”,但不适用于“max-width”。对于“最大宽度”,重要的是 iframe 的大小。【参考方案2】:

将下面的元数据包含在加载 iframe 的 html 中,它应该可以工作,至少在 android 设备上是这样。

<meta name="viewport" content="width=device-width, initial-scale=1">

【讨论】:

请注意,要使其在 ios 上运行,您需要:***.com/questions/23083462/… 是的,当我没有将它放在托管有问题的 iframe 的页面的头部时,我就遇到了这个问题。感谢您的提示!【参考方案3】:

我最终不得不以 iframe 宽度为目标。 (可能并非在所有情况下都有效) 但我所做的是让 iframe 的宽度为 100%,然后它会随窗口调整大小,所以我所做的只是针对 iframe 的 px 而不是窗口

【讨论】:

【参考方案4】:

我遇到的一个类似问题是 iframe 上的空 src 值,媒体查询没有按预期工作。

我有一个沙盒 iframe,可以在另一个页面中预览电子邮件模板。在通过对服务的 ajax 调用获取 html 数据后,我使用 javascript 注入来填充 iframe 的 html 内容。

我的解决方案是创建一个空的 html 文件,将其设置为 iframe src,然后使用 javascript 更新内容。

我页面上的代码:

<iframe src="/myfolder/dummy.html"></iframe>

iframe src 的代码:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <meta name="description" content="corrects media queries fails of email template previews" />
  <title></title>
</head>

<body>

</body>

</html>

【讨论】:

以上是关于媒体查询在 iframe 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥媒体查询在 Angular8 中不起作用

媒体查询在 React 中不起作用

calc() 在媒体查询中不起作用

媒体查询在 chrome 中不起作用,但在 iphone 上起作用

CSS 媒体查询在 IE 9 中不起作用

响应式媒体查询在 Google Chrome 中不起作用