【问题标题】:Firefox shows gap between main and dropdown menu with increased line heightFirefox 显示主菜单和下拉菜单之间的间隙,行高增加
【发布时间】:2017-11-19 00:13:47
【问题描述】:

In this jsfiddle 我确实有一个显示某些项目的下拉菜单的菜单。主菜单和子菜单项的高度确实增加了。为此,我使用 line-height 属性。

/* body ---------------------------------------------------------- */

body {
  font-family: Calibri, sans-serif;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  margin: 0;
}


/* header ---------------------------------------------------------- */

header {
  width: 100%;
}

.header-div {
  width: 920px;
  margin-left: auto;
  margin-right: auto;
}


/* main-menu ---------------------------------------------------------- */

div.float-left-menu {
  float: left;
  clear: both;
}

ul#main-menu {
  display: inline;
  padding: 0;
  position: relative;
  font-size: 1.1em;
  text-align: center;
}

ul#main-menu li {
  display: inline-block;
  line-height: 200%;
  list-style: none;
  vertical-align: middle;
  width: 120px;
}

ul#main-menu li:hover {
  background-color: #4f569d;
}

ul#main-menu li a {
  background: none;
  color: #4f569d;
  text-decoration: none;
  text-transform: uppercase;
}

ul#main-menu li span {
  background: none;
  color: #4f569d;
  text-transform: uppercase;
}

ul#main-menu li:hover>a {
  color: #fff;
  text-decoration: none;
}

ul#main-menu li:hover>span {
  color: #fff;
}

ul#main-menu li:hover>ul {
  display: block;
  position: absolute;
  /*top: 138%; hack for FF, otherwise there is a gap between the main menu and the dropdown menu*/
}


/* header-submenu ---------------------------------------------------------- */

ul#header-submenu {
  display: none;
  padding: 0;
  text-align: left;
  z-index: 1;
}

ul#header-submenu li {
  display: block;
  line-height: 200%;
  padding-left: 5%;
  background-color: #bbb;
  list-style: none;
  vertical-align: middle;
  width: 240px;
}

ul#header-submenu li:hover {
  background-color: #4f569d;
}

ul #header-submenu li a {
  background: none;
  color: #4f569d;
  text-decoration: none;
}

ul#header-submenu li:hover>a {
  color: #fff;
  text-decoration: none;
}
<header>
  <div class="header-div">
    <div class="float-left-menu">
      <nav>
        <ul id="main-menu">
          <li><a href="~/">Item 1</a></li>
          <li>
            <span>Sub 1</span>
            <ul id="header-submenu">
              <li><a href="#">SItem 1</a></li>
              <li><a href="#">SItem 2</a></li>
            </ul>
          </li>
          <li>
            <span>Sub 2</span>
            <ul id="header-submenu">
              <li><a href="#">SItem 1</a></li>
              <li><a href="#">SItem 2</a></li>
            </ul>
          </li>
          <li><a href="#">Item 2</a></li>
        </ul>
      </nav>
    </div>
  </div>
</header>

虽然下拉菜单在 Chrome、IE 和 Edge 的父项下方无缝显示,但 Firefox 会显示一个间隙,这不仅看起来很不利,而且当鼠标光标移动到那里进行选择时,下拉菜单也会消失。 “正常”高度不会出现问题。
对于line-height: 200%;,我可以通过将top: 138%; 添加到下拉列表的ul 来解决此问题,但坦率地说,这种方法太多尝试和错误。
Firefox 有更清洁的解决方案吗?

【问题讨论】:

  • 不要使用 line-height,而是使用 padding-top/-bottom ...?

标签: html css firefox drop-down-menu flexbox


【解决方案1】:

使用position 得到相同的结果

更新css部分

    ul#main-menu li {
        display: inline-block;
        line-height: 200%;
        list-style: none;
        vertical-align: middle;
        width: 120px;
        position:relative; /*add this*/
    }

    ul#header-submenu {
        display: none;
        padding: 0;
        text-align: left;
        z-index: 1;
        position:absolute; /*add this*/
        top:auto; /*add this you can change as your need */
        left:0px; /*add this you can change as your need */
}

/* body ---------------------------------------------------------- */

body {
  font-family: Calibri, sans-serif;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  margin: 0;
  /* put the top margin into the header, otherwise there will always be a vertical scrollbar */
}


/* header ---------------------------------------------------------- */

header {
  width: 100%;
}

.header-div {
  width: 920px;
  margin-left: auto;
  margin-right: auto;
}


/* main-menu ---------------------------------------------------------- */

div.float-left-menu {
  float: left;
  clear: both;
}

ul#main-menu {
  display: inline;
  padding: 0;
  position: relative;
  font-size: 1.1em;
  text-align: center;
}

ul#main-menu li {
  display: inline-block;
  line-height: 200%;
  list-style: none;
  vertical-align: middle;
  width: 120px;
  position: relative;
}

ul#main-menu li:hover {
  background-color: #4f569d;
}

ul#main-menu li a {
  background: none;
  color: #4f569d;
  text-decoration: none;
  text-transform: uppercase;
}

ul#main-menu li span {
  background: none;
  color: #4f569d;
  text-transform: uppercase;
}

ul#main-menu li:hover>a {
  color: #fff;
  text-decoration: none;
}

ul#main-menu li:hover>span {
  color: #fff;
}

ul#main-menu li:hover>ul {
  display: block;
  position: absolute;
  /*top: 138%; hack for FF, otherwise there is a gap between the main menu and the dropdown menu*/
}


/* header-submenu ---------------------------------------------------------- */

ul#header-submenu {
  display: none;
  padding: 0;
  text-align: left;
  z-index: 1;
  position: absolute;
  top: auto;
  left: 0px;
}

ul#header-submenu li {
  display: block;
  line-height: 200%;
  padding-left: 5%;
  background-color: #eee;
  list-style: none;
  vertical-align: middle;
  width: 240px;
}

ul#header-submenu li:hover {
  background-color: #4f569d;
}

ul #header-submenu li a {
  background: none;
  color: #4f569d;
  text-decoration: none;
}

ul#header-submenu li:hover>a {
  color: #fff;
  text-decoration: none;
}
<!DOCTYPE html>

<body>
  <header>
    <div class="header-div">
      <div class="float-left-menu">
        <nav>
          <ul id="main-menu">
            <li><a href="~/">Item 1</a></li>
            <li>
              <span>Sub 1</span>
              <ul id="header-submenu">
                <li><a href="#">SItem 1</a></li>
                <li><a href="#">SItem 2</a></li>
              </ul>
            </li>
            <li>
              <span>Sub 2</span>
              <ul id="header-submenu">
                <li><a href="#">SItem 1</a></li>
                <li><a href="#">SItem 2</a></li>
              </ul>
            </li>
            <li><a href="#">Item 2</a></li>
          </ul>
        </nav>
      </div>
    </div>
  </header>
</body>

</html>

还包括工作小提琴

fiddle link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-03
    • 2021-01-09
    • 2022-11-18
    相关资源
    最近更新 更多