如何在图像顶部显示菜单,标题在图像中间?

How to display menu at the top of image with title in the middle of image?

我们将在 <div> 元素和另外两个元素上有一个背景图像:菜单和标题。我们在对齐横幅图片顶部的菜单和中间的标题时遇到问题。

这里还有 jsfiddle

如何让菜单在顶部,标题在图片中间?

当前问题:

预期结果:

这是我们尝试过的方法,但无法使其在所有断点处对齐。 (min-width: 320pxmin-width: 1440px)

.wrapper {
  position: relative;
  display: block;
}

.banner__img {
      width: 100%;
    height: 100%;
    background-position: center;
    background-size: cover;
    position: absolute;
    z-index: 1;
    min-height: 300px;
}

.content__wrapper {
  position: relative;
  z-index: 2;
  padding: 16px;
}

.menu-bar__list:hover > ul {
  display: block;
}
.menu-bar__list {
  position: relative;
  margin-right: 16px;
}

.menu-bar__list__second {
  display: none;
  position: absolute;
}

.menu-bar {
  display: flex;
  flex-direction: row;
}
ul {
  list-style: none;
}

.content__title {
  text-align: center;
}
.logo > img {
  max-width: 50px;
}

.content__menu {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}
<div class="wrapper">
  <div class="banner__img" style="background-image: url('http://www.ikozmik.com/Content/Images/uploaded/its-free-featured.jpg')"></div>
  <div class="content__wrapper">
    <div class="content__menu">
      <div class="logo">
        <img src="https://image.shutterstock.com/image-illustration/logo-g-letter-on-white-260nw-497276758.jpg">
      </div>
      <nav>
        <ul class="menu-bar">
          <li class="menu-bar__list"><a href="#">Home</a></li>
          <li class="menu-bar__list">
            <a href="#">Products</a>
            <ul class="menu-bar__list__second">
              <li ><a href="#">Products Sub Menu 1</a></li>
              <li><a href="#">Products Sub Menu 2</a></li>
              <li><a href="#">Products Sub Menu 3</a></li>
              <li><a href="#">Products Sub Menu 4</a></li>
            </ul>
          </li>
          <li class="menu-bar__list">
            <a href="#">Services</a>
            <ul class="menu-bar__list__second">
              <li><a href="#">Services Sub Menu 1</a></li>
              <li><a href="#">Services Sub Menu 2</a></li>
              <li><a href="#">Services Sub Menu 3</a></li>
              <li><a href="#">Services Sub Menu 4</a></li>
            </ul>
          </li>
        </ul>
      </nav>
    </div>
    <div class="content__title">
      <h1>Some title here</h1>
    </div>
  </div>
</div>

对菜单使用 <nav>,并使用 align 属性使标题居中。

我稍微简化了你的代码(可能还不够),但你可以理解这个想法(请检查How to create a Minimal, Reproducible Example):

.banner {
  position: relative;
  overflow: hidden;
}

.background {
  object-fit: cover;
  width: 100%;
}

.logo {
  float: right;
}

.logo > img {
  max-width: 50px;
}

.content {
  position: absolute;
  top: 0; right: 0;
  bottom: 0; left: 0;
  padding: 24px;
  display: flex;
  flex-direction: column;
}

.content__menu {
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

.content__title {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-grow: 1;
}

.menu-bar__list:hover > ul {
  display: block;
}

.menu-bar__list {
  position: relative;
  margin-right: 16px;
}

.menu-bar {
  display: flex;
  flex-direction: row;
}

ul {
  list-style: none;
}
<div class="banner">
  
  <img class="background" src="http://www.ikozmik.com/Content/Images/uploaded/its-free-featured.jpg" alt="">
  
  <div class="content">
    
    <div class="content__menu">
      <div class="logo">
      <img src="https://image.shutterstock.com/image-illustration/logo-g-letter-on-white-260nw-497276758.jpg">
    </div>

    <nav class="menu">
      <ul class="menu-bar">
        <li class="menu-bar__list">
          <a href="#">Home</a>
        </li>

        <li class="menu-bar__list">
          <a href="#">Products</a>
        </li>

        <li class="menu-bar__list">
          <a href="#">Services</a>
        </li>
      </ul>
    </nav>
    </div>
    
    <div class="content__title">
      <h1>Some title here</h1>
    </div>
  </div>
  
</div>

EDIT: codepen link, 因为这里的预览没有显示(我猜是与绝对定位有关): https://codepen.io/herzinger/full/xxxOamN

您可以将文字放在图片的 div

<div class="banner__img" style="background-image: url('http://www.ikozmik.com/Content/Images/uploaded/its-free-featured.jpg')">
  <div class="content__title">
    <h1>Some title here</h1>
  </div>
</div>

然后将以下样式应用于 css 中的 .banner__img

  display: flex;
  align-items: center;
  justify-content: center;

即使您调整 window 的大小,文本现在仍居中。 Flexbox 允许您垂直和水平对齐元素。

能否请您检查以下代码,希望它能解决您的问题。

演示:https://jsfiddle.net/yudizsolutions/f81oymxs/14

.wrapper { 
    min-height: 300px; 
    display: flex; 
    display: -webkit-flex; 
    align-items:  center; 
    justify-content: center; 
    position: relative;
}
header {  
    padding: 15px; 
    position: absolute; 
    top: 0; 
    left: 0; 
    width: 100%;
    box-sizing: border-box;
}
nav { 
    display: flex; 
    display: -webkit-flex; 
    justify-content: space-between;
}
.menu-bar__list:hover > ul {
  display: block;
}
.menu-bar__list {
  position: relative;
  margin-right: 16px;
}

.menu-bar__list__second {
  display: none;
  position: absolute;
}

.menu-bar {
  display: flex;
  flex-direction: row;
}
ul {
  list-style: none;
}

.content__title {
  text-align: center;
}
.logo img {
  max-width: 50px;
}
<div class="wrapper" style="background: url('https://upload.wikimedia.org/wikipedia/commons/3/3c/Cityoflondon2019june.jpg') no-repeat top center / cover;">
    <header>
        <nav>
            <div class="logo">
                <a href="#"><img src="https://image.shutterstock.com/image-illustration/logo-g-letter-on-white-260nw-497276758.jpg"></a>
            </div>
            <ul class="menu-bar">
            <li class="menu-bar__list"><a href="#">Home</a></li>
            <li class="menu-bar__list">
                <a href="#">Products</a>
                <ul class="menu-bar__list__second">
                <li ><a href="#">Products Sub Menu 1</a></li>
                <li><a href="#">Products Sub Menu 2</a></li>
                <li><a href="#">Products Sub Menu 3</a></li>
                <li><a href="#">Products Sub Menu 4</a></li>
                </ul>
            </li>
            <li class="menu-bar__list">
                <a href="#">Services</a>
                <ul class="menu-bar__list__second">
                <li><a href="#">Services Sub Menu 1</a></li>
                <li><a href="#">Services Sub Menu 2</a></li>
                <li><a href="#">Services Sub Menu 3</a></li>
                <li><a href="#">Services Sub Menu 4</a></li>
                </ul>
            </li>
            </ul>
        </nav>
    </header>
    <div class="content__wrapper">
        <h1>Some title here</h1>
    </div>
  </div>