<svg xmlns="http://www.w3.org/2000/svg">
  
  <!-- filterUnits is required to prevent clipping the blur outside the viewBox -->
  
    <filter id="motion-blur-filter" filterUnits="userSpaceOnUse">
      
      <!-- We only want horizontal blurring. x: 100, y: 0 -->
      
        <feGaussianBlur stdDeviation="100 0"></feGaussianBlur>
    </filter>
</svg>

<!-- We use a custom attribute to set the text that the pseudo element should display and blur. In this case, we use the first character of the word. -->

<span filter-content="S">Swoosh</span>
  
/* We’ll set some colors and center everything. */

body {
  background: #4c268f;
  color: #99eeb4;
  height: 100vh;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
}

/* We set the position to relative so that we can stack a blurred pseudo element on top of the original text */

span {
  position: relative;
  font-family: "Avenir Next", sans-serif;
  font-weight: 900;
  font-size: 64px;
  text-transform: uppercase;
  font-style: italic;
  letter-spacing: 0.05em;
  display: inline-block;
}

/* We create a pseudo element and blur it using the SVG filter. We’ll grab the content from the custom HTML attribute. */

span:before {
  position: absolute;
  left: 0;
  top: 0;
  content: attr(filter-content);

  filter: url(#motion-blur-filter);
}

/* We hide the SVG filter element from the DOM as it would take up some space */

svg {
  display: none;
}
View Compiled

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js