• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

如何使用 Flexbox 构建全屏响应页面

在本教程中,我们将学习如何使用 flexbox 构建全屏响应式页面。我们的页面将包括一个全屏背景图像、垂直居中的内容和一个粘性页脚。

下面是我们将要构建的页面的快速浏览(全屏版本可能会给您一个更好的主意):

See the Pen  How to Build a Full-Screen Responsive Page With Flexbox by Envato Tuts+ (@tutsplus)  on CodePen.

1.定义容器

我们首先定义一个容器,在其中放置三个元素。一个 header、一个main和一个footer。这是页面结构:

<div class="wrapper">

  <header class="page-header">

    <!-- content here -->

  </header>

  <main class="page-main">

    <!-- content here -->

  </main>

  <footer class="page-footer">

    <!-- content here -->

  </footer>

</div>

我们希望页面至少是全屏的,但是当页面高度大于浏览器窗口高度时,我们希望出现滚动条。

感谢 flexbox,我们能够非常轻松地创建此功能。这是所需的css

.wrapper {

  display: flex;

  flex-direction: column;

  min-height: 100vh;

}

 

.wrapper > * {

  padding: 20px;

}

 

.page-main {

  flex-grow: 1;

}

通过设置 flex-grow: 1元素main,它会扩展以覆盖 flex 容器内的可用空间。header和footer元素具有基于其内容的默认宽度。

Internet Explorer 警告

当 flex 容器具有最小高度时,某些版本的 Internet Explorer无法正常工作。在我们的示例中(如果您对支持 IE 感兴趣),解决此问题的一种方法是添加以下规则:

body {  

display: flex; 

 flex-direction

column;}

另一个直接的解决方法是将 替换 min-height: 100vh为height: 100vh. 

无论如何,如果您的项目需要支持 IE,请选择最适合您的内容和布局的方法。

迄今为止的进展

这是我们构建的起始笔(为了清晰起见,包括一些颜色):

See the Pen  How to Build a Full-Screen Responsive Page With Flexbox: Step 1 by Envato Tuts+ (@tutsplus)  on CodePen.

现在让我们仔细看看容器的后代。

2.标题

我们的页眉包含三个元素。徽标、导航和号召性用语按钮。这是标题标记:

<header class="page-header">

  <nav>

    <h2 class="logo">

      LOGO

    </h2>

    <ul>

      <!-- list items here -->

    </ul>

    <button class="cta-contact">

      get in touch

    </button>

  </nav>

</header>

它的布局根据视口大小而变化。在窄屏幕(<550px)上,它看起来像这样:

如何使用 Flexbox 构建全屏响应页面  第1张

在更宽的屏幕上,布局更改如下:

如何使用 Flexbox 构建全屏响应页面  第2张

为了实现这种轻微的布局转变,我们的样式必须满足以下要求:

  • 元素应垂直对齐。

  • 在小屏幕上,菜单应该是最后一个元素,而在大屏幕上,按钮应该是最后一个元素。

  • 在小屏幕上,标题元素被包裹成两行。导航本身涵盖了第二行。在较大的屏幕上,所有元素均匀分布在一行中。 

遵循移动优先的方法,让我们看一下标题的最关键规则:

.page-header nav {

  display: flex;

  flex-wrap: wrap;

  justify-content: space-between;

  align-items: center;

}

 

.page-header ul {

  display: flex;

  order: 1;

  width: 100%;

  margin-top: 15px;

}

 

@media screen and (min-width: 550px) {

  .page-header ul {

    width: auto;

    margin-top: 0;

  }

 

  .page-header .cta-contact {

    order: 1;

  }

}

提示: flex 元素 的默认order值为0. 具有相同order值的元素按照它们在源文档中出现的顺序排列。出于这个原因,按钮出现在宽屏幕(≥ 550px)上的导航之后。

三、主要内容

我们页面的主要内容包括一些垂直居中并位于背景图像顶部的文本。

如何使用 Flexbox 构建全屏响应页面  第3张

这是本节的结构:

<main class="page-main">

  <div>

    <!-- content here -->

  </div>

</main>

以及最重要的样式,包括 CSS 变量:

/* variables */

:root {

  --main-white-color: white;

  --main-purple-color: #9e89b8;

}

 

.page-main {

  display: flex;

  flex-direction: column;

  justify-content: center;

  min-height: 350px;

  background: var(--main-purple-color) url(IMG_SRC) no-repeat center / cover;

  background-blend-mode: luminosity;

  color: var(--main-white-color);

}

 

.page-main div {

  max-width: 500px;

}

 

@media screen and (min-width: 768px) {

  .page-main {

    padding-left: 90px;

  }

}

这里没有发生非常复杂的事情。再次感谢 flexbox,我们能够将main内容垂直居中。

4.页脚

页脚包含两个元素;一个拥有版权信息,另一个拥有社交媒体渠道的链接。这是标记:

<footer class="page-footer">

  <small>

    <!-- content here -->

  </small>

  <ul>

    <!-- list items here -->

  </ul>

</footer>

同样,此处的布局应根据视口大小而变化。 

在窄屏幕(<550px)上,它看起来像这样:

如何使用 Flexbox 构建全屏响应页面  第4张

在更宽的屏幕上,布局如下:

如何使用 Flexbox 构建全屏响应页面  第5张

考虑到上面的屏幕截图,应该会发生以下情况:

  • 在小屏幕上,文本应该是最后一个元素,而在大屏幕上,社交资料列表应该是最后一个。

  • 在小屏幕上,页脚元素被包裹成两行。另一方面,在较大的屏幕上,所有元素都垂直居中并均匀分布在一行中。 

我们页脚的主要样式:

.page-footer {

  display: flex;

  flex-direction: column-reverse;

}

 

.page-footer ul {

  display: flex;

  font-size: 1.5rem;

  margin-bottom: 5px;

}

 

@media screen and (min-width: 550px) {

  .page-footer {

    flex-direction: row;

    justify-content: space-between;

    align-items: center;

  }

 

  .page-footer ul {

    margin-bottom: 0;

  }

}

图标

最后但同样重要的是,对于本节中使用的图标,我已将 ionicons 图标包合并到我们的笔中。


如何使用 Flexbox 构建全屏响应页面  第6张


结论

在本教程中,我们介绍了使用 flexbox 创建全屏响应式页面的过程。这个过程很简单,让我们有机会练习一些不同的 flexbox 技能。



文章目录
  • 1.定义容器
    • Internet Explorer 警告
    • 迄今为止的进展
  • 2.标题
  • 三、主要内容
  • 4.页脚
    • 图标
  • 结论