Search code examples
htmlcsssvgwhitespaceremoving-whitespace

How to have pointer events apply on the circle inside the path?


How would that be fixed in the code so that the white space is removed?

https://jsfiddle.net/k14svx2q/

How would I be able to remove the white space from the code?

Is there a way to fix or adjust that so there is no white space?

Pointer events should only apply on the "circle" inside the path.

.exit {
  top: auto;
  bottom: -47.63px;
  margin: auto;
  right: 0;
  left: 0;
  width: 47.63px;
  height: 47.63px;
  cursor: pointer;
  border: none;
  background: none;
  padding: 0;
  border-radius: 50%;
  animation: fadeInExit 2s forwards 0s;
  opacity: 0;
  pointer-events: none;
}

@keyframes fadeInExit {
  99% {
    pointer-events: none;
  }

  100% {
    pointer-events: initial;
    opacity: 1;
  }
}

.exit:hover .exitHover {
  fill: green;
}
      <button class="exit" type="button" aria-label="Close">
        <svg width="100%" height="100%" viewBox="-144 -144 288 288">
          <g id="exit">
            <title>exit</title>
            <path class="exitHover" d="m-143 0a143 143 0 1 1 286 0 143 143 0 0 1 -286 0m128-112a113 113 0 0 0 -97 97h97zm-97 127a113 113 0 0 0 97 97v-97zm127 97a113 113 0 0 0 97 -97h-97zm97-127a113 113 0 0 0 -97 -97v97z" transform="rotate(45)" fill="red" />
          </g>
        </svg>
      </button>

I was recommended to do this:

<circle cx="0" cy="0" r="144" fill="transparent" />

But that did not work: https://jsfiddle.net/vnghab8k/

.exit {
  top: auto;
  bottom: -47.63px;
  margin: auto;
  right: 0;
  left: 0;
  width: 47.63px;
  height: 47.63px;
  cursor: pointer;
  border: none;
  background: none;
  padding: 0;
  border-radius: 50%;
  animation: fadeInExit 2s forwards 0s;
  opacity: 0;
  pointer-events: none;
}

@keyframes fadeInExit {
  99% {
    pointer-events: none;
  }

  100% {
    pointer-events: initial;
    opacity: 1;
  }
}

.exit:hover .exitHover {
  fill: green;
  cursor: pointer;
}
      <button class="exit" type="button" aria-label="Close">
        <svg width="100%" height="100%" viewBox="-144 -144 288 288">
          <g id="exit">
            <title>exit</title>

            <circle cx="0" cy="0" r="144" fill="transparent" />
            <path class="exitHover" d="m-143 0a143 143 0 1 1 286 0 143 143 0 0 1 -286 0m128-112a113 113 0 0 0 -97 97h97zm-97 127a113 113 0 0 0 97 97v-97zm127 97a113 113 0 0 0 97 -97h-97zm97-127a113 113 0 0 0 -97 -97v97z" transform="rotate(45)" fill="red" />
          </g>
        </svg>
      </button>


Solution

  • A way to make the area outside the circle non-hoverable is to clip the parent into a circle using clip-path:

    .exit {
      top: auto;
      bottom: -47.63px;
      margin: auto;
      right: 0;
      left: 0;
      width: 47.63px;
      height: 47.63px;
      cursor: pointer;
      border: none;
      background: none;
      padding: 0;
      border-radius: 50%;
      animation: fadeInExit 2s forwards 0s;
      opacity: 0;
      pointer-events: none;
       clip-path: circle(50%);
    }
    
    @keyframes fadeInExit {
      99% {
        pointer-events: none;
      }
    
      100% {
        pointer-events: initial;
        opacity: 1;
      }
    }
    
    .exit:hover .exitHover {
      fill: green;
    }
          <button class="exit" type="button" aria-label="Close">
            <svg width="100%" height="100%" viewBox="-144 -144 288 288">
              <g id="exit">
                <title>exit</title>
                <path class="exitHover" d="m-143 0a143 143 0 1 1 286 0 143 143 0 0 1 -286 0m128-112a113 113 0 0 0 -97 97h97zm-97 127a113 113 0 0 0 97 97v-97zm127 97a113 113 0 0 0 97 -97h-97zm97-127a113 113 0 0 0 -97 -97v97z" transform="rotate(45)" fill="red" />
              </g>
            </svg>
          </button>