【问题标题】:Navigation Alignment Problems导航对齐问题
【发布时间】:2016-10-21 15:08:38
【问题描述】:

是否可以使用 css 或 javascript/jQuery-manipulation 将一些导航项置于同一个 div 容器中,而该容器中的其他项(最后三个)应该位于导航栏的右边缘?我已经尝试过使用 flexbox 和 inline-block/text-align center。我能够使整个 div 容器居中。但是当我将最后三个 div 向右移动时,剩余的项目保持在它们的位置。基于三个项目现在位于右侧的事实,居中导航栏的宽度发生了变化,实际上它应该向右移动一点以再次居中。

围绕这些居中和右侧元素制作新的环绕元素将是最后的选择,因为我在带有 php-menues 的 wordpress 上运行。因此,更改标记可能不是那么容易,例如简单的 css 或 javascript/jquery 解决方案。 您可以查看已发布标记下方的小提琴以更好地了解我;)

默认 HTML 标记:

<div class="header" style="height: 100px; overflow: visible;">
<div class="row">
<div class="logo" data-margin-top="34px" data-margin-       bottom="10px" data-margin-left="0px" data-margin-right="0px">
            <a class="logo-link" href="http://stackoverflow.com/">
                    <img src="http://www.backstein.com/media/mobil_1376659435_test_logo_neu.jpg" alt="ava" class="logo-1x standard-logo" style="" height="33" width="45">
                </a>
</div>
    <div class="main-menu">
        <ul id="menu-mainnav" class="menu">
            <li id="menu-item-116" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-116 dropdown-menu">
                <a href="/link1/" aria-haspopup="true">
                    <span class="menu-text">CENTER </span>
                </a>
                </li>
            <li id="menu-item-263" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-263 dropdown-menu">
                <a href="http://stackoverflow.com/" aria-haspopup="true">
                    <span class="menu-text">CENTER </span>
                </a>
            </li>
            <li id="menu-item-75" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-75">
                <a href="http://stackoverflow.com/">
                    <span class="menu-text">CENTER </span>
                </a>
            </li>
            <li id="menu-item-27" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27">
                <a href="http://stackoverflow.com/">
                    <span class="menu-text">CENTER </span>
                </a>
            </li>
            <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76">
                <a href="http://stackoverflow.com/">
                    <span class="menu-text">CENTER </span>
                </a>
            </li>
            <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76">
                <a href="http://stackoverflow.com/">
                    <span class="menu-text">TO RIGHT </span>
                </a>
            </li>
            <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76">
                <a href="http://stackoverflow.com/">
                    <span class="menu-text">TO RIGHT </span>
                </a>
            </li>
            <li id="menu-item-133" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-133 menu-item-button">
                <a href="http://stackoverflow.com/"> <span class="menu-textmenu-text button button-default button-medium">TO RIGHT
                    </span>
                </a>
            </li>
       </ul></div>      

        </div>

默认 CSS:

.header {
  height: 100px;
  overflow: visible;
  padding: 0px;
}

.row {
  position: relative;
  width: 94.44444%;
  margin: 0 auto;
  max-width: 100%;
}

.logo {
  display: inline-block;
  width: auto;
  float: left;
 }

.main-menu {
  float: right;
  position: relative;
  z-index: 200;
  overflow: hidden;
}

 #menu-mainnav {
  list-style: none;
  margin: 0;
  padding: 0;
  display: block;
}

#menu-mainnav > li {
 float: left;
 margin: 0;
 padding: 0;
 position: relative;
 cursor: pointer;
 display: list-item;
 text-align: match-parent;
 padding-right:11px;
  }

#menu-mainnav > li > a {
 font-size: 11px;
 display: block;
 box-sizing: content-box;
 }

JSFiddle-示例:https://jsfiddle.net/tz0atc4o/1/

更新: 这是一个小提琴,我尝试过 text-align 和 inline 解决方案。您可以阅读 CSS 注释,以便在整个 div 居中时进行测试。在这种情况下,只需注释掉最后一个 CSS 规则。与整个居中的 div 相比,我不确定项目是否真的居中,当最后三个浮动到右侧时:/

https://jsfiddle.net/37gc2v9x/

提前致谢!

【问题讨论】:

  • 您好,谢谢!我已经用 flexbox 和 margin: auto 试过了。问题是我有超过 1 个最后一项,应该在右侧。这会导致我的测试出现对齐问题,但也许我错了。我会在晚上再试一次,再次:)
  • 项目数量无关紧要。只需将margin-left: auto 应用于要向右对齐的组中最左侧的项目。然后确保在左侧添加相同的幻像项目。 jsfiddle.net/nt4prkaq/5

