Автор: Человек, мечтающий стать большой коровой
написать впереди
Прошло уже почти три года с момента выпуска iphonex в сентябре 2017 года (поэтому содержание челки головы модели iphonex (корпус датчика) и нижней черной полосы (индикатор Home) не будет слишком подробно обсуждаться в этой статье), я полагаю есть еще Некоторые студенты беспокоятся о том, как идеально подогнать модели серии iphonex.Автор сделал резюме на основе проекта мобильного терминала h5 компании и некоторых официальных документов, надеясь помочь всем.
Предварительные знания
Перед тем, как начать игру, нам нужно понять три важных аспекта: безопасная область, вьюпорт-фит, env() и константа().
безопасный район
Каждый должен понимать, что такое безопасная зона, верно? Как следует из названия, как показано на рисунке ниже, безопасная область относится к той части области, на которую не влияют челка на голове и маленькие черные полосы внизу. Официальный веб-сайт Apple Руководство по взаимодействию человека с компьютером
viewport-fit
viewport-fit — новая функция IOS 11. Значения перечисления viewport-fit вводятся следующим образом:
- содержат: видимое окно полностью содержит веб-контент (левое изображение)
- обложка: содержимое веб-страницы полностью закрывает видимое окно (справа)
- auto: значение по умолчанию соответствует производительности контейнера.
env() и константа()
Все виды iphone x имеют неправильную форму, нам нужно контролировать содержимое нашей страницы в безопасной области, упомянутой ранее, так как же очистить верхнюю и нижнюю части страницы? Я должен сказать, что Apple очень предусмотрительна.Они предоставили разработчикам информацию о местоположении безопасной зоны через константы CSS.Эти константы CSS необходимо обернуть двумя функциями env() и Constant(), чтобы получить их. В частности, см. этоissue
Постоянное значение информации о местоположении безопасной зоны
- safe-area-inset-top: размер вставки безопасной области (в пикселях CSS) от верхней части области просмотра.
- safe-area-inset-bottom: размер вставки безопасной области (в пикселях CSS) от нижней части окна просмотра.
- safe-area-inset-left: размер вставки безопасной области (в пикселях CSS) с левой стороны окна просмотра.
- safe-area-inset-right: область безопасности, начинающаяся с правильного размера вставки области просмотра (CSS-пиксели).
Введение в env() и константу()
env() и Constant() — это новые возможности IOS 11. Это две функции css. Давайте посмотрим на совместимость этих двух функций:
Мы видим, что константная функция поддерживается в IOS 11.0-11.2.После 11.3 константная функция заброшена и заменена функцией env.
Простой пример
Очистите нижнее безопасное расстояние
padding-bottom: constant(safe-area-inset-bottom); // 兼容 11.0 < iOS < 11.2
padding-bottom: env(safe-area-inset-bottom); // 兼容 iOS >= 11.2
будь осторожен
- Вам нужно установить viewport-fit=cover, доступна только информация о местоположении безопасной области;
- При написании должны быть написаны как константные, так и env-функции, чтобы добиться совместимости со всеми системами IOS 11;
резюме
Следует отметить, что предварительным условием для использования информации о местоположении безопасной области является установка viewport-fit=cover, и тогда вышеупомянутая информация относится к новому содержимому IOS 11. Заводская система iphonex больше или равно 11.0, так что вы можете использовать его с уверенностью и смелостью Совместимость с iphonex.
правильная осанка
После прочтения вышеизложенного у всех какие-то странные знания, и тогда мы официально вступим в ссылку адаптации к моделям серии iphonex. Конечно, прочитав следующее, мы будем использовать самую совершенную и лаконичную позу для адаптации, не моргайте, идите~
Предварительные условия
установить viewport-fit=cover
<meta name="viewport" content="width=device-width,viewport-fit=cover">
«Контейнеры» для моделей серии iphonex, которые необходимо адаптировать
Наши мобильные страницы h5 обычно открываются в четырех «контейнерах»: WeChat, веб-страницы, приложения и небольшие программы. Поэтому нам нужно сделать некоторые адаптации на нашей странице для этих четырех «контейнеров», чтобы идеально показать танцующую позу наложницы в моделях серии iphonex.
Адаптация в WeChat, мини-программы и веб-страницы
голова
Потому что в этих "контейнерах" головы были приспособлены под нас "контейнерами" (разумеется царь естественно), так что нам нужно обращать внимание только на дно.
Нижний
Поза: оставьте безопасное расстояние внизу общей страницы (разные элементы располагаются по-разному, в зависимости от ситуации, чтобы решить, какое место более разумно (страница, основная страница)):
body {
box-sizing: border-box;
padding-bottom: constant(safe-area-inset-bottom);
padding-bottom: env(safe-area-inset-bottom);
}
Адаптация в приложении
голова
Совместимость с головкой Нам нужно начать с компонента навигационной головки нашего собственного проекта.Идея состоит в том, чтобы добавить максимальное безопасное расстояние к навигационной головке, чтобы предотвратить попадание навигационной головки на челку.
- Добавьте определенное имя класса при оценке в ios и в среде приложения, например: ipx-head-nav
- Добавьте значение padding-top в ipx-head-nav, чтобы освободить верхнее безопасное расстояние.
.ipx-head-nav {
padding-top: 20px; // iphonex系列机型之前顶部安全距离均为20px
padding-top: constant(safe-area-inset-top);
padding-top: env(safe-area-inset-top);
}
Верх отступа составляет 20 пикселей, чтобы быть совместимым с моделями до систем iphonex и IOS 11, а функции константы и env совместимы с моделями после систем iphonex и IOS 11.
Нижний
И в микро-буквы, апплет, в нижней части веб-страницы подходят позы последовательной, единой позиции.
Обработка некоторых особых сценариев
Кнопка нижнего всасывания (внизу === 0)
Рекомендуется, чтобы нижние кнопки всасывания были изменены на фиксированное положение, а затем мы использовали эту позу для адаптации:
.btn {
position: fixed;
bottom: 0; // 当constant和env函数都不支持的时候,这个会生效
bottom: constant(safe-area-inset-bottom);
bottom: env(safe-area-inset-bottom);
&:after {
content: ' ';
position: fixed;
left: 0;
right: 0;
bottom: 0;
background-color: #ffffff;
height: constant(safe-area-inset-bottom);
height: env(safe-area-inset-bottom);
}
}
Потому что на iphonex нижняя часть кнопки находится на безопасном расстоянии от нижней части, и внизу будет пустое пространство, поэтому это пространство необходимо заполнить.
Идеи:
- Нижнее значение кнопки сначала адаптировано для iphonex;
- Добавьте новый элемент в нейтральное положение, а высота — это высота безопасного расстояния.
Элементы с фиксированным положением, которые не полностью всасываются снизу (нижний !== 0), такие как кнопка «наверх»
Здесь мы предполагаем, что есть требование, кнопка «наверх», которая должна быть на 30 пикселей снизу и должна быть адаптирована к iphonex, тогда мы можем использовать следующую позу:
.back-top-btn {
bottom: 30px;
bottom: calc(30px + constant(safe-area-inset-bottom));
bottom: calc(30px + env(safe-area-inset-bottom));
}
В системах, которые не поддерживают функции констант и env, значение, рассчитанное по дну, недопустимо, и вступит в силу значение дно: 30 пикселей.
Небольшое благосостояние
Я считаю, что теперь вы освоили правильную позу для моделей серии iphonex.Если вы используете scss для написания стилей в своем проекте, вот вам 3 потрясающих чита позы.Такая простая поза должна быть видна с первого взгляда.Если вы можете понять как его использовать, если вы не понимаете, вы можете оставить сообщение в области комментариев и спросить:
// ipx系列底部padding值
@mixin iphonex-padding-bottom($paddingBottom: 0px) {
padding-bottom: $paddingBottom;
padding-bottom: calc(#{$paddingBottom} + constant(safe-area-inset-bottom));
padding-bottom: calc(#{$paddingBottom} + env(safe-area-inset-bottom));
}
// ipx系列fixed定位底部bottom值
@mixin iphonex-fixed-bottom($bottom:0px) {
bottom: $bottom;
bottom: calc(#{$bottom} + constant(safe-area-inset-bottom));
bottom: calc(#{$bottom} + env(safe-area-inset-bottom));
}
// ipx系列fixed定位bottom为0的处理函数
@mixin iphonex-fixed-bottom-zero($backgroundColor: #ffffff) {
@include iphonex-fixed-bottom();
&:after {
content: ' ';
position: fixed;
left: 0;
right: 0;
bottom: 0;
background-color: $backgroundColor;
height: constant(safe-area-inset-bottom);
height: env(safe-area-inset-bottom);
}
}
напиши в конце
Приведенные выше позы являются более общими решениями, которые суммировал автор, но решения не уникальны Я просто надеюсь предоставить вам решение, которое сделает ваше приложение более совершенным. Наконец, конечно, я хотел бы поблагодарить всех за чтение, спасибо~