Search code examples
htmlcsslayoutflexbox

How to align svg icon inside a button in HTML/CSS?


I am trying to put the svg icon inside the faq button. Can i use only flex box to align the icon inside the button?

This is my output: This is my output:

And this what i want to achieve: And this what i want to achieve

This is some of my css:

.section-custom{
margin: 50px;
display: flex;
flex-direction: column;
align-items: center;  /*cross axis for column  */
}

  
.div-faq{
padding-top: 40px;
padding-bottom: 40px;

}

 
.div-faq-list-item{
display: flex;
align-items: center;  /*cross axis for row   */
}

.faq-btn{
background-color: #333;
font-size: 25px;
border: 0;
width: 800px;
padding: 22px;
margin: 4px;
text-align: left;
}

And this is the HTML:

<section class="section-custom">
            <h1>Frequently Asked Questions</h1>

            <ul class="div-faq">
                <li class="div-faq-list-item">
                    <button class="faq-btn">What is Netflix?
                     </button>
                     <svg style="height: 50px; width: 50px; color: rgb(255, 255, 255);" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"><rect width="100%" height="100%" fill="#333333"></rect> 
                        <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" fill="#ffffff"></path>
                     </svg>
                </li>
                <li class="div-faq-list-item"><button class="faq-btn">How much does Netflix cost?</button>
                    
                </li>
                <li class="div-faq-list-item"><button class="faq-btn">Where can I watch?</button></li>
                <li><button class="faq-btn">How do i cancel?</button></li>
                <li><button class="faq-btn">What can I watch on Netflix?</button></li>
                <li><button class="faq-btn">is Netflix good for kids?</button></li>

            </ul>

        </section>

Solution

  • Remove the fill property from the SVG icon and also make the button and SVG background transparent. In-display flex you can achieve this result by justify-content:space-between;

    ul{
      list-style:none;
      display:flex;
      flex-direction:column;
      gap:0.6rem;
      background-color:black;
      padding:1rem;
    }
    ul li{
      display:flex;
      padding:1rem;
      background-color:#2e2e2e;
      color:white;
      justify-content:space-between;
      align-items:center
      
    }
    li svg{
      fill:transparent;
    }
    button{
      font-size:1.6rem;
      background-color:transparent;
      color:white;
      border:none;
    }
    <ul class="div-faq">
        <li class="div-faq-list-item">
          <button class="faq-btn">What is Netflix?</button>
           <svg style="height: 50px; width: 50px; color: rgb(255, 255, 255);" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"><rect width="100%" height="100%" ></rect> 
           <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" fill="#ffffff"></path>
           </svg>
         </li>
         <li class="div-faq-list-item">
          <button>How much does Netflix cost?</button>
          <svg style="height: 50px; width: 50px; color: rgb(255, 255, 255);" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-plus" viewBox="0 0 16 16"><rect width="100%" height="100%" ></rect> 
          <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" fill="#ffffff"></path>
          </svg>
        </li>
    
    
    
     </ul>