标签: javascript jquery html css navbar


【解决方案1】:

试试这个:

  1. 将菜单分成两部分。

  2. 简化.main-menu 类。

  3. 使用position:absolute; left:0; right:0; 将块扩展到其父级的宽度。

  4. 添加text-align: center; 将项目放置在块的中心。

请查看结果:https://jsfiddle.net/glebkema/0on8za7q/

.header {
  height: 100px;
  overflow: visible;
  padding: 0px;
}

.row {
  position: relative;
  width: 94.44444%;
  margin: 0 auto;
  max-width: 100%;
}

.logo {
  display: inline-block;
  width: auto;
  float: left;
}

.main-menu {
  position: relative;
}

.menu {
  list-style: none;
  margin: 0;
  padding: 0;
  display: block;
}

.menu > li {
  float: left;
  margin: 0;
  padding: 0;
  position: relative;
  cursor: pointer;
  display: list-item;
  text-align: match-parent;
  padding-right: 11px;
}
.menu > li {
  float: none;
  display: inline-block;
}

.menu > li > a {
  font-size: 11px;
  display: block;
  box-sizing: content-box;
}

.menu-center {
  position: absolute;
  left: 0;
  right: 0;
  text-align: center;
}

.menu-right {
  float: right;
}
<div class="header" style="height: 100px; overflow: visible;">
  <div class="row">
    <div class="logo" data-margin-top="34px" data-margin-bottom="10px" data-margin-left="0px" data-margin-right="0px">
      <a class="logo-link" href="http://stackoverflow.com/">
        <img src="http://www.backstein.com/media/mobil_1376659435_test_logo_neu.jpg" alt="ava" class="logo-1x standard-logo" style="" height="33" width="45">
      </a>
    </div>
    <div class="main-menu">

      <ul id="menu-mainnav-1" class="menu menu-center">
        <li id="menu-item-116" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-116 dropdown-menu">
          <a href="/link1/" aria-haspopup="true">
            <span class="menu-text">CENTER </span>
          </a>
        </li>
        <li id="menu-item-263" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-263 dropdown-menu">
          <a href="http://stackoverflow.com/" aria-haspopup="true">
            <span class="menu-text">CENTER </span>
          </a>
        </li>
        <li id="menu-item-75" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-75">
          <a href="http://stackoverflow.com/">
            <span class="menu-text">CENTER </span>
          </a>
        </li>
        <li id="menu-item-27" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-27">
          <a href="http://stackoverflow.com/">
            <span class="menu-text">CENTER </span>
          </a>
        </li>
        <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76">
          <a href="http://stackoverflow.com/">
            <span class="menu-text">CENTER </span>
          </a>
        </li>
      </ul>

      <ul id="menu-mainnav-2" class="menu menu-right">
        <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76">
          <a href="http://stackoverflow.com/">
            <span class="menu-text">TO RIGHT </span>
          </a>
        </li>
        <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76">
          <a href="http://stackoverflow.com/">
            <span class="menu-text">TO RIGHT </span>
          </a>
        </li>
        <li id="menu-item-133" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-133 menu-item-button">
          <a href="http://stackoverflow.com/"> <span class="menu-textmenu-text button button-default button-medium">TO RIGHT
                        </span>
          </a>
        </li>
      </ul>
      
    </div>
  </div>
</div>

【讨论】:

  • 这也是我的想法,但在这种情况下,我会更改 php 文件中的标记。我正在使用儿童主题,这并非不可能,但我正在寻找另一种解决方案,而不触及主题作者给出的标记。但是感谢您的建议,这将是我解决此冲突的最后解决方案
  • @DoUtDes 谢谢你的解释。事务的实际方面使您的问题更加有趣。
  • @DoUtDes 请再次告诉我详细信息,您可以在代码中更改哪些内容,哪些不能更改。
【解决方案2】:

如果你不明白,这里有一些你可以解决的问题。

