JSFiddle - React, Tailwind, and code Playground

HTML

<script src="//code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<!doctype html>
<html>
  <head>
    <script src="https://kit.fontawesome.com/d9119a56d2.js"></script>
  </head>

  <body>

<p>

<button><span class='xbtn'>
    <i class="fas fa-lightbulb"></i>
    <label>Nice lightbulb!</label>
</span></button>

<button><span class='xbtn'>
    <i class="fas fa-address-book"></i>
    <label>Adress Book</label>
</span></button>

<button><span class='xbtn'>
    <i class="fas fa-bell"></i>
    <label>Bell</label>
</span></button>

</p>


</body>
</html>

CSS

body {
  padding: 5em;
}

.xbtn {
  display: block;
  padding: 5px;
  font-size: 36px;
  width: 64px;
}
.xbtn:hover {
  min-width: 64px;
  width: auto;
}
.xbtn label {
  display: block;
  margin: 0 auto;
  overflow: hidden;
  font-size: 14px;
  white-space: nowrap;
  transform: scale(0);
}
.xbtn:hover label {
  transform: scale(1);
  transition: 0.5s ease;
}