如何防止(引导)固定顶部导航在移动设备上缩放

2024-01-18

在使用Bootstrap 3的固定顶部导航时,我注意到当用户在移动设备上使用原生缩放时,顶部导航也变得非常大。这会导致非常糟糕的用户体验,导航模糊了大部分内容并最终自行损坏,如以下示例所示:

这个问题可以在网上看到http://www.exploretrade.info/ http://www.exploretrade.info/并且似乎也影响了许多其他使用这种导航的网站;常见的解决方案是禁用用户缩放,但这会损害网站的可访问性。

我的问题是:当用户在移动设备上缩放内容时,如何保持固定顶部导航的显示大小不变

  • 使用JavaScript,可以计算当前设备应用的缩放,并动态更新CSStransform: scale指示2 https://signalvnoise.com/posts/2407-device-scale-user-interface-elements-in-ios-mobile-safari
  • 然而,这似乎不适用于position: fixed元素,缩小后最终以某种方式居中于屏幕

保留 Bootstrap 的navbar-top-fixed通过手机缩放

The final result: using css transform to keep fixed top header at constant size after zoom

仅在移动设备上,可以将缩放系数计算为window.innerWidth和屏幕宽度,如[2]所示。当用户切换缩放时,会触发调整大小事件;此外,当重新加载先前缩放的页面时,缩放系数将保持不变。因此,可以使用 jQuery 动态更新 CSS 转换,以保持标题的形状。请注意,与position: fixed,还需要对原点进行变换。申请班级device-fixed-height到引导程序nav and device-fixed-width品牌徽标和汉堡图标然后产生非常接近所需的结果。

  • Bug:当页面缩放时,汉堡包图标仍然向左移动一点。任何如何修复它的建议将不胜感激!
  • 测试平台:Android 4.4

实例: http://www.exploretrade.info/other/example-fixed-nav-after-zoom.html http://www.exploretrade.info/other/example-fixed-nav-after-zoom.html

源代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>Bootstrap zoom-proof fixed top nav</title>

    <!-- Bootstrap core CSS -->
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">

    <!-- Custom styles for this template -->
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <style>
    body {
     padding-top: 50px;
    }
    </style>
  </head>
  <body>
    <nav class="navbar navbar-inverse navbar-fixed-top device-fixed-height">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed device-fixed-width" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
             <i class="fa fa-bars"></i>
          </button>
          <a class="navbar-brand device-fixed-width" href="#">Example</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse device-fixed-width">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#contact">Contact</a></li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>
    <div class="container">
      <div class="starter-template">
        <h1>Bootstrap starter template</h1>
        <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p>

        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In in metus eget nisi imperdiet dictum ac eu metus. Morbi consequat sodales porta. Nam convallis sed dolor in ullamcorper. Vestibulum ut tortor porttitor, venenatis nulla iaculis, sollicitudin metus. Mauris ut hendrerit purus, sed ultricies lacus. Proin imperdiet, lectus vel efficitur hendrerit, quam tortor efficitur sapien, vehicula viverra magna ipsum vitae lacus. Sed faucibus elit vel massa placerat, in porttitor est suscipit. Pellentesque consequat condimentum elit, at sagittis erat euismod nec. Fusce consequat purus quis turpis volutpat, vel luctus tortor consectetur. Sed in lectus vitae enim fringilla faucibus. Mauris vitae risus ut ex convallis luctus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Etiam tempor ante augue, sed iaculis nisi porta quis.</p>
      </div>

    </div><!-- /.container -->


    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
    <script>

// from https://signalvnoise.com/posts/2407-device-scale-user-interface-elements-in-ios-mobile-safari
function getDeviceScale() {
    var deviceWidth, landscape = Math.abs(window.orientation) == 90;
    if (landscape) {
      // iPhone OS < 3.2 reports a screen height of 396px
      deviceWidth = Math.max(480, screen.height);
    } else {
      deviceWidth = screen.width;
    }
    return window.innerWidth / deviceWidth;
}

// mobile only - keep the position:fixed header at constant size when page is zoomed
if (navigator.userAgent.match(/Mobi/)) {
    $(window).on('load scroll', function() {
        var ds = getDeviceScale();
        $('.device-fixed-height').css('transform','scale(1,' + ds + ')')
            .css('transform-origin', '0 0');
        $('.device-fixed-width').css('transform', 'scale(' + ds + ',1)')
            .css('transform-origin', '0 0');
        })
}

  </script>
    </script>
  </body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止(引导)固定顶部导航在移动设备上缩放 的相关文章

