Search code examples
htmlcssbox-shadow

CSS Triangles and box-shadows


I got the below image done with CSS:

introducir la descripción de la imagen aquí

As you can see, the triangle has a gap that cuts the box-shadow from the tooltip.

The code is the following:

/* Generated by less 2.5.1 */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
/* Demo of the tool-tip CSS */
.tooltip {
  text-decoration: underline;
  color: #37b9b5;
  cursor: default;
}
.tooltip-bubble {
  position: absolute;
  z-index: 1;
  padding: 5px 10px;
  color: #fff;
  width: auto;
  box-shadow: 7px 7px 11px 0px rgba(112, 111, 111, 0.3);
  background-color: transparent;
  border-radius: 10px;
}
.tooltip-bubble div {
  position: relative;
  z-index: 1;
  font-size: 12px;
}
.tooltip-bubble::before {
  position: absolute;
  content: '';
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: #706f6f;
  border-radius: 10px;
}
.tooltip-bubble .arrow {
  content: '';
  display: block;
  position: absolute;
  top: 100%;
  left: 50%;
  width: 0px;
  height: 0px;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
  transform: translate(-50%, 0);
  box-shadow: 7px 7px 11px 0px rgba(112, 111, 111, 0.3);
}
.tooltip-bubble .arrow.up {
  top: -10px;
  border-bottom: 10px solid #706f6f;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
}
.tooltip-bubble .arrow.down {
  border-top: 10px solid #706f6f;
  border-left: 10px solid transparent;
  border-right: 10px solid transparent;
}
<div class="tooltip-bubble"><div>Tutorial de uso</div><div class="arrow down"></div></div>

I tried transparent background colors, but it's not working.


Solution

  • A slightly different approach and I've only done it for the down arrow.

    Instead of making a triangle using CSS, I created a square and rotated it by 45 degrees. The only drawback I can think of with this approach is that the tooltip bubble will need to have a height equal to or greater than half the width of the arrow.

    You may also want to change the shadow on the arrow to be on the right of the square, rather than bottom right, so that it works after rotation.

    * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    /* Demo of the tool-tip CSS */
    .tooltip {
      text-decoration: underline;
      color: #37b9b5;
      cursor: default;
    }
    .tooltip-bubble {
      position: absolute;
      z-index: 1;
      padding: 5px 10px;
      color: #fff;
      width: auto;
      box-shadow: 7px 7px 11px 0px rgba(112, 111, 111, 0.3);
      background-color: transparent;
      border-radius: 10px;
    }
    .tooltip-bubble div {
      position: relative;
      z-index: 1;
      font-size: 12px;
    }
    .tooltip-bubble::before {
      position: absolute;
      content: '';
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: #706f6f;
      border-radius: 10px;
    }
    .tooltip-bubble .arrow {
      background-color: #706f6f;
      content: '';
      display: block;
      position: absolute;
      left: 50%;
      height: 10px;
      width: 10px;
      transform: translate(-50%, 0) rotate(45deg);
      box-shadow: 7px 7px 11px 0px rgba(112, 111, 111, 0.3);
    }
    .tooltip-bubble .arrow.down {
      margin-top: -5px;
      top: 100%;
    }
    <div class="tooltip-bubble"><div>Tutorial de uso</div><div class="arrow down"></div></div>