CSS 丝带形状效果

CSS 丝带形状效果如图:

CSS 丝带形状效果_第1张图片

通过CSS创建折叠丝带形状

这里代码应该比较清晰易懂,clip-path 的值应该也容易理解。要注意的是,我们使用了 color-mix()
函数,这个属性允许创建主颜色的深色版本。现在如果我们将元素旋转相反的方向,就会得到旋转的 CSS 丝带形状。

完整代码

DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CSS 丝带形状title>
  <style>
    @property --a {
      syntax: "";
      initial-value: 0deg;
      inherits: true;
    }

    h1 {
      --r: 30px;
      --a: 15deg;
      --c: #384cff;
      line-height: 1.6;
      padding-inline: .5lh;
      color: #fff;
      background:
        linear-gradient(calc(90deg + var(--a)),
          #0000 calc(1lh*sin(var(--a)) - 1px),
          var(--c) calc(1lh*sin(var(--a))) calc(100% - 1lh*sin(var(--a))),
          #0000 calc(100% - 1lh*sin(var(--a)) + 1px));
      position: relative;
      rotate: calc(-1*var(--a));
      transform-style: preserve-3d;
      transition: --a .5s;
      cursor: pointer;
      white-space: nowrap;
    }

    h1.alt {
      --c: #beb100;
      rotate: var(--a);
      background:
        linear-gradient(calc(90deg - var(--a)),
          #0000 calc(1lh*sin(var(--a)) - 1px),
          var(--c) calc(1lh*sin(var(--a))) calc(100% - 1lh*sin(var(--a))),
          #0000 calc(100% - 1lh*sin(var(--a)) + 1px));
    }

    h1:before,
    h1:after {
      content: "";
      position: absolute;
      transform: translate3d(0, 0, -1px);
      rotate: var(--a);
      height: calc(1lh/cos(var(--a)));
      width: calc(100%*cos(var(--a)) - 1lh*sin(var(--a)));
      background: color-mix(in srgb, var(--c), #000 40%);
      pointer-events: none;
    }

    h1.alt:before,
    h1.alt:after {
      rotate: calc(-1*var(--a));
    }

    h1:before {
      right: 0;
      top: 0;
      transform-origin: top right;
      clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%, var(--r) 50%);
    }

    h1.alt:before {
      bottom: 0;
      top: auto;
      transform-origin: bottom right;
    }

    h1:after {
      left: 0;
      bottom: 0;
      transform-origin: bottom left;
      clip-path: polygon(0 0, 100% 0, calc(100% - var(--r)) 50%, 100% 100%, 0 100%);
    }

    h1.alt:after {
      top: 0;
      bottom: auto;
      transform-origin: top left;
    }

    h1:hover {
      --a: 0deg;
    }

    @supports not (height:1lh) {
      h1 {
        padding-inline: .8em;
        background:
          linear-gradient(calc(90deg + var(--a)),
            #0000 calc(1.6em*sin(var(--a)) - 1px),
            var(--c) calc(1.6em*sin(var(--a))) calc(100% - 1.6em*sin(var(--a))),
            #0000 calc(100% - 1.6em*sin(var(--a)) + 1px));
      }

      h1.alt {
        background:
          linear-gradient(calc(90deg - var(--a)),
            #0000 calc(1.6em*sin(var(--a)) - 1px),
            var(--c) calc(1.6em*sin(var(--a))) calc(100% - 1.6em*sin(var(--a))),
            #0000 calc(100% - 1.6em*sin(var(--a)) + 1px));
      }

      h1:before,
      h1:after {
        height: calc(1.6em/cos(var(--a)));
        width: calc(100%*cos(var(--a)) - 1.6em*sin(var(--a)));
      }
    }


    body {
      margin: 0;
      min-height: 100vh;
      display: grid;
      place-content: center;
      grid-auto-flow: column;
      gap: 50px;
    }

    h1 {
      font-family: sans-serif;
      text-transform: uppercase;
      font-size: 2.5rem;
    }
  style>
head>

<body>
  <h1>I am a DHlsph1>
  <h1 class="alt">I am a gridAuthh1>
body>

html>

你可能感兴趣的:(html,css,前端)