<style>
    .header {
      height: 100px;
      overflow: visible;
      padding: 0px;
    }

    .row {
        position: relative;
        width: 120%;
        margin: 0 auto;
        max-width: 100%;
    }

    .logo {
      display: inline-block;
      width: auto;
      float: left;
     }

    .main-menu {
        float: right;
        position: relative;
        z-index: 200;
        overflow: hidden;
        height: 50px;
    }

     #menu-mainnav {
      list-style: none;
      margin: 0;
      padding: 0;
      display: block;
    }

    #menu-mainnav > li {
     float: left;
     margin: 0;
     padding: 0;
     position: relative;
     cursor: pointer;
     display: list-item;
     text-align: match-parent;
     padding-right:11px;
      }

    #menu-mainnav > li > a {
     font-size: 11px;
     display: block;
     box-sizing: content-box;
     }
    .spacer {
        width: 30%;
    }
    </style>
    <div class="row">
      <div class="logo" data-margin-top="34px" data-margin-       bottom="10px" data-margin-left="0px" data-margin-right="0px"> <a class="logo-link" href="http://stackoverflow.com/"> <img src="http://www.backstein.com/media/mobil_1376659435_test_logo_neu.jpg" alt="ava" class="logo-1x standard-logo" style="" height="38" width="51"> </a> </div>
      <table width="92%" border="0">
        <tr>
          <td width="85%" height="38"><table width="109%" height="25" border="0" align="right">
            <tr>
              <td width="47%" height="21">&nbsp;</td>
              <td width="53%" align="right"> <ul id="menu-mainnav" class="menu"  style="float:none;">
                <li id="menu-item-116" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-116 dropdown-menu"> <a href="/link1/" aria-haspopup="true"> <span class="menu-text">CENTER </span></a></li>
                <li id="menu-item-" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-116 dropdown-menu"> <a href="/link1/" aria-haspopup="true"> <span class="menu-text">CENTER </span></a></li>
                <li id="menu-item-2" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-116 dropdown-menu"> <a href="/link1/" aria-haspopup="true"> <span class="menu-text">CENTER </span></a></li>
                <li id="menu-item-3" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-116 dropdown-menu"> <a href="/link1/" aria-haspopup="true"> <span class="menu-text">CENTER </span></a></li>
                <a href="http://stackoverflow.com/"></a></ul></td>
              </tr>
          </table></td>
          <td width="15%" align="left"><table width="213" border="0" align="right"  class="menu">
            <tr>
              <td width="56%" height="21" align="right"><ul id="menu-mainnav" class="menu"><li id="menu-item-5" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76"> <a href="http://stackoverflow.com/"> <span class="menu-text">TO RIGHT </span></a></li>
                <li id="menu-item-76" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-76"> <a href="http://stackoverflow.com/"> <span class="menu-text">TO RIGHT &nbsp; </span></a></li>
                <li id="menu-item-133" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-133 menu-item-button"> <a href="http://stackoverflow.com/"> <span class="menu-textmenu-text button button-default button-medium">TO RIGHT </span></a></li>
              </ul></td>
              </tr>
          </table></td>
        </tr>
      </table>
    </div>
    <p>&nbsp;</div>
    </div></p>

【讨论】:

    【解决方案3】:

    您可以通过 nth-child 选择器处理最后三个 li 并将它们浮动到右侧。

    【讨论】:

    • 您好,我已经尝试过了,可能我必须去配镜师那里拿些眼镜,但我不确定,如果居中的物品真的居中,而另一个项目向右浮动。我做了一个小提琴jsfiddle.net/37gc2v9x。虽然我确信当整个 div 居中时项目居中,但我不确定当其他项目向右浮动时它们是否真的居中?请您检查一下,是否只是某种视错觉?对我来说,他们似乎没有居中。您也可以查看我的 css cmets 了解 :)
    • 它看起来居中,但徽标在容器内,所以从左侧看,它似乎不是居中而是居中。
    【解决方案4】:

    float: right 添加到最后的项目中,其他项目则为display: inline-block;float:none;,然后只需将.menu 更改为text-align: center;width: 100%;

    【讨论】:

    • 您好,我已经尝试过了,可能我必须去配镜师那里拿些眼镜,但我不确定,如果居中的物品真的居中,而另一个项目向右浮动。我做了一个小提琴jsfiddle.net/37gc2v9x。虽然我确信当整个 div 居中时项目居中,但我不确定当其他项目向右浮动时项目是否真的居中?请您检查一下,是否只是某种视错觉?对我来说,他们似乎没有居中。您也可以查看我的 css cmets 了解 :)
    • 通常当 text-align: center 不居中时,居中的项目会有一些边距或填充。检查这个。我给你建议如何达到结果,它需要像这样的一些更正。
    • 你是对的,我必须消除一些剩余的填充物!非常感谢,你让我开心:)
    • @DoUtDes 请显示结果。我无法达到预期的效果。
    • 嗨 Gleb,当每个
    • 项目的右侧有 12px 的填充时,必须在最后一个项目上消除该填充,该项目应该居中,否则会将整个居中的项目移动 12px例如,向左太远。你可以在这里查看:jsfiddle.net/cy60te86/4
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签