CSS 媒体查询不足以检测超大型移动/平板电脑设备与台式机



通常,在针对台式机检测移动或平板电脑设备时,我使用以下媒体查询。

@media only screen and (min-width: 991px) 

我有一个表格组件,它使用 CSS 中的可见性设置在悬停时呈现每行中的操作按钮。但是,当设备低于最小宽度 991 像素时,图标始终可见,因为移动设备不使用悬停。

现在的问题是,iPad在横向和iPad Pro上比宽度991更重要。是否有更高级的媒体查询或 Javascript 代码可用于检测它是移动/iPad 设备还是桌面浏览器。

我正在使用 React,并为内联媒体查询创建了自定义钩子以应用动态样式,但这有同样的问题。

谢谢乔纳斯添加一些关于屏幕尺寸的媒体查询的建议,但这不包括我的问题。我正在使用媒体查询来关闭悬停模式,一些大型平板电脑属于笔记本电脑屏幕尺寸。下面提供了一个很好的答案。

我不会尝试检测设备。更好的主意是寻求支持。 在这种情况下,你想知道设备是否支持指针设备并且能够悬停。如果不能悬停,那么至少它应该支持触摸。通过触摸,您仍然可以访问焦点状态。

.HTML

<div class="row">
<div class="td">
<a class="btn btn-primary" title="buy">
<i class="fa fa-shopping-cart" aria-hidden="true"></i>
<span>Add to shopping cart</span>
</a>
</div>
</div>

.CSS

.row .btn span { display: none; } // mobile first don't display the button text
.row .btn .fa { display: inline-block; } // mobile first display icon
@media (any-hover: hover) {
.row .btn span { display: inline-block; }
.row .btn .fa { display: none; }
.row .btn:hover .fa,
.row .btn:active .fa,
.row .btn:focus .fa { display: inline-block; }
}

尚未测试此代码,但这就是我开始研究解决方案的方式。

  • https://medium.com/@ferie/detect-a-touch-device-with-only-css-9f8e30fa1134
  • https://caniuse.com/#feat=css-media-interaction
  • 支持悬停的设备的媒体查询

相关内容

最新更新