【问题标题】:Removing HTML element on mobile view?删除移动视图上的 HTML 元素?
【发布时间】:2013-06-15 16:00:44
【问题描述】:

我没有使用 jquery mobile。

我在 WordPress 中构建了一个模板,并有一个全宽背景,可以为每个页面设置不同的背景:Background_1.jpg = Home, Background_1.jpg = About, ens....

这是前端加载的内容:

<div id="bg">
    <img id="background" src="images/Background_1.jpg" alt="background">
</div>

所以我的问题如下:

当我进入流体网格布局时,我想完全删除这个元素以加快加载时间。

我也不想隐藏它,我想在窗口大小小于 600px 时删除 html。

以前有人做过吗?

【问题讨论】:

  • 进入流体网格布局是什么意思?当您可以使用 JavaScript 删除元素时,该元素已经加载到 DOM 中并可能呈现。

标签: jquery mobile fluid-layout


【解决方案1】:

在您的 CSS 中使用媒体查询。 像这样的:

@media (max-width: 767px) {
    .styleName {
        display:none;
    }
}

如果窗口大小小于 767px,这将隐藏 css 元素。您确实需要在 html 中使用正确的标记:

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

要在移动视图上隐藏 div,您需要合适的窗口大小。这与引导框架差不多:

/* Landscape phones and down */
@media (max-width: 480px) { ... }

要在您的代码中实现这一点,您可以使用:

<div id="bg" class="styleName">
CODE
</div>

在此处阅读更多信息: Mobile Device Trick

【讨论】:

  • 嗨,我知道你解释的怎么做,但我认为你误解了。当屏幕尺寸小于 480 像素时,我想删除 html。
  • 好的,我明白了.. 不过我倾向于同意@zdyn。当浏览器确认、阅读并实施代码 hack 以删除 bg div 时,如果您有上述 hack,那么 div 无论如何都会在浏览器中呈现。我想它取决于你的 bg 的文件大小,如果这会让你减慢到一个非常小的块颜色,1px x 1px,你为什么不改变 bg 图像。这将立即呈现并加快加载时间。只需将 display:none 替换为新背景: url(img/block.jpg);我希望我有帮助..
  • 是的。我将对此进行更多思考并从那里开始,因为我不能比我已经缩小背景图像的大小而且我不能更改代码,因为我需要在每个页面上自定义背景(挑剔的客户端),我会有想点别的。
【解决方案2】:

多年后,经过大量测试、培训和一般经验。

我发现有不同的解决方案最适合这样的情况:

  1. 使用可在 WordPress 中轻松完成的 PHP 图像库优化您的图像,这将使图像对网络友好并在所有设备上加载更快。
  2. 使用 PHP 检测 Apache 请求的屏幕大小并使用挂钩加载模板文件。就像 AMP 插件为移动设备加载不同的主题一样。
  3. 使用 PHP 检测屏幕尺寸并根据尺寸优化/生成图像。

我在我的 WordPress 旁边使用PHP Image Library 来生成和加载我想要的大小和质量的图像,并允许我即时更改大小。

对于屏幕/用户代理检测,我使用Mobile-Detect

您还可以结合使用这两种解决方案以获得最佳效果。

【讨论】:

    【解决方案3】:

    你在 2013 年领先于你的时代,幸运的是,在 2022 年,事情开始迎头赶上:P

    最佳答案只说明了一半(将display:none 与媒体查询一起使用),因为即使图像未显示,它仍会被加载(导致性能下降)。

    如果图片不在页面顶部(桌面版),那么您很幸运,只需添加 lazy loading for the image

    如果您使用图片作为背景,我建议您考虑使用 CSS - 特别是 background-image: image-source 加上媒体查询以在移动设备上排除图片。

    .bg {
      background-image: -webkit-image-set(
        url("images/Background_1.jpg") 1x,
        url("images/Background_2.jpg") 2x);
      background-image: image-set(
        url("images/Background_1.jpg") 1x,
        url("images/Background_2.jpg") 2x);
    }
    @media (max-width: 600px) {
        .bg {
            background-image:none;
        }
    }
    

    不幸的是,目前很难一直进行优化,因为您可能还希望使用不同的文件格式(例如 webp 或 avif) - 这些都没有得到很好的支持。有一些解决方法,在此答案中进行了描述:https://stackoverflow.com/a/59970037/1912127

    我很想知道您在 2013 年提出了什么解决方案。

    【讨论】:

    • 自从我写这篇文章以来已经有一段时间了,幸运的是不再经常与前端客户端合作。但是在某些项目中,这个问题仍然不时出现。我仍然使用 Mobile-Detect 库,因为这些年来它一直保持最新状态,您提到的延迟加载以及更优化的更新文件格式以及缓存和良好的 CDN。
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多