欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-18 10:13:00
...

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

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

1.定义容器

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

<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;
}

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

Internet Explorer警告

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

body {
  display: flex;
  flex-direction: column;
}

另一个简单的解决方法是用height: 100vh代替min-height: 100vh height: 100vh

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

到目前为止的进展

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

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

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)上,它看起来像这样:

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

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

  • 元素应垂直对齐。
  • 在小屏幕上,菜单应该是最后一个元素,而在大屏幕上,按钮应该是最后一个元素。
  • 在小屏幕上,标题元素分为两行。 导航本身涵盖了第二行。 在较大的屏幕上,所有元素均均匀地分布在一行中。

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

.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)上导航之后,该按钮才出现。

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;
  }
}

4.页脚

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

<footer class="page-footer">
  <small>
    <!-- content here -->
  </small>
  <ul>
    <!-- list items here -->
  </ul>
</footer>

同样,此处的布局应根据视口大小进行更改。

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

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

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

  • 在小屏幕上,文本应该是最后一个元素,而在大屏幕上,社交个人资料列表应该是最后一个元素。
  • 在小屏幕上,页脚元素分为两行。 另一方面,在较大的屏幕上,所有元素都垂直居中并均匀地分布在单行中。

页脚的主要样式:

.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创建全屏响应页面的过程。 该过程非常简单,为我们提供了练习一些不同的flexbox技能的机会。

翻译自: https://webdesign.tutsplus.com/tutorials/how-to-build-a-full-screen-responsive-page-with-flexbox--cms-32086