我正在开发平板电脑的网络应用程序(用于Android和ios),我遇到了一个问题 给我两天的麻烦了。
问题在于,当您处于纵向模式时,在Android上,例如您聚焦输入字段,以便软键盘弹出css媒体查询方向更改为横向。 我已经阅读了这个问题:CSS Media Query - Soft-keyboard breaks css orientation rules - alternative solution?并提出了这个问题:
var is_keyboard = false;
var is_landscape = false;
var initial_screen_size = window.innerHeight;
window.addEventListener("resize", function() {
is_keyboard = (window.innerHeight < initial_screen_size);
is_landscape = (screen.height < screen.width);
updateViews();
}, false);
function updateViews()
{
if(!is_landscape)
{
if(is_keyboard)
{
$("html").removeClass("landscape portrait");
$("html").addClass("portrait");
}
}
}
然而,由于某些原因,这不起作用。 无论如何都要将方向更改为纵向模式,以便css媒体查询思考 我们是在纵向模式?我不喜欢使用max-width等,因为我需要支持多种屏幕尺寸。
提前致谢。
答案 0 :(得分:21)
经过一番搜索,我想出了这个:
@media screen and (min-aspect-ratio: 13/9){ } // landscape
@media screen and (max-aspect-ratio: 13/9){ } // portrait
而不是
@media (orientation : landscape){ }
@media (orientation : portrait){ }
所以,如果你和我在同一条船上,我建议你去 有了这个,所以你不必担心头痛。
答案 1 :(得分:1)
有这个好article来解决这个问题。
但有时13/9还不够。 @media screen和(min-aspect-ratio:14/9){} // landscape
如果你把它增加到16/9,那么iphone5就不会认识到这种情况。
答案 2 :(得分:0)
与最小值和最大值“ -aspect-ratio”分开的是最小值和最大值“ -device-aspect-ratio”,它们是设备而不是屏幕的参数。
@media only screen and (max-device-aspect-ratio:1/1){
section{background:purple;}
:root{--devmul:1;}
}
@media only screen and (min-device-aspect-ratio:1/1){
section{background:orange;}
:root{--devmul:0.5;}
}
Mozilla等人说过该参数已被弃用,但他们没有说明该参数已被弃用的内容。我在假设不赞成使用该参数的情况下进行操作,该参数并非在所有设备(例如台式机浏览器)上均受支持,但通常在具有方向的设备上可用。
以上代码段是在假设用户位于桌面上的情况下运行的,然后根据“设备长宽比”和一般纵横比对其进行校正。 Havent有机会在基于肖像的台式设备上验证了我的理论,但这似乎适用于我拥有的所有移动设备。