JSFiddle - React, Tailwind, and code Playground
by graphettion
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<div class="container">
<div class="card rc-card">
<div class="card-header rc-card-header">Flat Buttons</div>
<div class="card-block">
<button type="button" class="btn btn-link rc-btn-link text-primary">Primary</button>
<button type="button" class="btn btn-link rc-btn-link text-secondary">Secondary</button>
<button type="button" class="btn btn-link rc-btn-link text-success">Success</button>
<button type="button" class="btn btn-link rc-btn-link text-info">Info</button>
<button type="button" class="btn btn-link rc-btn-link text-warning">Warning</button>
<button type="button" class="btn btn-link rc-btn-link text-danger">Danger</button>
<a href="#" class="btn btn-link rc-btn-link text-primary">Primary</a>
<button type="button" class="btn btn-link btn-block rc-btn-link text-primary">Full Width</button>
</div>
</div>
<div class="card rc-card">
<div class="card-header rc-card-header">Raised Buttons</div>
<div class="card-block">
<button type="button" class="btn btn-primary rc-btn">Primary</button>
<button type="button" class="btn btn-secondary rc-btn">Secondary</button>
<button type="button" class="btn btn-success rc-btn">Success</button>
<button type="button" class="btn btn-info rc-btn">Info</button>
<button type="button" class="btn btn-warning rc-btn">Warning</button>
<button type="button" class="btn btn-danger rc-btn">Danger</button>
<button type="button" class="btn btn-primary rc-btn btn-block">Full Width</button>
</div>
</div>
<div class="card rc-card">
<div class="card-header rc-card-header">Icon Buttons</div>
<div class="card-block">
...
CSS
body {
margin-top: 3rem;
font-family: "Roboto", sans-serif;
}
a,
button {
cursor: pointer;
margin-top: 1rem;
margin-right: 1rem;
overflow: hidden;
position: relative;
}
.ripple {
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.7);
position: absolute;
transform: scale(0);
animation: ripple 0.6s linear;
}
@keyframes ripple {
to {
transform: scale(2.5);
opacity: 0;
}
}
.rc-btn {
border: 0;
transition: 1s;
padding: 0.70rem 1rem;
font-size: 0.875rem;
font-weight: bold;
text-transform: uppercase;
border-radius: 2px;
-webkit-box-shadow: 0px 0px 12px 0px rgba(50, 50, 50, 0.35);
-moz-box-shadow: 0px 0px 12px 0px rgba(50, 50, 50, 0.35);
box-shadow: 0px 0px 12px 0px rgba(50, 50, 50, 0.35);
}
.rc-btn-link {
transition: 1s;
padding: 0.70rem 1rem;
font-size: 0.875rem;
font-weight: bold;
text-decoration: none;
text-transform: uppercase;
border-radius: 2px;
}
.btn-link:focus,
.btn-link:hover {
text-decoration: none;
}
.rc-btn-link:hover {
background: #eee;
text-decoration: none;
}
.rc-card {
margin-top: 2rem;
-webkit-box-shadow: 0px 0px 12px 0px rgba(150, 150, 150, 0.35);
-moz-box-shadow: 0px 0px 12px 0px rgba(150, 150, 150, 0.35);
box-shadow: 0px 0px 12px 0px rgba(150, 150, 150, 0.35);
}
.rc-card-header {
font-size: 1.4rem;
background: #fff;
font-weight: 400;
}
@font-face {
font-family: 'Glyphicons Halflings';
src: url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot);
src: url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'), url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.woff) format('woff'), url(https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/fonts/glyphicons-halflings-regular.ttf) format('truetype'),...
JavaScript
var buttons = document.getElementsByTagName('button'),
links = document.getElementsByTagName('a');
function bindClickTo(el) {
Array.prototype.forEach.call(el, function(cb) {
cb.addEventListener('click', ripple);
});
}
bindClickTo(buttons);
bindClickTo(links);
function ripple(e) {
var circle = document.createElement('div');
this.appendChild(circle);
var d = Math.max(this.clientWidth, this.clientHeight);
circle.style.width = circle.style.height = d + 'px';
var rect = this.getBoundingClientRect();
circle.style.left = e.clientX - rect.left - d / 2 + 'px';
circle.style.top = e.clientY - rect.top - d / 2 + 'px';
circle.classList.add('ripple');
setTimeout(function() {
circle.remove();
}, 600);
}