屏幕配置

自适应设计从很多方面来说都是对手机的反应。在智能手机出现之前,很少有人认真考虑网站在手持设备上的外观和风格。随着具有内置网络浏览器的手机迅速崛起,这种情况发生了变化。

自适应设计鼓励一种质疑假设的思维方式。以前,人们常常会认为用户只能在桌面设备上浏览网站,而现在,网站已成为针对手机和平板电脑设计同一网站的标准做法。事实上,移动设备的使用率现在已经超过了桌面设备

这种反应迅速的心态将在未来助您一臂之力。用户访问您的网站时,他们使用的设备和屏幕完全有可能,我们现在完全无法想象。这种思维模式并不局限于屏幕。时至今日,人们仍在使用没有屏幕的设备访问您的内容。如果您使用的是坚实的语义 HTML 基础,语音助理就可以使用您的网站。

屏幕世界也在不断实验。如今市场上已有很多配备可折叠屏幕的设备。这会给您的设计带来一些挑战。

由不同配置的可折叠手机组成的剪辑。

双屏幕

可折叠设备的用户可以选择是希望网络浏览器仅占据其中一个屏幕,还是跨越两个屏幕。如果浏览器跨越两个屏幕,那么展示中的网站会被两个屏幕之间的合页分开。看起来不妙。

跨越两种屏幕的网站。文本的水平流动被屏幕之间的合页中断。

视口细分

有一个实验性媒体功能,旨在检测您的网站是否正在双屏设备上显示。该媒体地图项的建议名称为 viewport-segments。有两种变体:horizontal-viewport-segmentsvertical-viewport-segments

如果 horizontal-viewport-segments 媒体功能报告的值为 2,而 vertical-viewport-segments 报告的值为 1,则表示设备上的合页从上到下延伸,会将您的内容分成两个并排的面板。

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1) {
  // Styles for side-by-side screens.
}

如果 vertical-viewport-segments 媒体功能报告的值为 2,而 horizontal-viewport-segments 报告的值为 1,则合页会左右移动,将内容分成两个面板,一个在另一个上。

@media (vertical-viewport-segments: 2) and (horizontal-viewport-segments: 1) {
  // Styles for stacked screens.
}
<ph type="x-smartling-placeholder">
</ph> 演示视口区段的示意图。
图表来自 Microsoft Edge 说明

如果 vertical-viewport-segmentshorizontal-viewport-segments 报告的值均为 1,则表示即使设备有多个屏幕,网站也只会显示在一个屏幕上。这相当于不使用任何媒体查询。

环境变量

viewport-segments 媒体功能本身无法帮助您围绕这个烦人的合页进行设计。您需要一种方法来知道合页的尺寸。这正是环境变量可以发挥作用的地方。

借助 CSS 中的环境变量,您可以将尴尬的设备入侵考虑在内。例如,您可以围绕“凹口”在 iPhone X 上使用环境值 safe-area-inset-topsafe-area-inset-rightsafe-area-inset-bottomsafe-area-inset-left。这些关键字封装在 env() 函数中。

body {
  padding-top: env(safe-area-inset-top);
  padding-right: env(safe-area-inset-right);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
}

环境变量的工作方式与自定义属性类似。这意味着,如果环境变量不存在,您可以传入后备选项。

body {
  padding-top: env(safe-area-inset-top, 1em);
  padding-right: env(safe-area-inset-right, 1em);
  padding-bottom: env(safe-area-inset-bottom, 1em);
  padding-left: env(safe-area-inset-left, 1em);
}

如需让这些环境变量在 iPhone X 上正常运行,请更新用于指定 viewport 信息的 meta 元素:

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">

现在,您的页面布局将占据整个视口,并使用设备提供的边衬值安全地填充文档。

对于可折叠屏幕,建议使用六个新的环境变量:viewport-segment-widthviewport-segment-heightviewport-segment-topviewport-segment-leftviewport-segment-bottomviewport-segment-right

。 <ph type="x-smartling-placeholder">
</ph> 显示双屏幕的环境变量的示意图。
图表来自 Microsoft Edge 说明

下面是一个包含两列(一列宽于另一列)的布局示例。

@media (min-width: 45em) {
  main {
    display: flex;
    flex-direction: row;
  }
  main article {
    flex: 2;
  }
  main aside {
    flex: 1;
  }
}

布局分为两个屏幕,合页中断了较宽的列。

对于采用垂直合页的双屏幕,请将第一列设置为第一个屏幕的宽度,将第二列设置为第二个屏幕的宽度。

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1) {
  main article {
    flex: 1 1 env(viewport-segment-width 0 0);
  }
  main aside {
    flex: 1;
  }
}

布局会在两个屏幕上均匀拆分,不会造成明显的中断。

将双屏幕视为一个机会。或许,一个屏幕可用于显示可滚动文本内容,而另一个屏幕可用于显示固定元素,例如图片或地图。

<ph type="x-smartling-placeholder">
</ph> 示意图:将位置信息服务分割到两个屏幕上,其中地图显示在一个屏幕上,路线显示在另一个屏幕上。 <ph type="x-smartling-placeholder">
</ph> 图表来自 Microsoft Edge 说明文档

未来展望

可折叠设备会成为下一个主流吗?谁知道呢。没有人能预料到移动设备会变得如此流行,因此对于未来的设备类型保持开放心态是值得的。

最重要的是,您需要确保您的网站能够针对未来可能带来的任何变化做出响应。这正是响应式设计带给您的:它不仅仅是一套实用技巧,更是让您构建未来网络时有利的思维方式。

检查您的理解情况

测试您对屏幕配置知识的掌握情况

哪个媒体查询在横屏分屏模式下定位到可折叠设备?

@media (horizontal-viewport-segments: 2) and (vertical-viewport-segments: 1)
屏幕配置为 2 列 1 行,横向分屏。
@media (vertical-viewport-segments: 2) and (horizontal-viewport-segments: 1)
2 行 1 列,纵向拆分。
@media (vertical-viewport-segments: 2) and (horizontal-viewport-segments: 2)
2 行 2 列,按 4 种方式拆分。
@media (vertical-viewport-segments: 1) and (horizontal-viewport-segments: 1)
单个单元格,无拆分。

什么是环境变量?例如:env(safe-area-inset-top)

与用户所在天气有关的变量。
环境错误,这些 CSS 变量与用户所在的物理环境无关。
自定义构建时变量。
虽然构建时(编译时)变量很有用,但它们与指定的环境变量不同。
包含浏览器专用属性的变量,可用于根据相应浏览器和设备调整网站。
通过它,浏览器和作者可以就独特的视口上下文或影响属性的浏览器进行协作。
已变为绿色且对环境更安全的变量。
CSS 及其变量对世界污染的影响不大。