FAB with Pure CSS3
Efeito de FAB (Float Action Button) com CSS3 puro.
by Rodrigo Portillo
HTML
<div class="fab">
<button class="main">
</button>
<ul>
<li>
<label for="opcao1">Opção 1</label>
<button id="opcao1">
⎈
</button>
</li>
<li>
<label for="opcao2">Opção 2</label>
<button id="opcao2">
⎗
</button>
</li>
<li>
<label for="opcao3">Opção 3</label>
<button id="opcao3">
☏
</button>
</li>
</ul>
</div>
CSS
body{
font-family: sans-serif;
}
.fab{
position: fixed;
bottom:10px;
right:10px;
}
.fab button{
cursor: pointer;
width: 48px;
height: 48px;
border-radius: 30px;
background-color: #cb60b3;
border: none;
box-shadow: 0 1px 5px rgba(0,0,0,.4);
font-size: 24px;
color: white;
-webkit-transition: .2s ease-out;
-moz-transition: .2s ease-out;
transition: .2s ease-out;
}
.fab button:focus{
outline: none;
}
.fab button.main{
position: absolute;
width: 60px;
height: 60px;
border-radius: 30px;
background-color: #5b19b7;
right: 0;
bottom: 0;
z-index: 20;
}
.fab button.main:before{
content: '⏚';
}
.fab ul{
position:absolute;
bottom: 0;
right: 0;
padding:0;
padding-right:5px;
margin:0;
list-style:none;
z-index:10;
-webkit-transition: .2s ease-out;
-moz-transition: .2s ease-out;
transition: .2s ease-out;
}
.fab ul li{
display: flex;
justify-content: flex-start;
position: relative;
margin-bottom: -10%;
opacity: 0;
-webkit-transition: .3s ease-out;
-moz-transition: .3s ease-out;
transition: .3s ease-out;
}
.fab ul li label{
margin-right:10px;
white-space: nowrap;
display: block;
margin-top: 10px;
padding: 5px 8px;
background-color: white;
box-shadow: 0 1px 3px rgba(0,0,0,.2);
border-radius:3px;
height: 18px;
font-size: 16px;
pointer-events: none;
opacity:0;
-webkit-transition: .2s ease-out;
-moz-transition: .2s ease-out;
transition: .2s ease-out;
}
.fab.show button.main,
.fab.show button.main{
outline: none;
background-color: #7716ff;
box-shadow: 0 3px 8px rgba(0,0,0,.5);
}
.fab.show button.main:before,
.fab.show button.main:before{
content: '↑';
}
.fab.show button.main + ul,
.fab.show button.main + ul{
bottom: 70px;
}
.fab.show button.main + ul li,
.fab.show button.main + ul li{
margin-bottom: 10px;
opacity: 1;
}
.fab.show button.main + ul li:hover label,
.fab.show button.main + ul li:hover label{
opacity: 1;
}
JavaScript
function toggleFAB(fab){
if(document.querySelector(fab).classList.contains('show')){
document.querySelector(fab).classList.remove('show');
}else{
document.querySelector(fab).classList.add('show');
}
}
document.querySelector('.fab .main').addEventListener('click', function(){
toggleFAB('.fab');
});
document.querySelector('.fab ul li button').forEach(function(item){
item.addEventListener('click', function(){
toggleFAB('.fab');
});
});