【问题标题】:Centered Logo in Navigation Bar?导航栏中的居中徽标?
【发布时间】:2017-03-25 21:11:07
【问题描述】:

任何人都可以指导我创建一个导航栏的最佳方法,该导航栏具有居中的徽标和每侧 2 个链接,如下所示:

我读过不同的方法,比如将一个 ul 拆分为 2 个,一个向左浮动另一个向右浮动,然后将徽标居中,但我不知道如何做到这一点,我读的越多,我就越困惑。 我希望它具有响应性并且比正常高,可能是屏幕高度的 15/20%。

谁能帮我解决这个问题?

【问题讨论】:

标签: html css navigation center


【解决方案1】:

只需使用 Flexbox。只需将 div #logo 替换为您的图片即可。

HTML

<nav>
  <a href="">Home</a>
  <a href="">Artwork</a>
  <div id="logo"></div>
  <a href="">Responses</a>
  <a href="">Contact</a>
</nav>

CSS

html, body{
  height: 100%;
}

body{
  margin: 0;
}

nav{
  display: flex;
  width: 100%;
  height: 20%;
  background: #eee;
  align-items: center;
  justify-content: center;
}

a{
  text-decoration: none;
  color: rgba(0,0,0,0.8);
  margin: 0 40px;
}

#logo{
  width: 200px;
  height: 100%;
  background: rgba(0,0,0,0.3);
}

html,
body {
  height: 100%;
}
body {
  margin: 0;
}
nav {
  display: flex;
  width: 100%;
  height: 20%;
  background: #eee;
  align-items: center;
  justify-content: center;
}
a {
  text-decoration: none;
  color: rgba(0, 0, 0, 0.8);
  margin: 0 40px;
}
#logo {
  width: 200px;
  height: 100%;
  background: rgba(0, 0, 0, 0.3);
}
<nav>
  <a href="">Home</a>
  <a href="">Artwork</a>
  <div id="logo"></div>
  <a href="">Responses</a>
  <a href="">Contact</a>
</nav>

【讨论】:

  • 是的!这很有魅力,非常感谢。虽然我在将我的徽标作为 index.html 的链接时遇到了问题,但当我这样做时它会偏离中心,但我稍后会担心。我实际上正在使用 flexbox 为一组图像创建一个 4 列网格,但是我在每行的顶部或底部都有一个边距,你知道这里发生了什么吗? codepen.io/anon/pen/RoawLB
  • 不客气,抱歉回复晚了。很高兴能帮上忙。如果您仍然对徽标有疑问,请随时发布小提琴,如果您愿意,我可以简短地看一下。是的,问题是您的图像可能具有不同的高度。 Flexbox 不会像砖石画廊那样对齐它。如果你想要这样的东西,你可以看看我之前做的这个pen。您还可以将 align-items: center 添加到您的 flex 容器中,但我不知道这是否是您想要的效果。
  • 不幸的是,这不是一个可用的解决方案。只有在两边的链接大小完全相同时,徽标才会居中...
  • 同意@00-BBB,在我的情况下左右菜单不平衡,logo不会居中。
【解决方案2】:

如果链接的大小不完全相同,则接受的答案会中断(在现实世界中不太可能,显然可以设置固定宽度但很繁琐)

如果两侧的链接数量相同,则此方法有效(只要两侧有足够的空间让链接具有均匀的宽度

ul, li {
  list-style-type: none;
}

.navi-list {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  width: 100%;
}

.navi-list li:not(.centered-logo) {
  flex: 1 0 auto;
  text-align: center;
}
<nav class="navi">
    <ul class="navi-list">
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li class="centered-logo">
          <a href="/">
              <img src="//placehold.it/100x30" alt="CENTERED LOGO">
          </a>
        </li>
        <li><a href="#">Three</a></li>
        <li><a href="#">Four</a></li>
    </ul>
</nav>

如果是奇数,您可以在 DOM 中或使用 :before / :after 添加空的不可见元素(我知道但它有效),具体取决于需要多少额外元素。不幸的是,这个解决方案并不完美,所以任何建议的改进都会很棒。 像这样:

ul, li {
  list-style-type: none;
}

.navi-list {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  width: 100%;
}

.navi-list li:not(.centered-logo) {
  flex: 1 0 auto;
  text-align: center;
}

.navi-list:before {
  content: "0";
  opacity: 0.1;
  display: block;
  flex: 1 0 auto;

  
  /*  dev view  */
  height: 20px;
  background: rgba(0,0,0,0.1);
}
<nav class="navi">
    <ul class="navi-list">
<!--         <li style="opacity:0.1;">empty</li> -->
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li class="centered-logo">
          <a href="/">
              <img src="//placehold.it/100x30" alt="CENTERED LOGO">
          </a>
        </li>
        <li><a href="#">3</a></li>
        <li><a href="#">4</a></li>
        <li><a href="#">5</a></li>
    </ul>
</nav>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2012-11-28
    • 2023-03-06
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多