代码之家  ›  专栏  ›  技术社区  ›  user3108268

使最后一个菜单项的背景色不同,以扩展和填充剩余的空间?

  •  0
  • user3108268  · 技术社区  · 8 年前

    菜单背景是全屏的,但菜单本身是固定宽度的。最后一个菜单项是不同的颜色。

    <div class="nav">
      <ul>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li class="last"><a href="#">Last Link</a></li>
      </ul>
    </div>
    

    CSS:

    .nav {
      width: 100%;
      background-color: #183650;
    }
    .nav ul {
        display: flex;
        justify-content: center;
        max-width: 500px;
        padding: 0;
        text-align: center;
        margin: 0 auto;
    }
    .nav ul li {
      list-style: none;
      margin: 0 10px;
    }
    .nav ul li a {
      color: #FFF;
      text-decoration: none;
      text-transform: uppercase;
      padding: 10px 0;
      display: block;
    }
    .nav ul li.last a {
      background-color: #20bef2;
    }
    

    https://jsfiddle.net/Lnpysxze/14/

    看起来是这样的: enter image description here

    但是浅蓝色需要填充右边的剩余空间,这超出了固定宽度菜单,如下所示: enter image description here

    按钮保持相同的宽度,填充浅蓝色的新空间不应作为按钮的一部分延伸。

    2 回复  |  直到 8 年前
        1
  •  4
  •   SWC    8 年前

    这可以使用添加到最后一个列表项的伪元素来完成:

    .nav ul li.last {
      position: relative;
    }
    
    .nav ul li.last::after {
      content: "";
      position: absolute;
      top: 0;
      left: 100%;
      width: 1000px;
      height: 100%;
      background-color: #20bef2;
    }
    

    下面是一个完整的工作示例 overflow: hidden; 添加到nav菜单,因为伪元素将溢出-无法确定剩余宽度):

    .nav {
      width: 100%;
      background-color: #183650;
      overflow: hidden;
    }
    .nav ul {
        display: flex;
        justify-content: center;
        max-width: 500px;
        padding: 0;
        text-align: center;
        margin: 0 auto;
    }
    .nav ul li {
      list-style: none;
      margin: 0 10px;
    }
    .nav ul li a {
      color: #FFF;
      text-decoration: none;
      text-transform: uppercase;
      padding: 10px 0;
      display: block;
    }
    .nav ul li.last a {
      background-color: #20bef2;
    }
    
    .nav ul li.last {
      position: relative;
    }
    
    .nav ul li.last::after {
      content: "";
      position: absolute;
      top: 0;
      left: 100%;
      width: 1000px;
      height: 100%;
      background-color: #20bef2;
    }
    <div class="nav">
      <ul>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li><a href="#">Link</a></li>
      <li class="last"><a href="#">Last Link</a></li>
      </ul>
    </div>
        2
  •  0
  •   VXp Kadir BuÅ¡atlić    8 年前

    当然这是不可能的,如果 max-width: 500px 起源 ul . 没有它,你可以给 flex: 1 .first li:last-child 元素并调整它们 text-align margin 请注意,使用 伪元素 就像增加一个额外的 要素 ,尽管我不知道你的意图是 功能性 或纯 视觉的 :

    body {margin: 0}
    
    .nav {
      background-color: #183650;
    }
    
    .nav ul {
      display: flex;
      justify-content: center;
      /*max-width: 500px;*/
      padding: 0;
      text-align: center;
      margin: 0;
      border: 1px solid #fff;
      list-style: none;
    }
    
    .nav ul li:first-child {
      flex: 1;
      text-align: right;
    }
    
    .nav ul li:not(:last-child) {
      margin: 0 10px;
    }
    
    .nav ul li a {
      color: #FFF;
      text-decoration: none;
      text-transform: uppercase;
      padding: 10px 0;
      display: block;
    }
    
    .last {
      flex: 1;
      margin-left: 10px;
      text-align: left;
      background-color: #20bef2;
    }
    <div class="nav">
      <ul>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li><a href="#">Link</a></li>
        <li class="last"><a href="#">Last Link</a></li>
      </ul>
    </div>