【问题标题】:Single div horizontal CSS hexagon button单 div 水平 CSS 六边形按钮
【发布时间】:2013-01-16 08:30:35
【问题描述】:

我想使用单个 div 创建一个六边形形状的 CSS 按钮,以保持标记干净。我一直在尝试使用伪元素之前和之后,并且可以使用顶部和底部的六边形“点”来做到这一点,但我想用它们指向左右来适应我的主题的其余部分。我已经接近了,但我无法在我想要的地方获得 after 伪元素。谁能解决这个问题?

这就是我的目标:

#hex {
  background-color:green;
  width:100px;
  height:100px;
  float:left;
  display:block;
}

#hex::before {
  content:"";
  border-top:50px solid red;
  border-bottom:50px solid red;
  border-right:30px solid blue;
  float:left;
}

#hex::after {
  content:"";
  border-top:50px solid red;
  border-bottom:50px solid red;
  border-left:30px solid blue;
  float:left;
}

http://jsfiddle.net/higginbottom/YKx2M/ 有一个 JS Fiddle

【问题讨论】:

    标签: css button css-shapes hexagonal-tiles


    【解决方案1】:

    试试这个例子:http://jsbin.com/ipaked/6 (在 Fx 和 Chrome 上测试)

    相关的 CSS

    .hexagon {
      position: relative;
      width: 124px;
      height: 100px;
      background: #d8d8d8;
    }
    
    .hexagon:after,
    .hexagon:before {
      position: absolute;
      content: "";
      z-index: 1;
      top: 0;  
      width: 0px;
      background: #fff;
      border-top: 50px transparent solid; 
      border-bottom: 50px transparent solid;
    }
    
    .hexagon:before {
        left: 0;
        border-right: 30px #d8d8d8 solid; 
    }
    .hexagon:after {
        right: 0;
        border-left: 30px #d8d8d8 solid; 
    }
    

    (调整六边形的边框宽度和大小,使其看起来像您喜欢的那样。)


    作为替代方案,您还可以使用单个伪元素,其中可以显示黑色六边形 unicode 字符 U+2B21,例如以下示例:http://jsbin.com/ipaked/7

    CSS

    .hexagon {
      position: relative;
      width: 120px;
      height: 100px;
      line-height: 100px;
      text-align: center;
    }
    
    .hexagon:before {
      position: absolute;
      content: "\2B21";
      font-size: 160px;
      z-index: 1;
      width: 100%; 
      height: 100%;
      left: 0;
      top: 0;  
    }
    

    这可能是一个更好的选择(如果使用相对字体大小),因此当用户增加或减少浏览器上的基本字体大小时,六边形可以自行调整。

    【讨论】:

    • 神奇的法布里齐奥。我已经进行了一些调整,以适应一些我在原始问题中没有提到但可能应该有的额外规格。我想我现在有一个可行的解决方案。最新版本在这里:jsbin.com/ipaked/10/edit 顺便说一下 Unicode 解决方案,由于缺乏字体支持,我没有深入研究。
    • 第二个,我只看到一个像字符的盒子。不是每种语言都支持六边形字符?
    【解决方案2】:

    我是using clip-path:

    .btn {
      display: inline-block;
      text-align: center;
      text-decoration: none;
      vertical-align: middle;
      user-select: none;
      padding: 0.375rem 2rem;
      
      --btn-raise: 1rem;
      clip-path: polygon(var(--btn-raise) 0%, calc(100% - var(--btn-raise)) 0%, 100% 50%, calc(100% - var(--btn-raise)) 100%, var(--btn-raise) 100%, 0 50%);
      background-color: #fefd64;
      text-transform: uppercase;
    }
    <a class="btn" href="/call">Call call</a>

    【讨论】:

      【解决方案3】:

      试试这个codepen链接http://codepen.io/bherumehta/pen/egdXLvhttp://codepen.io/bherumehta/pen/VPKRBG

      .hexa{
        width:300px;
        background:red;
        height:70px;
        color:#fff;
        postion:relative;
        border-top:1px solid red;
        border-bottom:1px solid red;
      }
      
              .hexa-inner{
                  height:70px;
                   position:relative;
               }
                      .hexa-inner{
                        height:70px;
                        position:relative;
                        }
                      .hexa-inner:before{
                        content: '';
                        position: absolute;
                        top: 0;
                        left: 0;
                        height: 50%;
                        width: 50px;
                        background: red;
                        -webkit-transform: skew(-45deg, 0deg);
                        -moz-transform: skew(-45deg, 0deg);
                        -ms-transform: skew(-45deg, 0deg);
                        -o-transform: skew(-45deg, 0deg);
                        transform: skew(-45deg,0deg);
                      }
                      .hexa-inner:after {
                        content: '';
                        position: absolute;
                        top: 50%;
                        left: 0;
                        height: 50%;
                        width: 50px;
                        background: red;
                        -webkit-transform: skew(-135deg, 0deg);
                        -moz-transform: skew(-135deg, 0deg);
                        -ms-transform: skew(-135deg, 0deg);
                        -o-transform: skew(-135deg, 0deg);
                        transform: skew(-135deg, 0deg);
                      }
                      .left-arrow{
                       margin-left:-18px;
                       float:left;
                      }
                      .right-arrow{
                        transform:rotate(180deg);
                        float:right;
                        margin-right:-18px
                      }
                      .hexa p{
                        white-space:nowrap;
                        max-width:100%;
                        overflow:hidden;
                        text-overflow:ellipsis;
                      }        
      

      HTML

          <div class="hexa">
             <div class="hexa-inner left-arrow"> </div>
             <div class="hexa-inner right-arrow"> </div>
             <p>hexagonhexagonhexagonhexagonhexagonhexagonhexagonhexagonhexago
              xagonhexagonhexagonhexagonhexagonhexagonhexagon</p>
         </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-25
        • 2014-04-08
        • 1970-01-01
        • 2016-02-20
        • 2015-03-22
        • 2016-07-27
        • 1970-01-01
        相关资源
        最近更新 更多