如何检测浏览器是否支持视口单元,如vh或dvh
How can I detect if a browser supports a viewport unit, like vh or dvh?
我计划制作一个响应速度非常快的网站。为此,我目前正在包含外部样式表。
但我只想把它包括在那些支持视口单位的浏览器中,比如vw。
那么,我该如何检测浏览器是否支持它呢。
请注意:我不想包括modernizer。
在现代浏览器中,您可以在CSS中使用@supports
来检查对各种事物的支持,包括视口单元。
在@supports
中包装您想要的任何样式,就像@media
查询一样:
@supports(height: 100vh) {
.myClass { height: 100vh; }
}
此示例测试浏览器是否支持vh
或dvh
等单元,或不存在的madeup
类型(即浏览器不知道的类型):
#supportVH::after, #supportDVH:after, #supportMadeUp:after {
content: "❌ NO";
color: white;
background-color: darkred;
display: block;
margin: 1em 0;
padding: 1em;
border: 1px solid #ccc;
}
@supports(height: 100vh) {
#supportVH::after {
content: "✅ YES";
background-color: lightgreen;
}
}
@supports(height: 100dvh) {
#supportDVH:after {
content: "✅ YES";
background-color: lightgreen;
}
}
@supports(height: 100madeup) {
#supportMadeUp:after {
content: "✅ YES";
background-color: lightgreen;
}
}
<div id="supportVH">Does your browser support <code>vh</code>?</div>
<div id="supportDVH">Does your browser support <code>dvh</code>?</div>
<div id="supportMadeUp">Does your browser support <code>madeup</code>?</div>
在JavaScript中,您可以以与CSS.supports()
:相同的方式使用它
const supportsDvh = CSS.supports('height: 100dvh');
这是Modernizr
使用的代码:
testStyles('#modernizr { width: 50vw; }', function(elem) {
var width = parseInt(window.innerWidth / 2, 10);
var compStyle = parseInt((window.getComputedStyle ?
getComputedStyle(elem, null) :
elem.currentStyle).width, 10);
Modernizr.addTest('cssvwunit', compStyle == width);
});
所以你可以做一些类似的事情。只需遵循以下步骤:
- 在
vw
中设置具有width
的元素 - 检查元素的计算
width
以匹配视口的宽度 - 如果两者相同,那么您的浏览器支持
vw
和vh
Snippet即将推出
$(function () {
elemWidth = parseInt(getComputedStyle(document.querySelector("#checkVw"), null).width, 10);
halfWidth = parseInt(window.innerWidth / 2, 10);
$("#checkVw").html("Your browser" + ((elemWidth == halfWidth) ? "" : "does not ") + " support VW and VH");
});
#checkVw { width: 50vw; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="checkVw"></div>
我检查了IE 7,结果搞砸了!;)
相关文章:
- 将视口底部滚动到元素底部
- 使用JavaScript根据窗口/视口的高度动态调整图像大小
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- 宽度为100%的CSS元素位于视口之外
- CSS3:当页面向下滚动到第一个视口时,是否可以在元素上触发转换
- 如何设置浏览器视口大小
- Javascript em根据窗口/视口尺寸调整大小,不影响文档样式的text/css
- 检测视口并重定向到不同的主页
- 如何在按住鼠标按钮且光标在视口外时检测鼠标离开
- iOS iPad平板电脑渲染视口不正确
- 移动设备上的视口问题
- 视口大小更改时自动刷新页面
- 在移动设备上获取视口大小
- 在 ReactJS 中获取视口/窗口高度
- 使jquery延迟加载插件在视口内工作
- Div 设置为视口高度,即使调整屏幕大小也是如此
- jQuery调整大小和视口检查点
- 将html元素渲染到浏览器视口
- 检测视口单元(使用modernizr或normal js)并提供适当的样式表
- 如何检测浏览器是否支持视口单元,如vh或dvh