随机推荐

  • Pyspark 结构化流处理

    我正在尝试使用 Spark 制作一个结构化流应用程序 主要思想是从 kafka 源中读取 处理输入 写回到另一个主题 我已经成功地使 Spark 从 kafka 读取和写入 但是我的问题在于处理部分 我已经尝试使用 foreach 函数来捕
  • 如何正确查询 ManyToManyField 中列表(或另一个 ManyToManyField)中的所有对象?

    我对构建 Django 查询来检查是否的最佳方法感到困惑alla 的元素ManyToMany字段 或列表 存在于另一个字段中ManyToMany field 举个例子 我有几个Persons 可以拥有不止一种专长 还有Job人们可以开始 但
  • Google Cloud Dataflow 中的自动缩放功能未按预期工作

    我正在尝试在我的数据流作业中启用自动缩放 如中所述本文 https cloud google com dataflow service dataflow service desc autoscaling 我通过以下代码设置相关算法来做到这一
  • 使用 Google Maps API 添加标记功能

    我有以下 Javascript 其中包括标准 Google 地图 APIinitialize 功能与定制addMarker 功能 地图将正常加载 但标记不会添加到地图中
  • 使用 IErrorHandler 和 TCP Message Security 导致超时

    我有一个附加了自定义 IServiceBehavior 的 WCF 服务 用于在客户端返回特定错误 当我使用 TCP Message Security 启用此代码时 我收到服务超时 您可以在下面看到重现错误的完整客户端和服务器代码 服务器代
  • 在 Xcode 中构建和使用 DYLIB

    我正在尝试在 Xcode 中构建 dylib 目前 dylib 已构建 但是当我将 dylib 拖到另一个项目中并尝试 import dylib 中的标头之一 Seeker h 时 出现以下错误 没有这样的文件或目录Seeker h 没有这
  • CSS3 / HTML5 的盒子阴影不均匀?

    我正在尝试为网站创建不均匀的阴影效果 请参阅下面的示例来了解我需要实现的目标 不幸的是 我不认为这可以用 CSS3 来完成 据我所知 box shadow 属性只能用于创建均匀分布的阴影 然而 我对 CSS3 HTML5 的了解并不多 所以
  • 为什么我的 public void Constructor {} 无法编译?

    我有一项作业 要求银行帐户能够从支票和储蓄帐户转移资金 交易存储在 ArrayList 中 并由用户指定何时转移资金 用于支票和储蓄的银行帐户类工作正常 但我创建的 TransferService 类在 NetBeans 中无法正确编译 这
  • 我的 Mac OS X Mountain Lion 上有太多蟒蛇

    我不久前更新到了 Mountain Lion 之前使用过 python 现在我的电脑上安装了 8 个 是的 8 个版本的 python ls l System Library Frameworks Python framework Vers
  • 捕获Using块的目标对象的构造函数中抛出的异常

    using SomeClass x new SomeClass c temp test txt 在 using 块内 一切正常 可以正常处理异常 但是如果构造函数SomeClass可以抛出异常吗 将您的使用放入 try catch fe 中
  • 如何在没有数据库的情况下制作自定义表单 - DJANGO

    所以我想上传文件 但只发送到本地存储而不是数据库 但我不知道如何制作自定义表格 突然 这是我的 models py from django db import models class Audio store models Model re
  • 删除 SQL 中的每个备用行

    我需要清理一个包含三列的表 ID 唯一标识符 观察值 nvarchar 和时间戳 日期时间偏移 内容由两个传感器以 1 小时的间隔生成 并且两个传感器的 Observation 值相同 我的想法是做一个 SELECT 查询 例如 SELEC
  • 不允许任何人访问目录 .htaccess

    它可能很简单 但我找不到它 我想制作一个 htaccess 文件 这样任何人都无法进入该文件夹 除了服务器上的 php 之外 有谁知道代码行吗 谢谢 马蒂 You want Deny from all
  • 不同包中的类名相同

    同一类可以存在于多个包中吗 换句话说 我可以有Foo java上课于com test package1 and com test package2 Update 现在我从包 1 中复制了类并放入包 2 中 现在我正在创建该类的实例 我希望该
  • C# Regex.Split:删除空结果

    我正在开发一个应用程序 该应用程序导入数千行 其中每行的格式如下 9070183020 04 02 2011 107222 M S SUNNY MEDICOS GHAZIABAD 32 768 00 我正在使用以下Regex将行拆分为我需要
  • Apache2 Django NameError:名称“TypeError”未定义

    我试图通过 apache2 在 VPS 上运行 django 应用程序 但我在网站错误文件中收到以下内容 也是 400 错误请求 Exception ignored in
  • 可以使用 Python 标准库完成结构化日志记录吗?

    我最近读到了有关结构化日志记录的内容 here https stackify com what is structured logging and why developers need it 这个想法似乎不是通过将简单的字符串作为一行附加
  • Chromium 嵌入式框架:使用“ExecuteFunctionWithContext”时创建对象失败

    Overview 我在 Delphi 2009 上使用 chromium 嵌入式框架 cef 它是最新版本 Error 我可以用ExecuteFunctionWithContext成功执行 JavaScript 回调例程 我可以为其提供参数
  • 在 Glassfish 部署期间,WEB-INF/lib 中的 JAR 库未添加到类路径中

    尽管我已经使用 Java 几年了 但我还是 Glassfish 和 Java EE 的新手 我继承了一个停滞的项目 现在我需要重新开始开发 我正在尝试按原样部署 Web 应用程序 以查看哪些内容有效以及哪些内容需要注意 虽然实现各种功能的代
  • 如何防止(引导)固定顶部导航在移动设备上缩放

    在使用Bootstrap 3的固定顶部导航时 我注意到当用户在移动设备上使用原生缩放时 顶部导航也变得非常大 这会导致非常糟糕的用户体验 导航模糊了大部分内容并最终自行损坏 如以下示例所示 这个问题可以在网上看到http www explo