将最后一个垂直UL子菜单与全尺寸页面上的底部对齐

时间:2017-08-04 21:53:02

标签: css css3

我在整页上有一个垂直菜单。除最后一个菜单外,子菜单工作正常。我需要它在底部对齐,以便它不会超出页面。

我尝试使用:last-of-type:last-child设置最后一个ul元素并用top: auto覆盖该位置,但它影响了整个菜单。

我尝试在最后一个列表项中添加一个类,但它导致子菜单列表项重叠并将背景减半。

我的问题,具体来说是:如何将最后一个子菜单项与包含li的底部对齐,同时保持其他子菜单与顶部对齐?

这是我的代码:

* {
  border: none;
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  height: 100%;
  width: 100%;
  font-family: 'Titillium Web', sans-serif;
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}

.content {
  width: 100%;
  height: 100%;
  background-color: #333;
  z-index: 1;
}

nav {
  width: 150px;
  height: 100%;
  flex: 1;
  display: flex;
  justify-content: center;
  flex-direction: column;
  background-color: rgba(0, 0, 0, .25);
}

.nav ul {
  *zoom: 1;
  list-style: none;
  margin: 0;
  padding: 0px;
  width: 100%;
  -ms-flex: 0 100px;
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  justify-content: space-between;
}

nav ul li {
  background-color: rgba(102, 148, 137, 0.25);
  border-radius: 3px;
  width: 100%;
  padding: 1.5rem 0;
}

nav ul li p {
  width: 100%;
  display: block;
  /* display: none; to hide */
}

.nav ul:before,
.nav ul:after {
  content: "";
}

.nav ul:after {
  clear: both;
}

.nav ul>li {
  position: relative;
}

.nav a {
  text-decoration: none;
  color: #eee;
}

.nav a:hover {
  text-decoration: none;
  background-color: rgba(102, 148, 137, 0.5);
}

.nav li ul {
  background-color: rgba(0, 0, 0, .25);
}

.nav li ul li {
  width: 100%;
  padding: 0;
}

.nav li ul a {
  display: block;
  border: none;
  width: 100%;
  line-height: 2;
}

.nav li ul {
  position: absolute;
  left: 150px;
  top: 0;
  z-index: 1;
  visibility: hidden;
  opacity: 0;
  filter: alpha(opacity=0);
  -webkit-transition: 200ms ease;
  -moz-transition: 200ms ease;
  -o-transition: 200ms ease;
  transition: 200ms ease;
}

.nav ul>li:hover ul {
  visibility: visible;
  opacity: 1;
  filter: alpha(opacity=100);
}
<section class="content">
  <nav class="nav">
    <ul>
      <li>
        <a href="#">
          <p>Home</p>
        </a>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
    </ul>
  </nav>
</section>

1 个答案:

答案 0 :(得分:1)

我希望我理解你..这可以吗?

.nav li:last-child ul {
    bottom: 0;
    top: initial;
}

* {
  border: none;
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html,
body {
  height: 100%;
  width: 100%;
  font-family: 'Titillium Web', sans-serif;
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}

.content {
  width: 100%;
  height: 100%;
  background-color: #333;
  z-index: 1;
}

nav {
  width: 150px;
  height: 100%;
  flex: 1;
  display: flex;
  justify-content: center;
  flex-direction: column;
  background-color: rgba(0, 0, 0, .25);
}

.nav ul {
  *zoom: 1;
  list-style: none;
  margin: 0;
  padding: 0px;
  width: 100%;
  -ms-flex: 0 100px;
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  justify-content: space-between;
}

nav ul li {
  background-color: rgba(102, 148, 137, 0.25);
  border-radius: 3px;
  width: 100%;
  padding: 1.5rem 0;
}

nav ul li p {
  width: 100%;
  display: block;
  /* display: none; to hide */
}

.nav ul:before,
.nav ul:after {
  content: "";
}

.nav ul:after {
  clear: both;
}

.nav ul>li {
  position: relative;
}

.nav a {
  text-decoration: none;
  color: #eee;
}

.nav a:hover {
  text-decoration: none;
  background-color: rgba(102, 148, 137, 0.5);
}

.nav li ul {
  background-color: rgba(0, 0, 0, .25);
}

.nav li ul li {
  width: 100%;
  padding: 0;
}

.nav li ul a {
  display: block;
  border: none;
  width: 100%;
  line-height: 2;
}

.nav li ul {
  position: absolute;
  left: 150px;
  top: 0;
  z-index: 1;
  visibility: hidden;
  opacity: 0;
  filter: alpha(opacity=0);
  -webkit-transition: 200ms ease;
  -moz-transition: 200ms ease;
  -o-transition: 200ms ease;
  transition: 200ms ease;
}

.nav ul>li:hover ul {
  visibility: visible;
  opacity: 1;
  filter: alpha(opacity=100);
}

.nav li:last-child ul {
  bottom: 0;
  top: initial;
}
<section class="content">
  <nav class="nav">
    <ul>
      <li>
        <a href="#">
          <p>Home</p>
        </a>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
      </li>
      <li>
        <a href="#">
          <p>Menu Item</p>
        </a>
        <ul>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
          <li><a href="#">Subnav Item</a></li>
        </ul>
      </li>
    </ul>
  </nav>
</section>