html - 如何在带有 css ala apple 的容器中均匀地自动分配水平列表的元素

标签 html css webkit flexbox navbar

我想创建一个类似于 apple.com 的大型导航栏。

我试图从苹果的导航栏中重现的是:

html:

<nav id="gn">
  <div id="gn-content">
    <ul class="gn-menu">
      <li class="gn-item gn-menu-brand"><a class="gn-link gn-link-brand" href="#"><span class="gn-link-span">Brand</span></a></li>
      <li class="gn-item gn-menu-products"><a class="gn-link gn-link-products" href="#"><span class="gn-link-span">Products</span></a></li>
      <li class="gn-item gn-menu-services"><a class="gn-link gn-link-services" href="#"><span class="gn-link-span">Services</span></a></li>
      <li class="gn-item gn-menu-about"><a class="gn-link gn-link-about" href="#"><span class="gn-link-span">About</span></a></li>
      <li class="gn-item gn-menu-contact"><a class="gn-link gn-link-contact" href="www.soundbody.io/contact"><span class="gn-link-span">Contact</span></a></li>
      <li class="gn-item gn-menu-signin"><a class="gn-link gn-link-signin" href="#"><span class="gn-link-span">Sign In</span></a></li>
    </ul>
  </div>
</nav>

CSS:

#gn {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  width: 100%;
  height: 44px;
  background-color: #212121;
  z-index: 1;
}

#gn #gn-content {
  display: block;
  position: relative;
  max-width: 980px;
  height: 44px;
  margin: 0 auto;
  padding: 0 22px;
  opacity: 0.65;
  z-index: 2;
}

#gn .gn-menu {
  display: block;
  position: relative;
  width: auto;
  height: 44px;
  margin: 0 -10px;
  padding: 0;
  text-align: justify;
  -ms-text-justify: distribute-all-lines;
  text-justify: distribute-all-lines;
  z-index: 3;
}

#gn .gn-item {
  display: inline-block;
  position: relative;
  width: auto;
  height: 44px;
  margin: 0 50px;
  padding: 0 0px;
  vertical-align: top;
  opacity: 1;
  z-index: 4;
}

#gn .gn-link {
  display: inline-block;
  position: relative;
  width: auto;
  height: 44px;
  margin: 0 0;
  padding: 0 10px;
  color: white;
  white-space: nowrap;
  background-repeat: no-repeat;
  background-position: center center;
  background-origin: content-box;
  z-index: 5;
}

#gn .gn-link-span {
  display: block;
  position: absolute;
  clip: rect(1px, 1px, 1px, 1px);
  top: 50%;
  width: 1px;
  height: 1px;
  margin: 0;
  padding: 0;
  border: 0;
  overflow: hidden;
}

.gn-link-brand {
  background-image: url("/img/brand.svg");
  background-size: cover;
}

我在网上找不到技巧。非常感谢您的帮助!

干杯!

最佳答案

这里我使用了flexbox

您还设置了一些不需要的属性,我已将其清除。

#gn {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 44px;
  background-color: #212121;
  z-index: 1;
}

#gn #gn-content {
  max-width: 980px;
  height: 44px;
  margin: 0 auto;
  padding: 0 22px;
  opacity: 0.65;
}

#gn .gn-menu {
  display: flex;                   /*  added property  */

  height: 44px;
  margin: 0 -10px;
  padding: 0;
  list-style: none;
}

#gn .gn-item {
  flex: 1;                         /*  added property  */
}

#gn .gn-link {
  display: flex;                   /*  added property  */
  justify-content: center;         /*  added property  */
  align-items: center;             /*  added property  */

  height: 44px;
  color: white;
  background-repeat: no-repeat;
  background-position: center center;
  background-origin: content-box;
}

#gn .gn-link-span {
  display: block;
  overflow: hidden;
}

.gn-link-brand {
  background-image: url("/img/brand.svg");
  background-size: cover;
}
<nav id="gn">
  <div id="gn-content">
    <ul class="gn-menu">
      <li class="gn-item gn-menu-brand"><a class="gn-link gn-link-brand" href="#"><span class="gn-link-span">Brand</span></a></li>
      <li class="gn-item gn-menu-products"><a class="gn-link gn-link-products" href="#"><span class="gn-link-span">Products</span></a></li>
      <li class="gn-item gn-menu-services"><a class="gn-link gn-link-services" href="#"><span class="gn-link-span">Services</span></a></li>
      <li class="gn-item gn-menu-about"><a class="gn-link gn-link-about" href="#"><span class="gn-link-span">About</span></a></li>
      <li class="gn-item gn-menu-contact"><a class="gn-link gn-link-contact" href="www.soundbody.io/contact"><span class="gn-link-span">Contact</span></a></li>
      <li class="gn-item gn-menu-signin"><a class="gn-link gn-link-signin" href="#"><span class="gn-link-span">Sign In</span></a></li>
    </ul>
  </div>
</nav>


根据评论更新,对元素使用 justify-content: space-around; 而不是 flex: 1

#gn {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 44px;
  background-color: #212121;
  z-index: 1;
}

#gn #gn-content {
  max-width: 980px;
  height: 44px;
  margin: 0 auto;
  padding: 0 22px;
  opacity: 0.65;
}

#gn .gn-menu {
  display: flex;                   /*  added property  */
  justify-content: space-around;   /*  added property  */
  height: 44px;
  margin: 0 -10px;
  padding: 0;
  list-style: none;
}

#gn .gn-link {
  display: flex;                   /*  added property  */
  justify-content: center;         /*  added property  */
  align-items: center;             /*  added property  */

  height: 44px;
  color: white;
  background-repeat: no-repeat;
  background-position: center center;
  background-origin: content-box;
}

#gn .gn-link-span {
  display: block;
  overflow: hidden;
}

.gn-link-brand {
  background-image: url("/img/brand.svg");
  background-size: cover;
}
<nav id="gn">
  <div id="gn-content">
    <ul class="gn-menu">
      <li class="gn-item gn-menu-brand"><a class="gn-link gn-link-brand" href="#"><span class="gn-link-span">Brand</span></a></li>
      <li class="gn-item gn-menu-products"><a class="gn-link gn-link-products" href="#"><span class="gn-link-span">Products</span></a></li>
      <li class="gn-item gn-menu-services"><a class="gn-link gn-link-services" href="#"><span class="gn-link-span">Services</span></a></li>
      <li class="gn-item gn-menu-about"><a class="gn-link gn-link-about" href="#"><span class="gn-link-span">About</span></a></li>
      <li class="gn-item gn-menu-contact"><a class="gn-link gn-link-contact" href="www.soundbody.io/contact"><span class="gn-link-span">Contact</span></a></li>
      <li class="gn-item gn-menu-signin"><a class="gn-link gn-link-signin" href="#"><span class="gn-link-span">Sign In</span></a></li>
    </ul>
  </div>
</nav>

关于html - 如何在带有 css ala apple 的容器中均匀地自动分配水平列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43558133/

相关文章:

html - 格式丰富的内容用什么标记语言?

javascript - 链接i DIV,将 "geturl"事件交给浏览器

html - 我如何删除白色间距?

css - 将文本基线与 CSS 中的按钮对齐

c - GtkScrolledWindow + WebkitWebView 滚动

jquery - 将关闭图标添加到固定到特定位置的模态弹出窗口

html - 由于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不太满意?

javascript - :first-child 的 slider 问题

webkit - 这个 Mobile Safari box-shadow 错误有什么解决方法吗?

c# - 引用 OpenWebKitSharp 在 C# 中使用 WebKit