给带有顶部三角形的 div 添加边框

8

我想给上方有三角形的 div 添加边框

问题在于边框未被应用到三角形部分

body {
  background-color: #F3F5F6;
}
.info-panel {
  display: block;
  position: relative;
  background: #FFFFFF;
  padding: 15px;
  border: 1px solid #DDDDDD;
  margin-top: 20px;
}
.info-panel:after {
  content: '';
  display: block;
  position: absolute;
  left: 20px;
  bottom: 100%;
  width: 0;
  height: 0;
  border-bottom: 10px solid #FFFFFF;
  border-top: 10px solid transparent;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
}
<div class="info-panel">
  Testing
</div>

我不想添加CSS盒子阴影。

我需要一个边框。


jsFiddle

3个回答

21

实际上,“三角形部分”本身就是一个边框,这就是为什么你不能对它应用CSS边框的原因,但是有一个变通方法。

使用:before伪元素创建另一个比第一个三角形更大的三角形,并将你的边框颜色应用于它。

.info-panel {
  display: block;
  position: relative;
  background: #FFFFFF;
  padding: 15px;
  border: 1px solid #DDDDDD;
  margin-top: 20px;
}
.info-panel:before, .info-panel:after {
  content: '';
  display: block;
  position: absolute;
  bottom: 100%;
  width: 0;
  height: 0;
}
.info-panel:before {
  left: 19px;
  border: 11px solid transparent;
  border-bottom-color: #ddd;
}
.info-panel:after {
  left: 20px;
  border: 10px solid transparent;
  border-bottom-color: #fff;
}
<div class="info-panel">
  Testing
</div>


非常感谢,很好地解决了问题。 - Jordyn

1
你可以使用fontAwesome来实现这一点。请参考我的示例并根据需要进行调整。

.info-panel {
     display: block;
     position: relative;
     background: #FFFFFF;
     padding: 15px;
     border:1px solid #DDDDDD;
     margin-top:20px;
    }
   
    .info-panel:after, .info-panel:before {
     content: '\f0d8';
      font-family: fontAwesome;
     display: block;  
     position: absolute;
      font-size: 36px;
     left: 20px;
     bottom: 100%;
      top: -22px;
     width: 0;
     height: 0;
      color: #ccc; /* should be your desired border color */
    
    }
    
  .info-panel:before {
    color: white;
    z-index: 2;
    top: -21px;
    }
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="info-panel">
    Testing
</div>


1

只需将此内容去掉

.info-panel:after {
    border-bottom-color: #FFFFFF;
}

它覆盖了其上的绿色边框。

检查这个片段

.info-panel {
  display: block;
  position: relative;
  background: #FFFFFF;
  padding: 15px;
  border: 1px solid #DDDDDD;
  margin-top: 20px;
}
.info-panel:before {
  border: 1px solid #DDDDDD;
}
.info-panel:after {
  content: '';
  display: block;
  position: absolute;
  left: 20px;
  bottom: 100%;
  width: 0;
  height: 0;
  border-bottom: 10px solid green;
  border-top: 10px solid transparent;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
}
<div class="info-panel">
  Testing
</div>

希望它有所帮助。

对不起,那是我的错误,但我真正想要的是我的灰色边框围绕三角形,就像其他部分一样。 - Jordyn

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