react-light-toast
Version:
Simple and lightweight toast package for React.js
249 lines (214 loc) • 5.5 kB
CSS
@import url('https://fonts.googleapis.com/css2?family=Montserrat&display=swap');
:root {
--toastify-icon-color-info: #3498db;
--toastify-icon-color-success: #07bc0c;
--toastify-icon-color-warning: #f1c40f;
--toastify-icon-color-error: #e74c3c;
--toastify-toast-background: #fff;
}
.toastArea {
position: fixed;
display: flex;
flex-direction: column;
gap: 15px;
transition: 330ms;
z-index: 9999999;
}
.area-top-left {
top: 15px;
left: 15px;
}
.area-top-center {
top: 15px;
left: 50%;
transform: translateX(-50%);
}
.area-top-right {
top: 15px;
right: 15px;
}
.area-bottom-left {
bottom: 15px;
left: 15px;
}
.area-bottom-center {
bottom: 15px;
left: 50%;
transform: translateX(-50%);
}
.area-bottom-right {
bottom: 15px;
right: 15px;
}
.reverse {
flex-direction: column-reverse;
}
.toastContainer {
background-color: #fff;
width: 320px;
min-height: 60px;
display: flex;
align-items: center;
border-radius: 4px;
box-shadow: 0 1px 10px 0 rgb(0 0 0 / 10%), 0 2px 15px 0 rgb(0 0 0 / 5%);
transition: 330ms;
transition-delay: 500ms;
cursor: pointer;
overflow: hidden;
}
/* Left */
.toastArea[class*="left"] .toastContainer {
transform: translateX(-125%);
}
.toastArea.area-top-left .show, .toastArea.area-bottom-left .show {
animation: toastInLeft 0.5s linear forwards;
}
.toastArea.area-top-left .hide, .toastArea.area-bottom-left .hide {
animation: toastOutLeft 0.5s ease-in-out forwards;
}
/* Right */
.toastArea[class*="right"] .toastContainer {
transform: translateX(125%);
}
.toastArea.area-top-right .show, .toastArea.area-bottom-right .show {
animation: toastInRight 0.5s linear forwards;
}
.toastArea.area-top-right .hide, .toastArea.area-bottom-right .hide {
animation: toastOutRight 0.5s ease-in-out forwards;
}
/* Top Center */
.toastArea.area-top-center .toastContainer {
transform: translateY(-200%);
}
.toastArea.area-top-center .show {
animation: toastInTopCenter 0.35s linear forwards;
}
.toastArea.area-top-center .hide {
animation: toastOutTopCenter 0.3s ease-in-out forwards;
}
/* Bottom Center */
.toastArea.area-bottom-center .toastContainer {
transform: translateY(200%);
}
.toastArea.area-bottom-center .show {
animation: toastInBottomCenter 0.35s linear forwards;
}
.toastArea.area-bottom-center .hide {
animation: toastOutBottomCenter 0.3s ease-in-out forwards;
}
.toastContainer.hide {
min-height: 0;
max-height: 0;
height: 0;
opacity: 0;
transition-delay: 500ms;
}
.toastBar {
height: 5px;
width: 100%;
position: absolute;
background: white;
bottom: 0;
left: 0;
}
.toastBar:before {
width: 100%;
height: 100%;
display: block;
content: '';
animation: toastProgressBar var(--duration) linear forwards;
}
.toastContainer[type="info"] .toastBar:before{
background: var(--toastify-icon-color-info);
}
.toastContainer[type="success"] .toastBar:before{
background: var(--toastify-icon-color-success);
}
.toastContainer[type="warning"] .toastBar:before{
background: var(--toastify-icon-color-warning);
}
.toastContainer[type="error"] .toastBar:before{
background: var(--toastify-icon-color-error);
}
.toastContainer.show + .toastContainer.hide {
margin-bottom: -15px;
}
.toastIcon {
width: 20px;
height: 20px;
margin-left: 15px;
margin-right: 10px;
}
.toastMessage {
font-size: 15px;
color: #757575;
width: calc(100% - 75px);
text-align: left;
padding: 10px 0;
font-family: 'Montserrat', sans-serif;
}
.toastClose {
width: 14px;
position: absolute;
right: 8px;
top: 8px;
cursor: pointer;
fill: #333;
opacity: 0.3;
transition: 330ms;
}
.toastClose:hover {
opacity: 1;
}
@keyframes toastInLeft {
20%, 50%, 100% {transform: translateX(0);}
40% {transform: translateX(50px);}
60% {transform: translateX(0px);}
80% {transform: translateX(20px);}
60% {transform: translateX(0px);}
}
@keyframes toastOutLeft {
0% {transform: translateX(50px);}
20% {transform: translateX(65px);}
100% {transform: translateX(-125%);}
}
@keyframes toastInRight {
20%, 50%, 100% {transform: translateX(0);}
40% {transform: translateX(-50px);}
60% {transform: translateX(0px);}
80% {transform: translateX(-20px);}
60% {transform: translateX(0px);}
}
@keyframes toastOutRight {
0% {transform: translateX(-50px);}
20% {transform: translateX(-65px);}
100% {transform: translateX(125%);}
}
@keyframes toastInTopCenter {
20%, 50%, 100% {transform: translateY(0);}
40% {transform: translateY(50px);}
60% {transform: translateY(0px);}
80% {transform: translateY(20px);}
60% {transform: translateY(0px);}
}
@keyframes toastOutTopCenter {
0% {transform: translateY(50px);}
20% {transform: translateY(65px);}
100% {transform: translateY(-200%);}
}
@keyframes toastInBottomCenter {
20%, 50%, 100% {transform: translateY(0);}
40% {transform: translateY(-50px);}
60% {transform: translateY(0px);}
80% {transform: translateY(-20px);}
60% {transform: translateY(0px);}
}
@keyframes toastOutBottomCenter {
0% {transform: translateY(-50px);}
20% {transform: translateY(-65px);}
100% {transform: translateY(200%);}
}
@keyframes toastProgressBar {
0% {width: 100%;}
100% {width: 0;}
}