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">
<div class="container">
<h2>Red Carpet Buttons</h2>
<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 <span class="hidden"></span></button>
<button type="button" class="btn btn-link rc-btn-link text-secondary">Secondary <span class="hidden"></span></button>
<button type="button" class="btn btn-link rc-btn-link text-success">Success <span class="hidden"></span></button>
<button type="button" class="btn btn-link rc-btn-link text-info">Info <span class="hidden"></span></button>
<button type="button" class="btn btn-link rc-btn-link text-warning">Warning <span class="hidden"></span></button>
<button type="button" class="btn btn-link rc-btn-link text-danger">Danger <span class="hidden"></span></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 <span class="hidden"></span></button>
</div>
</div>
<div class="card rc-card">
<div class="card-header rc-card-header">Raised Buttons <span class="hidden"></span></div>
<div class="card-block">
<button type="button" class="btn btn-primary rc-btn">Primary<span class="hidden"></span></button>
<button type="button" class="btn btn-secondary rc-btn">Secondary<span class="hidden"></span></button>
<button type="button" class="btn btn-success rc-btn">Success<span class="hidden"></span></button>
<button type="button" class="btn btn-info rc-btn">Info<span class="hidden"></span></button>
<button type="button" class="btn btn-warning rc-btn">Warning <span class="hidden"></span></button>
<button type="button" class="btn btn-danger rc-btn">Danger <span...
SCSS
body {
margin-top: 3rem;
font-family: "Roboto", sans-serif;
}
a,
button {
cursor: pointer;
margin-top: 1rem;
margin-right: 1rem;
overflow: hidden;
position: relative;
}
.rc-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;
font-size: 0.875rem;
font-weight: bold;
text-transform: uppercase;
border-radius: 2px;
box-shadow: rgba(0, 0, 0, 0.12) 0px 1px 6px, rgba(0, 0, 0, 0.12) 0px 1px 4px;
&:active {
box-shadow: rgba(0, 0, 0, 0.16) 0px 3px 10px, rgba(0, 0, 0, 0.23) 0px 3px 10px;
}
}
.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;
&:focus,
&:hover {
text-decoration: none;
}
&:hover {
background: #eee;
text-decoration: none;
}
}
.rc-menu li {
list-style: none;
display: none;
}
.rc-show-menu {
position: relative;
top: 24px;
left: 24px;
display: inline-block;
background: red;
width: 100px;
height: 100px;
}
.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'),...
JavaScript
/* Ripple Effect */
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 = e.target.querySelector(".hidden");
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("rc-ripple");
setTimeout(function() {
circle.classList.remove("rc-ripple");
}, 600);
}