Как выровнять предмет по середине навигационной панели? - PullRequest
1 голос
/ 27 мая 2019

В навигационной панели 6 пунктов:

  1. первые 3 элемента должны быть выровнены как flex-start - в начале навигационной панели.

  2. Тогда логотип должен быть в центре навигационной панели

  3. И в конце -> flex-end должны появиться 2 иконки

Вот скриншот текущего состояния navbar:

enter image description here

Проблема : позиция логотипа - amиспользуя margin-left: '27%'.И на разных размерах экрана логотип плохо выровнен.

Я бы хотел выровнять кое-что, как этот логотип через flex, есть ли способ сделать это с помощью flex?

Проверьтекод:

HTML / jsx:

 <div className="container">
  <header className="header">
    <nav className="user-nav">
      <div className="user-nav-item">
        <Link href="/">
          <a className="user-nav-item-link">Overview</a>
        </Link>
      </div>
      <div className="user-nav-item">
        <Link href="/search">
          <a className="user-nav-item-link">Search</a>
        </Link>
      </div>
      <div className="user-nav-item">
        <Link href="/feed">
          <a className="user-nav-item-link">Feed</a>
        </Link>
      </div>
      <h3 className="logo">Logo</h3>
    </nav>

    <div className="user-nav-icon">
      <div className="user-nav-icon-box">
        <img src={bellIcon} alt="notify icon" />
      </div>
      <div className="user-nav-icon-box">
        <img src={settingsIcon} alt="settings icon" />
      </div>
    </div>
  </header>
</div>

CSS:

.container {
  max-width: 100vw;
  display: flex;
  flex-direction: column;


.header {
  display: flex;
  align-items: center;
  height: 5rem;
  color: #fff;
  background-color: black;

  .user-nav {
    width: 100%;
    display: flex;
    align-items: center;

    &-item {
      width: 5.5rem;
      padding: 1.5rem;
      cursor: pointer;
    }

    &-item-link {
      text-decoration: none;
      color: white;
    }

    .logo {
      margin-left: 27%;
    }

    &-icon {
      display: flex;
      align-items: center;
      background-color: white;
      color: red;
      margin-right: 3rem;

      & > * {
        padding: 0 0.8rem;
        cursor: pointer;
      }

      &-icon-notification {
        color: red;
      }
    }
  }
}

}

Ответы [ 3 ]

2 голосов
/ 27 мая 2019

Вы можете просто вывести логотип из навигации, чтобы все три, логотип, навигация и значки стали гибкими элементами и выравнивали содержимое заголовка с помощью space-between. Ниже приведен упрощенный код.

P.S. - Делитесь отрендеренным кодом как своей реализацией в будущем, а не JSX / SASS

.container {
  max-width: 100vw;
  display: flex;
  flex-direction: column;
}
.container .header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 5rem;
  color: #fff;
  background-color: black;
}
.container .header .user-nav {
  display: flex;
  align-items: center;
}
.container .header .user-nav-item {
  padding: 1.5rem;
  cursor: pointer;
}
.container .header .user-nav-item-link {
  text-decoration: none;
  color: white;
}
.container .header .user-nav-icon {
  display: flex;
  align-items: center;
  background-color: white;
  color: red;
  margin-right: 3rem;
}
.container .header .user-nav-icon > * {
  padding: 0 0.8rem;
  cursor: pointer;
}
.container .header .user-nav-icon-icon-notification {
  color: red;
}
<div class="container">
  <header class="header">
    <nav class="user-nav">
      <div class="user-nav-item">
        <a class="user-nav-item-link">Overview</a>
      </div>
      <div class="user-nav-item">
        <a class="user-nav-item-link">Search</a>
      </div>
      <div class="user-nav-item">
        <a class="user-nav-item-link">Feed</a>
      </div>
    </nav>
    <h3 class="logo">Logo</h3>
    <div class="user-nav-icon">
      <div class="user-nav-icon-box">
        Bell
      </div>
      <div class="user-nav-icon-box">
        Settings
      </div>
    </div>
  </header>
</div>
2 голосов
/ 27 мая 2019

Использование Flex Box.Добиться этого будет сложнее, у меня есть альтернатива.Пожалуйста, проверьте этот код на codepen:

Это ваш HTML:

<div class="parent">
  <div class="nav-menu"> Your Menu</div>
  <div class="logo"></div>
  <div class="icons">Your Icons</div>
</div>

И это ваш Css:

.parent{
  width: 100%;
  min-height: 80px;
  background-color: yellow;
  display: relative;
}
.nav-menu,
.icons{
  display: inline-block;
}
.icons{
  float: right;
}
.logo{
  width: 150px;
  height: 40px;
  position: absolute;
  left: 50%;
   background-color: green;
  transform: translateX(-50%);
}
1 голос
/ 27 мая 2019

Вот ответ с использованием дисплея: flex;Flexbox - лучший и элегантный способ выравнивания элементов по середине страницы без лишних вычислений по Margin, Transform, ...

<html>
  <head>
    <style>
      *, .container {
        width: 100%;
        top: 0;
        left: 0;
        padding: 0;
        margin: 0;
        color: ivory;
        font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;
        font-size: 13px;
      }

      .header {
        display: flex;
        align-items: center;
        padding: 10px;
        background-color: gray;
      }

      .user-nav {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 30%;
      }

      .user-nav-item {
        display: flex;
        align-items: center;
        justify-content: center;
      }

      .logo {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 40%;
      }

      .user-nav-icon {
        display: flex;
        align-items: center;
        justify-content: center;
        width: 30%;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <header class="header">
        <nav class="user-nav">
          <div class="user-nav-item">
            <Link href="/">
              <a class="user-nav-item-link">Overview</a>
            </Link>
          </div>
          <div class="user-nav-item">
            <Link href="/search">
              <a class="user-nav-item-link">Search</a>
            </Link>
          </div>
          <div class="user-nav-item">
            <Link href="/feed">
              <a class="user-nav-item-link">Feed</a>
            </Link>
          </div>
        </nav>
        <h3 class="logo">Logoooooooooooooooooooooo</h3>
        <div class="user-nav-icon">
          <div class="user-nav-icon-box">
            <img src={bellIcon} alt="notify icon" />
          </div>
          <div class="user-nav-icon-box">
            <img src={settingsIcon} alt="settings icon" />
          </div>
        </div>
      </header>
    </div>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...