How to triangle top and bottom border?

前端 未结 4 937
误落风尘
误落风尘 2021-01-20 10:06

As you can see in the image below, I am trying to warp or triangle my div from bottom and top, but I have no idea how to do it. I just tried a couple of times to do it, but

4条回答
  •  悲哀的现实
    2021-01-20 10:42

    An idea using transformation and perspective where you will have the border, border-radius also the gradient:

    body {
      background: lightblue;
    }
    
    .block {
      overflow: hidden;
      width: 300px;
      height: 200px;
      margin: 20px;
      position: relative;
      z-index:0;
    }
    
    .block::before,
    .block::after {
      content: "";
      position: absolute;
      z-index:-1;
      border: 1px solid #fff;
      top: 0;
      bottom: 0;
      width: 50%;
      background-image: linear-gradient(to right, #314b56, #283b44, #1f2c32, #161e21, #0a0f11);
      background-size: 200% 100%;
    }
    
    .block::before {
      left: 0;
      border-right: 0;
      border-radius: 15px 0 0 15px;
      transform-origin: right;
      transform: perspective(100px) rotateY(-5deg);
    }
    
    .block::after {
      right: 0;
      border-left: 0;
      border-radius: 0 15px 15px 0;
      transform-origin: left;
      transform: perspective(100px) rotateY(5deg);
      background-position: right;
    }

    You can also add the shadow and easily change the gradient:

    body {
      background: lightblue;
    }
    
    .block {
      overflow: hidden;
      width: 300px;
      height: 200px;
      margin: 20px;
      position: relative;
      z-index:0;
      filter:drop-shadow(0 0 5px #000);
    }
    
    .block::before,
    .block::after {
      content: "";
      position: absolute;
      z-index:-1;
      border: 1px solid #fff;
      top: 0;
      bottom: 0;
      width: 50%;
      background-image: linear-gradient(35deg, blue, red);
      background-size: 200% 100%;
    }
    
    .block::before {
      left: 0;
      border-right: 0;
      border-radius: 15px 0 0 15px;
      transform-origin: right;
      transform: perspective(100px) rotateY(-5deg);
    }
    
    .block::after {
      right: 0;
      border-left: 0;
      border-radius: 0 15px 15px 0;
      transform-origin: left;
      transform: perspective(100px) rotateY(5deg);
      background-position: right;
    }

提交回复
热议问题