带边框的CSS箭头添加框阴影

时间:2017-05-09 07:30:58

标签: html css css3

我有一个带箭头和箭头边框的工具提示,但是我需要箭头来获取工具提示的方框阴影我该怎么做?

我需要一个跨浏览器的解决方案。我不能使用CSS过滤器。

.tooltip {
  position: absolute;
}

.arrow_box {
  position: relative;
  background-color: #fff;
  border: 1px solid lightgrey;
  border-radius: 2px;
  padding: 12px;
  box-shadow: 1px 1.5px 4px 0px rgba(170, 174, 181, 0.45);
  -webkit-transform: translateX(6px);
          transform: translateX(6px);
}

.arrow_box:after, .arrow_box:before {
  right: 100%;
  top: 50%;
  border: solid transparent;
  content: " ";
  height: 0;
  width: 0;
  position: absolute;
  pointer-events: none;
}

.arrow_box:after {
  border-color: rgba(255, 255, 255, 0);
  border-right-color: #fff;
  border-width: 6px;
  margin-top: -6px;
}

.arrow_box:before {
  border-color: rgba(211, 211, 211, 0);
  border-right-color: #d3d3d3;
  border-width: 7px;
  margin-top: -7px;
}
<div class="tooltip">
 <div class="arrow_box">
  <p>tooltip</p>
 </div>
</div>

2 个答案:

答案 0 :(得分:4)

您的问题的解决方案可以解决,就像这里发布的那个: https://codepen.io/ryanmcnz/pen/JDLhu

基本上:
1.创建一个正方形(:: after),旋转它并添加框阴影 2.创建第二个方块(:: before),它与在气球内部铸造的盒子阴影重叠。

&#13;
&#13;
body {
  background-color: #fff;
}

.triangle {
  position: relative;
  margin: 3em;
  padding: 1em;
  box-sizing: border-box;
  background: #fff;
  border: 1px solid #fafafa;
  box-shadow: 0px 3px 3px 0 rgba(0, 0, 0, 0.4);
}
.triangle::after{
    z-index: -10;
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    margin-left: 0;
    bottom: 0;
    top: calc(50% - 5px);
    left:0;
    box-sizing: border-box;
    
    border: 5px solid #fff;
    border-color: transparent transparent #fff #fff;
    
    transform-origin: 0 0;
    transform: rotate(45deg);
    
    box-shadow: 0 3px 3px 0 rgba(0, 0, 0, 0.4);
  }
.triangle::before{
    z-index: 10;
    content: "";
    position: absolute;
    width: 0;
    height: 0;
    margin-left: 0;
    bottom: 0;
    top: calc(50% - 5px);
    left:0;
    box-sizing: border-box;
    
    border: 5px solid black;
    border-color: transparent transparent #fff #fff;
    
    transform-origin: 0 0;
    transform: rotate(45deg);
  }
&#13;
<div class="triangle">This is a CSS3 triangle with a proper box-shadow!</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

前几天我偶然发现了这个,以为我会把这个留在这里。我的解决方案是单个元素,仅使用伪website.com/home元素之一并利用:before

clip-path
:root {
  --shadowSize: 20px;
  --shadowColor: #f00;
}

.box {
  position: relative;
  width: 300px;
  padding: 20px;
  box-shadow: 0 0 var(--shadowSize) var(--shadowColor);
  background-color: #fff;
  border-radius: 4px;
}

.box:before {
  content: "";
  position: absolute;
  top: 50%;
  right: 0;
  width: 30px;
  height: 30px;
  background-color: #fff;
  box-shadow: 0 0 var(--shadowSize) var(--shadowColor);
  transform: translate(50%, -50%) rotate(45deg);
  clip-path: polygon(
    calc(var(--shadowSize) * -1) calc(var(--shadowSize) * -1), 
    calc(100% + var(--shadowSize)) calc(var(--shadowSize) * -1), 
    calc(100% + var(--shadowSize)) calc(100% + var(--shadowSize))
  );
}

如果要将箭头放在框的另一侧,则必须调整<div class="box">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Officia excepturi et unde soluta accusamus dolorum. Architecto, a laborum. Unde impedit aliquam voluptatibus sed dignissimos mollitia nihil consectetur dolores accusamus recusandae?</div>元素的clip-path或旋转度。如果您想使用:before偏移量,还必须调整CSS,它目前仅在计算其实际大小。

使用SCSS的示例:https://codepen.io/MyXoToD/pen/gOMvYOx