#container 包含两个 div:#left 和 #right。它们的背景颜色都是由窗口宽度决定的:当窗口宽度大于 50ems 时,它们的背景为红色;当窗口宽度小于 50ems 时,绿色。
但是,这是通过#left 和#right 的不同机制实现的。#left 的背景颜色由窗口调整大小事件处理程序设置。#right 的背景颜色由媒体查询设置。
尽管这是通过不同的机制进行的,但两者的断点是相同的:50ems,理论上,当且仅当#right 为绿色时,#left 为绿色(因此:当且仅当#right 为绿色时,#left 为红色红色的)。
这适用于任何放大倍率的 Chrome。这适用于任何放大倍率的 Firefox。但是,这只适用于 Safari 100% 的放大倍率。当您偏离 100% 时,在 50em 断点附近会出现一个 div 为红色而另一个为绿色的情况。换句话说,媒体查询和窗口调整大小处理程序正在检测不同的 em 宽度。
我正在尝试使我的网站在任何放大倍率下都与任何浏览器兼容,但是这个 Safari 的东西正在杀死我。对于那些在 Safari 中以 90% 或 110% 的放大倍率查看网站的人,我如何才能获得“#left green if 且仅 #right green”的结果?
<html>
<head>
<script type="text/javascript" src="jquery-1.11.1.min.js"></script>
<style type="text/css">
#container{
height: 100px;
width: 100px;
}
.div{
float: left;
width: 50%;
background: green;
}
@media (min-width: 50em){
#right{ background: red;}
}
</style>
</head>
<body>
<div id="container">
<div id="left" class="div"> Left </div>
<div id="right" class="div"> Right </div>
</div>
<script type="text/javascript">
$(window).on("resize", function() {
var width = $(window).width() / parseFloat($("body").css("font-size"));
if( width < 50) document.getElementById("left").style.background = "green";
else document.getElementById("left").style.background = "red";
}).resize();
</script>
</body>
</html>