html - 媒体查询适用于浏览器调整大小,而不适用于移动设备

标签 html css responsive-design sass

我用 Google 搜索了我的问题,但找不到合适的解决方案。实际上,我正在构建一个当前使用 HTML 和 CSS 的 eBay 列表模板——我正在使用 SCSS 生成样式表。我现在正在处理我的模板的菜单方面。

我已经设置了我的媒体查询,以便在宽度小于 690 像素的设备上(我没有使用标准查询,我使用断点来适应我的内容——它们也可能会发生变化),菜单按钮变为 block 元素并显示在列中而不是行中(在桌面上)。

首先,这是我正在使用 atm 的媒体查询 - 它是一个名为 _media.scss 的 SCSS 部分文件中的混合,我将其导入到主 style.scss.

    @mixin bp-large {
      @media only screen and (max-width: 690px){
        @content;
      }
    }

这是使用 @import 'media';

导入到我的 style.scss 文件中的

这是我的菜单的 HTML:

          <div class='header'>
            <section>
              <div class='logo'>
                <h2>Company Logo</h2>
              </div>
              <div class='top-menu'>
                <ul>
                  <li><a href='#'>Store Front</a></li>
                  <li><a href='#'>Latest Arrivals</a></li>
                  <li><a href='#'>Featured Picks</a></li>
                  <li><a href='#'>Feedback</a></li>
                  <li><a href='#'>Contact</a></li>
                </ul>
              </div>
            </section>
          </div>

这是相关的 SCSS:

    section {
      width: 85vw;
      margin: 0 auto;
      .header & {
        @include bp-large {
          width: 60vw;
        }
      }
    }

    .logo {
      @include bp-large {
        text-align: center;
      }
    }

    .top-menu {
      background-color: $primary;
      text-align: center;
      width: 100%;
    }

    .top-menu ul {
      list-style: none;
      display: flex;
      text-align: center;
      flex-direction: row;
      @include bp-large {
        flex-direction: column;
     }
    }

    .top-menu ul li {
      flex-grow: 1;
      display: flex;
      align-items: center;
      background-color: $button-color;
      padding: 15px;
      border-right: 3px solid $accent-color;
      &:last-child {
        border: none;
      }
      &:hover {
        background-color: $button-hover;
        cursor: pointer;
      }
      @include bp-large {
        display: block;
        border-bottom: 3px solid $accent-color;
        border-right: none;
        &:last-child {
          border: none;
        }
      }
    }

我为我的元素设置了一个 GitHub 页面 @ http://dannyxcii.github.io/lst-tmp - 目前菜单确实做了它在智能手机上查看时应该做的事情(在添加以下 HTML 行之后):

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

但是 - 菜单位于页面左侧,最初不适合设备宽度 - 通常的“双击居中”会让它看起来像它应该的样子。关于如何解决这个问题的任何想法?

最佳答案

问题是浏览器使用的像素与硬件像素不同。他们使用所谓的 DIP(密度独立像素或设备独立像素)。 新的移动设备配备全高清屏幕或屏幕分辨率更高的像素。示例 Samsung galaxy s8 的分辨率为 2,960x1,440。由于它的宽度为 14440px,像 (max-width:760px) 这样的媒体查询或任何其他媒体查询都不起作用,因为它的最大宽度为 1440px。 然而,为了保持一定程度的一致性,有 DIP,DIP 将您的 CSS 像素转换为最适合查看您网站的内容。对于手机,DIP 中的宽度为 320px。 TL;DR:添加“meta viewport”标签后,您是在告诉浏览器使用 dips 而不是 CSS 像素。它通过将更高分辨率设备中的 2 个或更多像素映射到 1DIP,将每个移动设备视为 320px 设备。 优达学城免费提供了一个非常简短而有趣的类(class),它通过元视口(viewport)标签 Link to the course 进行。 .希望这会有所帮助:)

关于html - 媒体查询适用于浏览器调整大小,而不适用于移动设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47478950/

相关文章:

css样式覆盖顺序?

css - 我的 CSS 中的某些东西使我使文本元素出现在其标签下方的一行

html - 响应页面中的 Div 忽略移动浏览器中的视口(viewport)大小

javascript - jquery中如何判断一个div在另一个div的前面还是后面?

html - 为什么 Internet Explorer 以不同方式呈现输入?

Javascript表单验证,检查日期是否通过

html - 如何从文本顶部删除行高?

html - hero div中的居中定位文本

javascript - 这种带有css和html5的静态背景切换过渡的名称

html - 具有共享字段的多个表单