CSS汉堡菜单图标具有不同的线宽

时间:2017-02-09 12:35:19

标签: html css css-shapes

我创建了一个简单的汉堡包菜单图标,我希望中间线比其他两个略短。这可以在没有创建多个divs的情况下完成吗?我目前的解决方案是由多个box-shadows see my working example 完成的。

这就是我想要实现的目标:

enter image description here

我的CSS:

.menu-button:before {
    content: "";
    position: absolute;
    left: 20px;
    top: 20px;
    width: 24px;
    height: 4px;
    background: #0e3c89;
    box-shadow: 0 8px 0 0 #0e3c89, 0 16px 0 0 #0e3c89;
}

谢谢!

3 个答案:

答案 0 :(得分:4)

这是一种使用尽可能少的标记来形成这种形状的方法:

  1. 使用具有顶部/底部边框的特定width / height创建元素。
  2. 使用linear-gradient()绘制中央栏并使用background-size控制其大小,并使用.background-position css属性进行定位。
  3. 必要的HTML:

    只有单个元素(可能有一个类):

    <div class="menu-button"></div>
    

    必要的CSS:

    .menu-button {
      // draws the central bar
      background: linear-gradient(to right, #0e3c89, #0e3c89) no-repeat;
      background-position: center left;
      background-size: 85% 4px;
    
      // draws the top / bottom bars
      border: solid #0e3c89;
      border-width: 4px 0;
    
      height: 24px;
      width: 28px;
    }
    

    <强>截图:

    Opener Image

    &#13;
    &#13;
    * {box-sizing: border-box;}
    
    .menu-button {
      background: linear-gradient(to right, #0e3c89, #0e3c89) no-repeat;
      background-position: center left;
      background-size: 85% 4px;
      border: solid #0e3c89;
      border-width: 4px 0;
      height: 24px;
      width: 28px;
    }
    &#13;
    <div class="menu-button"></div>
    &#13;
    &#13;
    &#13;

答案 1 :(得分:4)

是的,这可以在没有额外标记的情况下完成。这是你可以做到的一种方式:

&#13;
&#13;
.menu-button {
    width: 20px;
    height: 4px;
    background: #0e3c89;
    margin: 20px 0 0 20px;
}

.menu-button:before {
    display: block;
    content: "";
    width: 28px;
    height: 4px;
    box-shadow: 0 -8px 0 0 #0e3c89, 0 8px 0 0 #0e3c89;
}
&#13;
<div class="menu-button"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我的解决方案(使用flex):

HTML

<span class="hamburger"></span>

CSS

.hamburger {
    display: flex;
    align-items: center;
    width: 40px;
    height: 23px;
    cursor: pointer;
    border-top: 6px solid #000;
    border-bottom: 6px solid #000;
}

.hamburger::before {
    content: "";
    width: 70%;
    border-bottom: 6px solid #000;
}