使用伪元素创建HTML/CSS三角形

10
我正在尝试使用伪元素创建三角形状,就像下面图片中的那个。 enter image description here 但是我得到的结果是这样的。 enter image description here 以下是我尝试过的代码:
.container .form--container:before {
    content: "";
    position: absolute;
    top: 0px;
    left: 130px;
    width: 28px;
    height: 28px;
    transform: translate(-1rem, -100%);
    border-left: 1.5rem solid #979797;
    border-right: 1.5rem solid #979797;
    border-bottom: 1.5rem solid white;
}
1个回答

12
问题出在使用边框上。您可以查看此链接CSS三角形是如何工作的?,您将了解边框的工作原理以及为什么会得到此输出。
另一种解决方法是使用旋转边框,如下所示:

.box {
  border: 1px solid;
  margin: 50px;
  height: 50px;
  position:relative;
  background: #f2f2f5;
}

.box:before {
  content: "";
  position: absolute;
  width: 20px;
  height: 20px;
  border-top: 1px solid;
  border-left: 1px solid;
  top: -11px;
  left: 13px;
  background: #f2f2f5;
  transform: rotate(45deg);
}
<div class="box">

</div>

如果您希望箭头的框是透明的,这里有另一个技巧可以实现它(因为上面的解决方案将实心颜色视为背景):

body {
 margin:0;
 background-image:linear-gradient(to right,yellow,pink);
}

.box {
  border: 1px solid;
  border-top:transparent; /*make border-top transparent*/
  margin: 50px;
  height: 50px;
  position:relative;
  /* Use gradient to mimic the border top with a transparent gap */
  background:linear-gradient(to right,black 10px,transparent 10px,transparent 39px,black 39px) top/100% 1px no-repeat;
}

.box:before {
  content: "";
  position: absolute;
  width: 20px;
  height: 20px;
  border-top: 1px solid ;
  border-left: 1px solid;
  top: -11px;
  left: 14px;
  transform: rotate(45deg);
}
<div class="box">

</div>

这是另一个带虚线边框的版本:

body {
 margin:0;
 background-image:linear-gradient(to right,yellow,pink);
}

.box {
  border: 1px dashed;
  border-top:transparent; /*make border-top transparent*/
  margin: 50px;
  height: 50px;
  position:relative;
  background:
   repeating-linear-gradient(to right,black 0,black 3px,transparent 3px,transparent 6px) top left/10px 1px,
   repeating-linear-gradient(to right,black 0,black 3px,transparent 3px,transparent 6px) top right/calc(100% - 40px) 1px;
  background-repeat:no-repeat;
}

.box:before {
  content: "";
  position: absolute;
  width: 20px;
  height: 20px;
  border-top: 1px dashed;
  border-left: 1px dashed;
  top: -11px;
  left: 13px;
  transform: rotate(45deg);
}
<div class="box">

</div>


理论上也可以使用clip-path完成吗?像这样:clip-path: polygon(0 100%,0 40%,10% 40%,15% 0,20% 40%,100% 40%,100% 100%);或者会引起问题吗? - GucciBananaKing99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接