【问题标题】:How to distribute evenly & automatically items of an horizontal list in a container w/css ala apple如何在带有 css ala apple 的容器中均匀自动分配水平列表的项目
【发布时间】:2017-04-23 01:36:50
【问题描述】:

我想创建一个类似于 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;
}

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

干杯!

【问题讨论】:

  • apple.com 使用 svg 作为文本 .. 您可以采用同样的方法,非常简单
  • 由于我们不向 SO 的用户编写代码,请发布一个工作代码 sn-p,我们将看看我们是否可以让它按照您的意愿工作
  • 感谢您的及时反馈。让我按照你的建议编辑我的帖子...

标签: html css webkit flexbox navbar


【解决方案1】:

这里我使用了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>

【讨论】:

  • @ElGringotte 我也会感谢你,并考虑接受我的回答。
  • 嗨,LGSon,tx 寻求快速帮助!我对这个解决方案的问题是链接之间没有间隙/不可点击的区域。 Apple 的优点是链接之间有空白/不可点击的区域。我无法使用 flex 属性解决这个问题...
  • @ElGringotte 将更新我的答案以解决此问题,完成后通知您
  • @ElGringotte 更新了我的答案
  • 它工作!我很烂 w/ flex 属性。周末我会好起来的!自己度过一个愉快的周末!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 2014-06-07
  • 2016-08-06
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多