RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 778110
Accepted
Alexandr_TT
Alexandr_TT
Asked:2020-01-31 19:05:28 +0000 UTC2020-01-31 19:05:28 +0000 UTC 2020-01-31 19:05:28 +0000 UTC

CSS动画六边形菜单

  • 772

我正在尝试创建一个动画六边形菜单。

请看图更好地理解:

在此处输入图像描述

六边形形式的汉堡按钮位于中间。
单击它会显示围绕汉堡按钮的三角形。
汉堡图标变成了一个十字,所以当你再次点击它时,一切都会回到原来的位置。
我的解释性图片实际上在一开始就缺少一步。图像的左半部分应该只显示汉堡按钮。

所以我的问题是:

如何使用 HTML、CSS通过jQuery或以其他方式从六边形创建此动画。

你会用什么方法来做到这一点?

@Julian Livin 在中国免费翻译CSS 动画六边形菜单问题。

javascript
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Alexandr_TT
    2020-01-31T19:05:28Z2020-01-31T19:05:28Z

    这是一个示例和演示:

    六边形菜单演示

    这是 gif 六边形的动画效果:

    在此处输入图像描述

    六边形菜单的主要功能:

    • 适应性——视规模而定viewport (vmin)。这可以通过将值更改width/height为百分比来更改(必须保持纵横比,请参见此处)

    • 图像(用 标记<img />)、标题和字幕

    • 6个菜单项

    • 六边形轮廓中的动画汉堡包图标

    • 菜单项边框与三角形相关联,因此它们不会重叠。因此,click只有hover state在实际菜单项为hovered/clicked

    • 可以显示在图像、渐变或任何非主要背景上

    六边形布局:

    • CSS3 2d transforms允许您创建三角形skewY()和 rotate()

    • 菜单项使用类绑定到三角形 -.tr和 .clip,unskewedc.clip和旋转返回绑定到类 .content,汉堡包周围的六边形由多边形制成SVG(比使用更容易做并获得更好的结果 CSS

    • 汉堡图标由span两个伪元素组成

    带动画的六边形菜单:

    • 三角形一个接一个地传递 ( translate()and opacity) 与属性transition-delay
    • 动画三角形的“反弹效果”是通过函数transition-timming-function和三次贝塞尔曲线完成的。
    • 十字动画汉堡图标是通过过渡两个伪元素(translate()和rotate())并将中心元素的背景淡化为透明颜色来创建的rgba

    悬停动画:

    • 汉堡的悬停效果是通过对 stroke-dashoffsetSVG 元素上的属性设置动画来实现的<polygon>。

    • 3D transforms使用( translateZ()) 和不透明度在悬停时显示项目标题和副标题。图像同时消失

    使用的技术:

    • CSSSCSS用和编码,Autoprefixer使其更易于
      书写、阅读和缩写。您可以 通过单击演示中CSS的按钮 来查看编译后的 内容(编译后的 CSS 也可在本文末尾找到)Скомпилированный вид
    • 用于SVG汉堡包图标周围的六边形
    • HTML用于标记
    • 简单的 JS 通过在容器上添加类来切换动画

    浏览器支持:

    • IE 11我在、和系统 上测试了这个菜单chrome,并且该菜单在所有这些浏览器中都有效。FFoperaWindows

    • Chrome并使用模糊渲染字体(如由 chrome 制作FF的动画中所见),并倾向于为三角形创建锯齿边gifFF

    • IE 11字体和三角形的质量最好,但它不支持动画SMIL,因此对汉堡六边形没有悬停效果

    • 我已经使用 testingcrossbrowser来检查 support safari,并且 hex 菜单也适用于这个系统。

    var hexNav = document.getElementById('hexNav');
    
    document.getElementById('menuBtn').onclick = function() {
        var className = ' ' + hexNav.className + ' ';
        if ( ~className.indexOf(' active ') ) {
            hexNav.className = className.replace(' active ', ' ');
        } else {
            hexNav.className += ' active';
        }              
    }
    * {
      margin: 0;
      padding: 0;
    }
    
    html, body {
      height: 100%;
    }
    
    body {
      font-family: 'Open Sans', sans-serif;
      background: #E3DFD2;
    }
    
    ul {
      list-style-type: none;
    }
    
    a, a:hover, a:focus, a:visited {
      text-decoration: none;
    }
    
    nav {
      position: relative;
      width: 70vmin;
      height: 70vmin;
      min-width: 500px;
      min-height: 500px;
      margin: 0 auto;
      overflow: hidden;
    }
    
    /** MENU BUTTON ******************************************/
    #menuBtn {
      position: absolute;
      top: 45%;
      left: 45%;
      width: 10%;
      height: 10%;
      cursor: pointer;
      z-index: 2;
      will-change: transform;
    }
    #menuBtn svg {
      display: block;
    }
    #menuBtn:hover svg polygon {
      -webkit-animation: hexHover 0.7s;
              animation: hexHover 0.7s;
    }
    #menuBtn span {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 20px;
      height: 2px;
      padding: 8px 0;
      background-clip: content-box;
      background-color: #585247;
      -webkit-transform: translate(-50%, -50%);
          -ms-transform: translate(-50%, -50%);
              transform: translate(-50%, -50%);
      -webkit-transition: background-color 0.5s;
              transition: background-color 0.5s;
    }
    #menuBtn span:before, #menuBtn span:after {
      position: absolute;
      background-color: #585247;
      content: '';
      width: 20px;
      height: 2px;
      -webkit-transition: -webkit-transform 0.5s;
              transition: transform 0.5s;
    }
    #menuBtn span:before {
      top: 0;
    }
    #menuBtn span:after {
      bottom: 0px;
    }
    
    @-webkit-keyframes hexHover {
      0% {
        stroke-dasharray: 0,0,300;
      }
      10% {
        stroke-dasharray: 0,20,300;
      }
      100% {
        stroke-dasharray: 300,20,300;
      }
    }
    
    @keyframes hexHover {
      0% {
        stroke-dasharray: 0,0,300;
      }
      10% {
        stroke-dasharray: 0,20,300;
      }
      100% {
        stroke-dasharray: 300,20,300;
      }
    }
    /** MENU ITEMS *******************************************/
    #hex {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      -webkit-transform: scale(0.1) translatez(0);
          -ms-transform: scale(0.1) translatez(0);
              transform: scale(0.1) translatez(0);
      -webkit-transition: -webkit-transform 0.05s 0.5s;
              transition: transform 0.05s 0.5s;
    }
    
    .tr {
      position: absolute;
      left: 50%;
      bottom: 50%;
      width: 34.6%;
      height: 40%;
      -webkit-transform-origin: 0 100%;
          -ms-transform-origin: 0 100%;
              transform-origin: 0 100%;
      overflow: hidden;
      -webkit-transform: skewY(-30deg);
          -ms-transform: skewY(-30deg);
              transform: skewY(-30deg);
      opacity: 0;
    }
    
    .tr:nth-child(1) {
      -webkit-transform: rotate(0deg) skewY(-30deg);
          -ms-transform: rotate(0deg) skewY(-30deg);
              transform: rotate(0deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(1) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(1) .content {
      -webkit-transform: rotate(-30deg);
          -ms-transform: rotate(-30deg);
              transform: rotate(-30deg);
      -webkit-transform-origin: 0 0;
          -ms-transform-origin: 0 0;
              transform-origin: 0 0;
      padding-left: 15%;
      -webkit-perspective-origin: 30% 70%;
              perspective-origin: 30% 70%;
    }
    
    .active .tr:nth-child(1) {
      -webkit-transform: rotate(0deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(0deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(0deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.05s, -webkit-transform 0.5s 0.05s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.05s, transform 0.5s 0.05s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .tr:nth-child(2) {
      -webkit-transform: rotate(60deg) skewY(-30deg);
          -ms-transform: rotate(60deg) skewY(-30deg);
              transform: rotate(60deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(2) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(2) .content {
      -webkit-transform: rotate(-90deg);
          -ms-transform: rotate(-90deg);
              transform: rotate(-90deg);
      top: -8%;
      left: 6.67%;
      padding-left: 30%;
      -webkit-perspective-origin: 30% 50%;
              perspective-origin: 30% 50%;
    }
    
    .active .tr:nth-child(2) {
      -webkit-transform: rotate(60deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(60deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(60deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.1s, -webkit-transform 0.5s 0.1s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.1s, transform 0.5s 0.1s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .tr:nth-child(3) {
      -webkit-transform: rotate(120deg) skewY(-30deg);
          -ms-transform: rotate(120deg) skewY(-30deg);
              transform: rotate(120deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(3) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(3) .content {
      -webkit-transform: rotate(-150deg);
          -ms-transform: rotate(-150deg);
              transform: rotate(-150deg);
      -webkit-transform-origin: 42.3% 36.5%;
          -ms-transform-origin: 42.3% 36.5%;
              transform-origin: 42.3% 36.5%;
      padding-left: 10%;
      -webkit-perspective-origin: 30% 30%;
              perspective-origin: 30% 30%;
    }
    
    .active .tr:nth-child(3) {
      -webkit-transform: rotate(120deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(120deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(120deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.15s, -webkit-transform 0.5s 0.15s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.15s, transform 0.5s 0.15s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .tr:nth-child(4) {
      -webkit-transform: rotate(180deg) skewY(-30deg);
          -ms-transform: rotate(180deg) skewY(-30deg);
              transform: rotate(180deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(4) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(4) .content {
      -webkit-transform: rotate(-210deg);
          -ms-transform: rotate(-210deg);
              transform: rotate(-210deg);
      -webkit-transform-origin: 65.4% 38.4%;
          -ms-transform-origin: 65.4% 38.4%;
              transform-origin: 65.4% 38.4%;
      padding-left: 30%;
      -webkit-perspective-origin: 70% 30%;
              perspective-origin: 70% 30%;
    }
    
    .active .tr:nth-child(4) {
      -webkit-transform: rotate(180deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(180deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(180deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.2s, -webkit-transform 0.5s 0.2s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.2s, transform 0.5s 0.2s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .tr:nth-child(5) {
      -webkit-transform: rotate(240deg) skewY(-30deg);
          -ms-transform: rotate(240deg) skewY(-30deg);
              transform: rotate(240deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(5) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(5) .content {
      -webkit-transform: rotate(-270deg);
          -ms-transform: rotate(-270deg);
              transform: rotate(-270deg);
      top: -8%;
      left: 6.67%;
      padding-left: 15%;
      -webkit-perspective-origin: 70% 50%;
              perspective-origin: 70% 50%;
    }
    
    .active .tr:nth-child(5) {
      -webkit-transform: rotate(240deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(240deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(240deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.25s, -webkit-transform 0.5s 0.25s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.25s, transform 0.5s 0.25s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .tr:nth-child(6) {
      -webkit-transform: rotate(300deg) skewY(-30deg);
          -ms-transform: rotate(300deg) skewY(-30deg);
              transform: rotate(300deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(6) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(6) .content {
      -webkit-transform: rotate(-330deg);
          -ms-transform: rotate(-330deg);
              transform: rotate(-330deg);
      -webkit-transform-origin: 106.7% 25.2%;
          -ms-transform-origin: 106.7% 25.2%;
              transform-origin: 106.7% 25.2%;
      padding-left: 30%;
      -webkit-perspective-origin: 70% 70%;
              perspective-origin: 70% 70%;
    }
    
    .active .tr:nth-child(6) {
      -webkit-transform: rotate(300deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(300deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(300deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.3s, -webkit-transform 0.5s 0.3s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.3s, transform 0.5s 0.3s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .tr:nth-child(7) {
      -webkit-transform: rotate(360deg) skewY(-30deg);
          -ms-transform: rotate(360deg) skewY(-30deg);
              transform: rotate(360deg) skewY(-30deg);
      -webkit-transition: opacity 0.5s, -webkit-transform 0.5s;
              transition: opacity 0.5s, transform 0.5s;
    }
    .tr:nth-child(7) .clip {
      -webkit-transform: skewY(30deg) rotate(30deg);
          -ms-transform: skewY(30deg) rotate(30deg);
              transform: skewY(30deg) rotate(30deg);
    }
    .tr:nth-child(7) .content {
      -webkit-transform: rotate(-390deg);
          -ms-transform: rotate(-390deg);
              transform: rotate(-390deg);
    }
    
    .active .tr:nth-child(7) {
      -webkit-transform: rotate(360deg) skewY(-30deg) translate(10%, -10%);
          -ms-transform: rotate(360deg) skewY(-30deg) translate(10%, -10%);
              transform: rotate(360deg) skewY(-30deg) translate(10%, -10%);
      -webkit-transition: opacity 0.5s 0.35s, -webkit-transform 0.5s 0.35s cubic-bezier(0, 2.3, 0.8, 1);
              transition: opacity 0.5s 0.35s, transform 0.5s 0.35s cubic-bezier(0, 2.3, 0.8, 1);
    }
    
    .clip {
      position: absolute;
      top: 0;
      left: 0;
      width: 116%;
      height: 86.66%;
      overflow: hidden;
      -webkit-transform-origin: 0 0;
          -ms-transform-origin: 0 0;
              transform-origin: 0 0;
    }
    
    .content {
      position: absolute;
      width: 86.6%;
      height: 116%;
      top: 0;
      left: 0;
      box-sizing: border-box;
      font-size: 2vmin;
      -webkit-perspective: 500px;
              perspective: 500px;
      background: #000;
    }
    .content img {
      position: absolute;
      top: 0;
      left: -50%;
      right: -50%;
      margin: auto;
      height: 100%;
      z-index: -1;
      -webkit-transition: opacity 0.3s;
              transition: opacity 0.3s;
      pointer-events: none;
    }
    .content h2, .content p {
      position: absolute;
      width: 60%;
      line-height: 1em;
      color: #fff;
      opacity: 0;
      -webkit-transform: translateZ(-50px);
              transform: translateZ(-50px);
    }
    .content h2 {
      bottom: 50%;
      text-transform: uppercase;
      font-weight: 900;
      font-size: 2em;
      -webkit-transition: -webkit-transform 0.3s cubic-bezier(0, 2.3, 0.8, 1), opacity 0.3s;
              transition: transform 0.3s cubic-bezier(0, 2.3, 0.8, 1), opacity 0.3s;
    }
    .content p {
      position: absolute;
      top: 50%;
      font-size: 1em;
      -webkit-transition: -webkit-transform 0.3s 0.075s cubic-bezier(0, 2.3, 0.8, 1), opacity 0.3s 0.075s;
              transition: transform 0.3s 0.075s cubic-bezier(0, 2.3, 0.8, 1), opacity 0.3s 0.075s;
    }
    .content:hover h2, .content:hover p {
      opacity: 1;
      -webkit-transform: translatez(0);
          -ms-transform: translatez(0);
              transform: translatez(0);
    }
    .content:hover img {
      opacity: 0.4;
    }
    
    .active #menuBtn:hover svg polygon {
      -webkit-animation: none;
              animation: none;
    }
    .active #menuBtn span {
      background-color: transparent;
    }
    .active #menuBtn span:before {
      -webkit-transform: translatey(8px) rotate(45deg);
          -ms-transform: translatey(8px) rotate(45deg);
              transform: translatey(8px) rotate(45deg);
    }
    .active #menuBtn span:after {
      -webkit-transform: translatey(-8px) rotate(-45deg);
          -ms-transform: translatey(-8px) rotate(-45deg);
              transform: translatey(-8px) rotate(-45deg);
    }
    .active #hex {
      -webkit-transform: scale(0.9) translatez(0);
          -ms-transform: scale(0.9) translatez(0);
              transform: scale(0.9) translatez(0);
      -webkit-transition: none;
              transition: none;
      will-change: transform;
    }
    .active .tr {
      opacity: 1;
      will-change: transform;
    }
    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,800' rel='stylesheet' type='text/css'>
    <nav id="hexNav">
      <div id="menuBtn">
        <svg viewbox="0 0 100 100">
          <polygon points="50 2 7 26 7 74 50 98 93 74 93 26" fill="none" stroke-width="4" stroke="#585247" stroke-dasharray="0,0,300"/>
        </svg>
        <span></span>
      </div>
      <ul id="hex">
        <li class="tr"><div class="clip"><a href="#" class="content">
          <img src="https://farm8.staticflickr.com/7435/13629508935_62a5ddf8ec_c.jpg" alt="" />
          <h2 class="title">Title</h2><p>Catch phrase</p>
        </a></div></li>
        <li class="tr"><div class="clip"><a href="#" class="content">
          <img src="https://farm3.staticflickr.com/2827/10384422264_d9c7299146.jpg" alt="" />
          <h2 class="title">Title</h2><p>Catch phrase</p>
        </a></div></li>
        <li class="tr"><div class="clip"><a href="#" class="content">
          <img src="https://farm7.staticflickr.com/6083/6055581292_d94c2d90e3.jpg" alt="" />
          <h2 class="title">Title</h2><p>Catch phrase</p>
        </a></div></li>
        <li class="tr"><div class="clip"><a href="#" class="content">
          <img src="https://farm7.staticflickr.com/6092/6227418584_d5883b0948.jpg" alt="" />
          <h2 class="title">Title</h2><p>Catch phrase</p>
        </a></div></li>
        <li class="tr"><div class="clip"><a href="#" class="content">
          <img src="https://farm8.staticflickr.com/7187/6895047173_d4b1a0d798.jpg" alt="" />
          <h2 class="title">Title</h2><p>Catch phrase</p>
        </a></div></li>
        <li class="tr"><div class="clip"><a href="#" class="content">
          <img src="https://farm4.staticflickr.com/3766/12953056854_b8cdf14f21.jpg" alt="" />
          <h2 class="title">Title</h2><p>Catch phrase</p>
        </a></div></li>
      </ul>
    </nav>

    来自 @web-tiki的CSS 动画六边形菜单答案的松散翻译。

    • 20
  2. Best Answer
    Sasha Omelchenko
    2020-01-31T23:37:01Z2020-01-31T23:37:01Z

    带有 CSS 变量的变体 + clip-path。这不是所有的功能,它只是一个草图,但我认为这个想法很清楚。

    UPD:添加了一个按钮并稍微调整了代码。

    document.querySelector('.menu__btn').addEventListener('click', () => {
      document.querySelector('.menu').classList.toggle('menu--open');
    });
    :root {
      --side: 200px;
      --a: 25% 5%;
      --b: 75% 5%;
      --c: 100% 50%;
      --d: 75% 95%;
      --e: 25% 95%;
      --f: 0% 50%;
      --g: 50% 50%;
      --x: 0;
      --y: 0;
      --coordAfter: 25px;
    }
    
    .menu {
      width: var(--side);
      height: var(--side);
      padding: 0;
      margin: 50px auto;
      position: relative;
    }
    
    .menu__list {
      padding: 0;
      margin: 0;
      list-style-type: none;
    }
    
    .menu__triangle {
      position: absolute;
      left: 0;
      top: 0;
      transition: transform .25s, opacity .25s;
      background-color: #d261ff;
      width: var(--side);
      height: var(--side);
      opacity: 0;
    }
    
    .menu__triangle:hover {
      background-color: #9c29c1;
    }
    
    .menu--open .menu__triangle {
      transform: translate3d(var(--x), var(--y), 0);
      opacity: 1;
    }
    
    .menu__btn {
      border: none;
      background: none;
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      margin: auto;
      background: #250031;
      clip-path: polygon(var(--a), var(--b), var(--c), var(--d), var(--e), var(--f));
      font-size: 0;
      width: calc(var(--side) / 6);
      height: calc(var(--side) / 6);
      z-index: 1;
      text-align: center;
    }
    
    .menu__btn:hover,
    .menu--open .menu__btn {
      background-color: #613175;
    }
    
    .menu__btn-dash {
      width: calc(var(--side) / 14.285);
      background-color: #fff;
      height: 2px;
      display: inline-block;
      vertical-align: middle;
      position: relative;
    }
    
    .menu__btn-dash:after {
      width: inherit;
      height: inherit;
      left: 0;
      top: 0;
      background-color: inherit;
      transform: rotate(90deg);
      transform-origin: 50% 50%;
      transition: transform .2s;
      position: absolute;
      content: ' ';
    }
    
    .menu--open .menu__btn-dash:after {
      transform: rotate(0);
    }
    
    .menu__1 {
      clip-path: polygon(var(--a), var(--b) , var(--g));
      --y: calc(var(--coordAfter) * -1);
    }
    
    .menu__2 {
      clip-path: polygon(var(--g), var(--b), var(--c));
      --y: calc(var(--coordAfter) * -1/2);
      --x: var(--coordAfter);
    }
    
    .menu__3 {
      clip-path: polygon(var(--g), var(--c), var(--d));
      --y: calc(var(--coordAfter) / 2);
      --x: var(--coordAfter);
    }
    
    .menu__4 {
      clip-path: polygon(var(--e), var(--g), var(--d));
      --y: var(--coordAfter);
    }
    
    .menu__5 {
      clip-path: polygon(var(--f), var(--g), var(--e));
      --x: calc(var(--coordAfter) * -1);
      --y: calc(var(--coordAfter) / 2);
    }
    
    .menu__6 {
      clip-path: polygon(var(--f), var(--a), var(--g));
      --x: calc(var(--coordAfter) * -1);
      --y: calc(var(--coordAfter) * -1/2);
    }
    <menu class="menu">
      <button class="menu__btn">
        <span class="menu__btn-dash">Toggle menu</span>
      </button>
      <ul class="menu__list">
        <li class="menu__triangle menu__1">1</li>
        <li class="menu__triangle menu__2">2</li>
        <li class="menu__triangle menu__3">3</li>
        <li class="menu__triangle menu__4">4</li>
        <li class="menu__triangle menu__5">5</li>
        <li class="menu__triangle menu__6">6</li>
      </ul>
    </menu>

    • 15

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5