@media 查询以在 SASS 中排除 iOS 设备

Posted

技术标签:

【中文标题】@media 查询以在 SASS 中排除 iOS 设备【英文标题】:@media queries to exclude iOS device in SASS 【发布时间】:2013-09-18 20:46:24 【问题描述】:

我目前正在尝试创建适当的@media 查询来定位 3 个不同的设备组:手机、平板电脑和台式机

我在 SASS 中使用以下 mixin 来完成它:

@mixin respond-to($media) 
  @if $media == phones 
    @media only screen and (max-width: 320px)  @content; 
  
  @else if $media == tablets 
    @media only screen and (min-width: 321px) and (max-width: 979px)  @content; 
  
  @else if $media == desktops 
    @media only screen and (min-width: 980px)  @content; 
  

这实际上对我身边的大多数设备都非常有效。 但是我在这里有一台 iPad 2,并使用 Safari 尝试了该网站,结果如下:

在纵向模式下一切都很好。它应该由“平板电脑”组处理。 在横向模式下(当它有 1024px 宽度时)它仍然会落入平板电脑组。但它不应该因为我的布局在 980 像素以上的屏幕上完美运行。

我发现 ios 设备总是报告它们的屏幕尺寸,因为它们处于纵向模式(实际上是一个愚蠢的想法),在我的例子中是 768x1024。使用上面的媒体查询,当它处于横向时,它永远不会出现在非平板电脑部分。

有没有办法从平板电脑查询中排除处于横向模式的 ipad 2 而不会干扰其他设备(例如行为正常的机器人)?

否则,我必须使用自己想要避免的严格媒体查询分别针对每个设备。

【问题讨论】:

你真的要与这样的特定断点进行一场艰苦的战斗。你有没有想过让你的内容决定断点?我最近回答了一个关于这个的问题 ***.com/questions/14352108/… ,还可以查看 Brad Frost 的这篇新帖子,特别是第一部分 bradfrostweb.com/blog/post/… 断点来自内容。我必须应用低于 980 的中型屏幕规则,甚至应用低于 320 的不同规则。正如我所写:在大多数设备上都可以正常工作。只有 ipad 在实际可以显示 >980 但仍使用 【参考方案1】:

我敢打赌,问题出在您的视口元标记上。以下是我在所有响应式网站上使用的:

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

【讨论】:

以上是关于@media 查询以在 SASS 中排除 iOS 设备的主要内容,如果未能解决你的问题,请参考以下文章

使用@include-media写媒介查询

排除某些文件/库以在 Flutter Web 中构建

Sass 中的媒体查询

使用 Sass 从媒体查询中扩展选择器

在 CSS3 媒体查询中使用 Sass 变量

如何在 CSS 3 媒体查询中使用 SASS 逻辑 [重复]