问题描述
iPhoneX由于新增了刘海以及取消了按键采用了小黑条的形**式**,导致会出现以下的问题:样式边缘出现了空白(没有覆盖整个可视区域)
我们可以通过meta设置解决这个问题
<meta name='viewport' content='initial-scale=1, viewport-fit=cover'>
于是出现了新的问题,部分内容被刘海和黑条遮盖了,接下来就有两种解决方案:
方案一:通过媒体查询匹配到iPhone X然后进行样式修改
//iphoneX、iphoneXs
@media only screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) {
}
即: 设备屏幕可见宽度为375px, 可见高度为812px及设备像素比为3
//iphone Xs Max
@media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio:3) {
}
//iphone XR
@media only screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio:2) {
}
//横屏
@media all and (orientation : landscape) {
}
//竖屏
@media all and (orientation : portrait){
}
其他参考链接:运用CSS3媒体查询判断iPhoneX、iPhoneXR、iPhoneXS MAX及横竖屏
方案二:根据苹果特定变量来筛选、匹配
env()
最初由iOS浏览器提供,用于允许开发人员将其内容放置在视口的安全区域中,该规范中定义的safe-area-inset-*
值可用于确保内容即使在非矩形的视区中也可以完全显示。
注意:viewport-fit=cover和env(safe-area-inset-bottom)需要一起使用
<meta name='viewport' content='initial-scale=1, viewport-fit=cover'>
// @supports意为支持
// bottom: constant(safe-area-inset-bottom)) 或 bottom: env(safe-area-inset-bottom)
// 语法的话,以下css可用
@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) {
.iphone-x::after { // 给需要适配黑条的内容加上 iphone-x 的 class
display: block;
content: "";
padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */
padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */
}
}
以上适用于手机端底部设置tab栏**,给tab加上特定的padding-bottom
**
官方给出了另一种**css方案来解决整体的遮盖问题**:
以下只解决了横版问题,竖屏时文章的padding仍然有问题(顶头了):
.post {
padding: 12px;
padding-left: env(safe-area-inset-left);
padding-right: env(safe-area-inset-right);
}
max()好用,但是**太新了**,需要注意自己浏览器的支持情况!
@supports(padding: max(0px)) { // @supports意为支持padding max语法的话,以下css可用
.post {
padding-left: max(12px, env(safe-area-inset-left));
padding-right: max(12px, env(safe-area-inset-right));
}
}
其他参考链接:
英文文档:https://webkit.org/blog/7929/designing-websites-for-iphone-x/
中文文档:https://www.javascriptcn.com/read-78787.html