我在开发响应式网站时,经常需要改变页面元素的显示顺序,比如在我想改变某个网站导航在页面里的显示位置的时候。通常,一个网页大体的HTML源码差不多都如下所示。
[…]
[…]
为什么我们需要调整header
或者footer
的显示顺序?虽然讲不出什么大道理,但是我见过大量的案例,比如,为了照顾使用小屏手机的用户,而将导航栏从页面顶部调整到页面底部,这样,用户在看完长长的一篇文章后,不必再滑动很久回到顶部找导航。
order
属性正是完美实现这种体验的属性,所以我们首先给页面的body
标签设置一个display:flex
,把它变为一个弹性容器。它包含的元素会按垂直方向排列,我们同时定义body
标签的flex-direction
值为column
。
body {
display : flex;
flex-direction : column; }
接着,我们给每个弹性元素设置它们的order
值。
header {
order : 1; }
nav {
order : 2; }
section {
order : 3; }
footer {
order : 4; }
弹性元素按照源代码里的顺序排列显示,所以这是一个单纯演示order
效果的例子。
我们可以交换nav
元素和section
元素的展示位置,将导航栏显示在section
与footer
之间,这在小屏手机上会让布局看起来更友好。
nav {
order : 3; }
section {
order : 2; }
调整nav
元素的显示位置,就算用户使用小屏手机访问页面,也不必为了回到页面上方找到导航而频繁滚屏。
这个变化对小屏手机用户的确很有帮助。但是在大型显示器上,又有多少用户会在页面底部找导航呢。对于这样的用户,以及使用中等屏幕的用户,你需要在一个媒体查询中重置order
值。
@media (min-width: 48rem) {
nav {
order : 2; }
section {
order : 3; }
}
为中等和大屏用户重置order
值。