【问题标题】:Flexbox - how to make logo in the center and wrap others items aroundFlexbox - 如何在中心制作徽标并将其他项目包裹起来
【发布时间】:2017-09-09 00:46:41
【问题描述】:

我有以下菜单(.logo.socials 由 JS 放置在里面),我需要将 .logo 始终放在页面中间,并让其他项目同样环绕。

<ul class="menu">
  <li><a href="/">Homepage</a></li>
  <li><a href="/contact/">Contact</a></li>
  <li><a href="/documentary/">Documentary</a></li>
  <div class="logo"></div>
  <li><a href="/stories/">Stories</a></li>
  <li><a href="/weddings/">Weddings</a></li>
  <div class="socials">
    <a href="https://www.instagram.com"><i class="sprite-instagram">i</i></a>
    <a href="https://www.facebook.com"><i class="sprite-email">f</i></a>
  </div>
</ul>

使用 CSS 将项目居中,但我不知道如何将 .logo 粘贴在中间:

.menu {
  bottom: 0;
  margin-left: auto;
  margin-right: auto;
  left: 0;
  right: 0;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  position: relative;
  -ms-flex-pack: distribute;
  justify-content: space-around;
  -webkit-box-align: center;
  -ms-flex-align: center;
  align-items: center;
}

如果你想看看,这里是小提琴:https://jsfiddle.net/kybernaut/134L25vc/1/

【问题讨论】:

    标签: html css flexbox centering


    【解决方案1】:

    您正在使用弹性容器,它使用空间分布来定位项目。

    为了使徽标水平居中,其左侧和右侧的内容需要占用相同的空间。这将创造平等的平衡,徽标可以居中。

    或者,您可以使用绝对定位从正常流程中删除徽标。然后使用lefttransform 将徽标居中。

    这里详细介绍了这两种方法(和其他方法):

    这是一个例子:

    .menu {
      display: flex;
      position: relative;
      justify-content: space-around;
      height: 80px;  
      margin-left: auto;
      margin-right: auto;
      padding: 0;
    }
    
    .menu > * {
      flex: 1;                 /* see linked explanation below */
      list-style-type: none;
      border: 1px dashed black;
      display: flex;
      align-items: center;
      justify-content: center;
      text-align: center;
    }
    
    .logo {
      flex: 0 0 200px;           /* also try `flex: 2` */
      background-color: red;  
    }
    <ul class="menu">
      <li><a href="/">Homepage</a></li>
      <li><a href="/contact/">Contact</a></li>
      <li><a href="/documentary/">Documentary</a></li>
      <div class="logo"></div>
      <li><a href="/stories/">Stories</a></li>
      <li><a href="/weddings/">Weddings</a></li>
      <div class="socials">
        <a href="https://www.instagram.com"><i class="sprite-instagram">i</i></a>
        <a href="https://www.facebook.com"><i class="sprite-email">f</i></a>
      </div>
    </ul>

    flex: 1 的工作原理:

    【讨论】:

    • 为了使所有元素的大小相同,我将flex-basis: 100% 添加到所有.li.socials 元素,并将flex-basis: 200% 添加到.logo,这很好地解决了我的麻烦
    • 我很高兴这对你有用。这是一种蛮力解决方案。我添加了一种更自然有效的方法。有关完整说明,请参阅链接的帖子。
    【解决方案2】:

    另一个li's 通过推动它来缩小弹性项目。这是不可能的,而您所有的li 都没有足够的空间来显示。

    【讨论】:

      【解决方案3】:

      这段代码应该对你有用(我假设你不想要项目符号,所以我也添加了 (list-style:none)....

      .menu {
        sisplay: -webkit-box;
        display: -ms-flexbox;
        display: flex;
        width: 100%;
        position: relative;
        -ms-flex-pack: distribute;
        justify-content: space-around;
        -webkit-box-align: center;
        -ms-flex-align: center;
        align-items: center;
        list-style: none;
        padding: 0px;
        margin: 0px;
      }
      
      .menuitem {
        width: 14.28%;
        text-align: center;
      }
      
      .logo {
        width: 14.28%;
        text-align: center;
      }
      <ul class="menu">
        <li class="menuitem"><a href="/">Homepage</a></li>
        <li class="menuitem"><a href="/contact/">Contact</a></li>
        <li class="menuitem"><a href="/documentary/">Documentary</a></li>
        <li class="logo"><img src="https://www.logogarden.com/wp-content/uploads/lg-index/Example-Logo-6.jpg" width="100%"></li>
        <li class="menuitem"><a href="/stories/">Stories</a></li>
        <li class="menuitem"><a href="/weddings/">Weddings</a></li>
        <li class="menuitem">
          <div class="socials">
            <a href="https://www.instagram.com"><i class="sprite-instagram">i</i></a>
            <a href="https://www.facebook.com"><i class="sprite-email">f</i></a>
          </div>
        </li>
      </ul>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-13
        • 2020-07-11
        • 2020-04-05
        • 2016-09-05
        • 2018-05-25
        • 2017-10-29
        • 1970-01-01
        • 2021-05-09
        相关资源
        最近更新 更多