Arrière-plan
Depuis l'iPhone d'Apple De nombreuses applications sont directement compatibles avec le style de la vue Web à l'intérieur. Lorsque l'écran est en mode portrait, le haut est souvent une barre de navigation, qui ne couvre pas le contenu de la vue Web. La hauteur inférieure est définie au niveau de l'application de sorte que le bas de la vue Web ne se trouve pas dans la zone de barre horizontale noire, afin qu'il n'entrave pas l'affichage du contenu dans la vue Web.
Cependant, chaque application est très différente et la vue Web à l'intérieur sera affichée différemment. S'il n'y a pas de hauteur inférieure dans l'application, le contenu inférieur de la vue Web sera bloqué par une petite barre noire. En termes de compatibilité des styles de page Web, il doit être compatible avec la « frange » unique et le style de petite barre horizontale noire au bas de l'iPhoneX sans affecter le style des modèles précédents.
Zone sécurisée
Comprenez d'abord la zone de sécurité de l'iphoneX. La partie bleue sur l’image ci-dessous est la zone de sécurité. Les marges des deux côtés, l’encoche en haut et la petite zone de barre noire en bas sont toutes des zones dangereuses et sont des zones où le contenu peut être bloqué. Ensuite, nous devons contrôler notre contenu dans la zone de sécurité.
Solution compatible
Heureusement, lorsque l'iPhoneX est sorti, le système officiel iOS11 a également fourni WebKit Api pour être compatible avec cette différence de style.
Première étape : définir l'attribut d'ajustement de la fenêtre
contenir : la fenêtre visuelle contient entièrement le contenu de la page Web et le contenu de la page est affiché dans la zone de sécurité
couverture : le contenu de la page Web couvre complètement la fenêtre visuelle et le contenu de la page remplit l'écran
auto : valeur par défaut, cohérente avec contain
Pour résoudre ce problème, WebKit dans iOS11 inclut une nouvelle fonction CSS env() et quatre variables d'environnement prédéfinies safe-area-inset-left, safe-area-inset-right, safe-area-inset-top et safe-area-inset-bottom. Ces quatre variables d'environnement représentent la distance de la zone de sécurité.
- safe-area-inset-left : La distance entre la zone de sécurité et la limite gauche
- safe-area-inset-right : La distance entre la zone de sécurité et la limite droite
- safe-area-inset-top : La distance entre la zone de sécurité et la limite supérieure
- safe-area-inset-bottom : La distance entre la zone de sécurité et la limite inférieure
ios11.2 utilisait la fonction constants(), mais plus tard, elle a été remplacée par la fonction env() dans la version ios11.2. Afin d'être compatible avec les deux, vous pouvez écrire les deux.
Étape 2 : Définir la distance de la zone de sécurité
.post {
remplissage : 12 px ;
padding-left : constantes (safe-area-inset-left) ; //ios<11.2
padding-left : env(safe-area-inset-left); //ios>=11.2
}
De cette façon, lorsqu'il n'est pas dans la zone de sécurité, env(safe-area-inset-left) n'est pas égal à 0, ce qui entraînera la définition d'une distance de sécurité sur padding-left afin que le contenu ne soit pas bloqué.
@supports , le CSS à l'intérieur ne sera exécuté que lorsque env(safe-area-inset-bottom) est pris en charge par le navigateur.
.barre inférieure{
largeur : 100 % ;
poste : fixe ;
bas : 0 ;
fond : bleu ;
}
@supports (padding-bottom : env(safe-area-inset-bottom)) {
.barre inférieure {
padding-bottom : constant (safe-area-inset-bottom) ;
padding-bottom: env(safe-area-inset-bottom);
}
}
Remarque : La vue Web dans WeChat est dans l'état par défaut viewport-fit=cover. Il vous suffit de fixer une distance de sécurité. La solution ci-dessus est également applicable à l'applet WeChat.