" /> " /> "/>

Replace fontawesome icons with SVG icons

517 views Asked by At

I want to replace the Fontawesome icons from this template. Full HTML is here but I just want to replace this icon with an SVG.

Icon to replace

            <div class="col-md-4">
                <span class="fa-stack fa-4x">
                    <i class="fas fa-circle fa-stack-2x text-primary"></i>
                    <i class="fas fa-shopping-cart fa-stack-1x fa-inverse"></i>
                </span>
                <h4 class="my-3">E-Commerce</h4>
                <p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
            </div>

I tried to replace it with the simple SVG representing number 5 sourced here. I don't understand what fa-stack and other Fontawesome code does, so I am struggling to replace it.

Any idea on how to replace the Fontawesome logo for a SVG?

                <div class="col-md-4">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="96" height="96" class="text-primary">
                        <g clip-path="url(#clip0_429_10989)">
                            <circle cx="12" cy="12" r="9" stroke="#292929" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
                            <path d="M9.5 16.2361C10.0308 16.7111 10.7316 17 11.5 17C13.1569 17 14.5 15.6569 14.5 14C14.5 12.3431 13.1569 11 11.5 11C10.7316 11 10.0308 11.2889 9.5 11.7639L10.5 7H14.5" stroke="#292929" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
                            </g>
                            <defs>
                            <clipPath id="clip0_429_10989">
                            <rect width="24" height="24" fill="white"/>
                            </clipPath>
                            </defs>
                    </svg>
1

There are 1 answers

3
herrstrietzel On BEST ANSWER

FontAwesome "fa-classes"

Most fa- prefixed classes are used for selecting different icons e.g fa-shopping-cart add shopping-cart icon.
Some of them are used for resizing/scaling the icon e.g fa-stack-2x

Icon's viewBox must match the icon's bounding box

In your example you've copied the fontAwesome viewBox 512x512.

But your new icon has an intrinsic size of ~ 21x21 SVG user units.
So by increasing the viewBox you add additional whitespace around your icon.
See also Css-tricks: "6 Common SVG Fails (and How to Fix Them)"

You can get a tight/minimum viewBox via getBBox()

let bb = svg.getBBox();
let {x,y, width, height} = bb;
console.log('tight viewBox- we need to add stroke-width!',x,y, width, height);
svg {
  border: 1px solid #ccc;
}

.text-primary{
color: orange
}
<h3>Wrong viewBox</h3>
<svg id="svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="96" height="96" class="text-primary">
                        <g clip-path="url(#clip0_429_10989)">
                            <circle cx="12" cy="12" r="9" stroke="#292929" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
                            <path d="M9.5 16.2361C10.0308 16.7111 10.7316 17 11.5 17C13.1569 17 14.5 15.6569 14.5 14C14.5 12.3431 13.1569 11 11.5 11C10.7316 11 10.0308 11.2889 9.5 11.7639L10.5 7H14.5" stroke="#292929" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/>
                            </g>
                            <defs>
                            <clipPath id="clip0_429_10989">
                            <rect width="24" height="24" fill="white"/>
                            </clipPath>
                            </defs>
                    </svg>
                    
<h3>Optimized svg</h3>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="1.75 1.75 20.5 20.5" width="96" height="96" class="text-primary">
<circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
<path d="M9.5 16.2361C10.0308 16.7111 10.7316 17 11.5 17C13.1569 17 14.5 15.6569 14.5 14C14.5 12.3431 13.1569 11 11.5 11C10.7316 11 10.0308 11.2889 9.5 11.7639L10.5 7H14.5" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" fill="none" stroke-linejoin="round"/>
</svg>

Besides, you need to replace replace specific stroke colors with currentColor value – this way the icon can inherit the parent's text color for strokes and fills.

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/StartBootstrap/startbootstrap-agency@master/dist/css/styles.css">
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>

<section class="page-section" id="services">
  <div class="container">
    <div class="text-center">
      <h2 class="section-heading text-uppercase">Services</h2>
      <h3 class="section-subheading text-muted">Lorem ipsum dolor sit amet consectetur.</h3>
    </div>
    <div class="row text-center">
      <div class="col-md-4">
        <span class="fa-stack fa-4x">
          <svg  class="svg-inline--fa fa-stack-2x text-primary" viewBox="1.75 1.75 20.5 20.5" xmlns="http://www.w3.org/2000/svg">
            <circle cx="12" cy="12" r="9" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" />
            <path d="M9.5 16.2361C10.0308 16.7111 10.7316 17 11.5 17C13.1569 17 14.5 15.6569 14.5 14C14.5 12.3431 13.1569 11 11.5 11C10.7316 11 10.0308 11.2889 9.5 11.7639L10.5 7H14.5" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" />
          </svg>
        </span>
        <h4 class="my-3">E-Commerce</h4>
        <p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
      </div>

      <div class="col-md-4">
        <span class="fa-stack fa-4x">
          <i class="fas fa-circle fa-stack-2x text-primary"></i>
          <i class="fas fa-lock fa-stack-1x fa-inverse"></i>
        </span>
        <h4 class="my-3">Web Security</h4>
        <p class="text-muted">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima maxime quam architecto quo inventore harum ex magni, dicta impedit.</p>
      </div>
    </div>
  </div>
</section>