react-vertical-timeline-component
Version:
Vertical timeline for React.js
445 lines (400 loc) • 10.8 kB
CSS
.vertical-timeline-element {
position: relative;
margin: 2em 0;
}
.vertical-timeline-element > div {
min-height: 1px;
}
.vertical-timeline-element:after {
content: "";
display: table;
clear: both;
}
.vertical-timeline-element:first-child {
margin-top: 0;
}
.vertical-timeline-element:last-child {
margin-bottom: 0;
}
@media only screen and (min-width: 1170px) {
.vertical-timeline-element {
margin: 4em 0;
}
.vertical-timeline-element:first-child {
margin-top: 0;
}
.vertical-timeline-element:last-child {
margin-bottom: 0;
}
}
.vertical-timeline-element-icon {
position: absolute;
top: 0;
left: 0;
width: 40px;
height: 40px;
border-radius: 50%;
}
.vertical-timeline-element-icon.shadow-size-small {
box-shadow: 0 0 0 2px white, inset 0 1px 0 rgba(0, 0, 0, 0.08), 0 2px 0 4px rgba(0, 0, 0, 0.05);
}
.vertical-timeline-element-icon.shadow-size-medium {
box-shadow: 0 0 0 3px white, inset 0 2px 0 rgba(0, 0, 0, 0.08), 0 3px 0 5px rgba(0, 0, 0, 0.05);
}
.vertical-timeline-element-icon.shadow-size-large {
box-shadow: 0 0 0 4px white, inset 0 2px 0 rgba(0, 0, 0, 0.08), 0 4px 0 6px rgba(0, 0, 0, 0.05);
}
.vertical-timeline--one-column-right .vertical-timeline-element-icon {
right: 0;
left: unset;
}
.vertical-timeline-element-icon svg {
display: block;
width: 24px;
height: 24px;
position: relative;
left: 50%;
top: 50%;
margin-left: -12px;
margin-top: -12px;
}
@media only screen and (min-width: 1170px) {
.vertical-timeline--two-columns .vertical-timeline-element-icon {
width: 60px;
height: 60px;
left: 50%;
margin-left: -30px;
}
}
/* Icon animations */
.vertical-timeline-element-icon {
/* Force Hardware Acceleration in WebKit */
-webkit-transform: translateZ(0);
-webkit-backface-visibility: hidden;
}
.vertical-timeline--animate .vertical-timeline-element-icon.is-hidden {
visibility: hidden;
}
.vertical-timeline--animate .vertical-timeline-element-icon.bounce-in {
visibility: visible;
-webkit-animation: cd-bounce-1 0.6s;
-moz-animation: cd-bounce-1 0.6s;
animation: cd-bounce-1 0.6s;
}
@-webkit-keyframes cd-bounce-1 {
0% {
opacity: 0;
-webkit-transform: scale(0.5);
}
60% {
opacity: 1;
-webkit-transform: scale(1.2);
}
100% {
-webkit-transform: scale(1);
}
}
@-moz-keyframes cd-bounce-1 {
0% {
opacity: 0;
-moz-transform: scale(0.5);
}
60% {
opacity: 1;
-moz-transform: scale(1.2);
}
100% {
-moz-transform: scale(1);
}
}
@keyframes cd-bounce-1 {
0% {
opacity: 0;
-webkit-transform: scale(0.5);
-moz-transform: scale(0.5);
-ms-transform: scale(0.5);
-o-transform: scale(0.5);
transform: scale(0.5);
}
60% {
opacity: 1;
-webkit-transform: scale(1.2);
-moz-transform: scale(1.2);
-ms-transform: scale(1.2);
-o-transform: scale(1.2);
transform: scale(1.2);
}
100% {
-webkit-transform: scale(1);
-moz-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
}
}
.vertical-timeline-element-content {
position: relative;
margin-left: 60px;
background: white;
border-radius: 0.25em;
padding: 1em;
box-shadow: 0 3px 0 #ddd;
}
.vertical-timeline--one-column-right .vertical-timeline-element-content {
margin-right: 60px;
margin-left: unset;
}
.vertical-timeline-element--no-children .vertical-timeline-element-content {
background: transparent;
box-shadow: none;
}
.vertical-timeline-element-content:after {
content: "";
display: table;
clear: both;
}
.vertical-timeline-element-content h2 {
color: #303e49;
}
.vertical-timeline-element-content p, .vertical-timeline-element-content .vertical-timeline-element-date {
font-size: 13px;
font-size: 0.8125rem;
font-weight: 500;
}
.vertical-timeline-element-content .vertical-timeline-element-date {
display: inline-block;
}
.vertical-timeline-element-content p {
margin: 1em 0 0;
line-height: 1.6;
}
.vertical-timeline-element-title {
margin: 0;
}
.vertical-timeline-element-subtitle {
margin: 0;
}
.vertical-timeline-element-content .vertical-timeline-element-date {
float: left;
padding: .8em 0;
opacity: .7;
}
.vertical-timeline-element-content-arrow {
content: '';
position: absolute;
top: 16px;
right: 100%;
height: 0;
width: 0;
border: 7px solid transparent;
border-right: 7px solid white;
}
.vertical-timeline--one-column-right .vertical-timeline-element-content-arrow {
content: '';
position: absolute;
top: 16px;
right: unset;
left: 100%;
height: 0;
width: 0;
border: 7px solid transparent;
border-left: 7px solid white;
}
.vertical-timeline--one-column-right .vertical-timeline-element-content::before {
left: 100%;
border-left: 7px solid white;
border-right: unset;
}
.vertical-timeline-element--no-children .vertical-timeline-element-content::before {
display: none;
}
.vertical-timeline-element--no-children .vertical-timeline-element-content-arrow {
display: none;
}
@media only screen and (min-width: 768px) {
.vertical-timeline-element-content h2 {
font-size: 20px;
font-size: 1.25rem;
}
.vertical-timeline-element-content p {
font-size: 16px;
font-size: 1rem;
}
.vertical-timeline-element-content .vertical-timeline-element-date {
font-size: 14px;
font-size: 0.875rem;
}
}
@media only screen and (min-width: 1170px) {
.vertical-timeline--two-columns .vertical-timeline-element-content {
margin-left: 0;
padding: 1.5em;
width: 44%;
}
.vertical-timeline--two-columns .vertical-timeline-element-content-arrow {
top: 24px;
left: 100%;
transform: rotate(180deg);
}
.vertical-timeline--two-columns .vertical-timeline-element-content .vertical-timeline-element-date {
position: absolute;
width: 100%;
left: 124%;
top: 6px;
font-size: 16px;
font-size: 1rem;
}
.vertical-timeline--two-columns .vertical-timeline-element:nth-child(even):not(.vertical-timeline-element--left) .vertical-timeline-element-content,
.vertical-timeline--two-columns .vertical-timeline-element.vertical-timeline-element--right .vertical-timeline-element-content {
float: right;
}
.vertical-timeline--two-columns .vertical-timeline-element:nth-child(even):not(.vertical-timeline-element--left) .vertical-timeline-element-content-arrow,
.vertical-timeline--two-columns .vertical-timeline-element.vertical-timeline-element--right .vertical-timeline-element-content-arrow {
top: 24px;
left: auto;
right: 100%;
transform: rotate(0deg);
}
.vertical-timeline--one-column-right .vertical-timeline-element:nth-child(even):not(.vertical-timeline-element--left) .vertical-timeline-element-content-arrow,
.vertical-timeline--one-column-right .vertical-timeline-element.vertical-timeline-element--right .vertical-timeline-element-content-arrow {
top: 24px;
left: 100%;
right: auto;
transform: rotate(0deg);
}
.vertical-timeline--two-columns .vertical-timeline-element:nth-child(even):not(.vertical-timeline-element--left) .vertical-timeline-element-content .vertical-timeline-element-date,
.vertical-timeline--two-columns .vertical-timeline-element.vertical-timeline-element--right .vertical-timeline-element-content .vertical-timeline-element-date {
left: auto;
right: 124%;
text-align: right;
}
}
/* Box animations */
.vertical-timeline--animate .vertical-timeline-element-content.is-hidden {
visibility: hidden;
}
.vertical-timeline--animate .vertical-timeline-element-content.bounce-in {
visibility: visible;
-webkit-animation: cd-bounce-2 0.6s;
-moz-animation: cd-bounce-2 0.6s;
animation: cd-bounce-2 0.6s;
}
@media only screen and (min-width: 1170px) {
/* inverse bounce effect on even content blocks */
.vertical-timeline--two-columns.vertical-timeline--animate .vertical-timeline-element:nth-child(even):not(.vertical-timeline-element--left) .vertical-timeline-element-content.bounce-in,
.vertical-timeline--two-columns.vertical-timeline--animate .vertical-timeline-element.vertical-timeline-element--right .vertical-timeline-element-content.bounce-in {
-webkit-animation: cd-bounce-2-inverse 0.6s;
-moz-animation: cd-bounce-2-inverse 0.6s;
animation: cd-bounce-2-inverse 0.6s;
}
}
@media only screen and (max-width: 1169px) {
.vertical-timeline--animate .vertical-timeline-element-content.bounce-in {
visibility: visible;
-webkit-animation: cd-bounce-2-inverse 0.6s;
-moz-animation: cd-bounce-2-inverse 0.6s;
animation: cd-bounce-2-inverse 0.6s;
}
}
@-webkit-keyframes cd-bounce-2 {
0% {
opacity: 0;
-webkit-transform: translateX(-100px);
}
60% {
opacity: 1;
-webkit-transform: translateX(20px);
}
100% {
-webkit-transform: translateX(0);
}
}
@-moz-keyframes cd-bounce-2 {
0% {
opacity: 0;
-moz-transform: translateX(-100px);
}
60% {
opacity: 1;
-moz-transform: translateX(20px);
}
100% {
-moz-transform: translateX(0);
}
}
@keyframes cd-bounce-2 {
0% {
opacity: 0;
-webkit-transform: translateX(-100px);
-moz-transform: translateX(-100px);
-ms-transform: translateX(-100px);
-o-transform: translateX(-100px);
transform: translateX(-100px);
}
60% {
opacity: 1;
-webkit-transform: translateX(20px);
-moz-transform: translateX(20px);
-ms-transform: translateX(20px);
-o-transform: translateX(20px);
transform: translateX(20px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}
@-webkit-keyframes cd-bounce-2-inverse {
0% {
opacity: 0;
-webkit-transform: translateX(100px);
}
60% {
opacity: 1;
-webkit-transform: translateX(-20px);
}
100% {
-webkit-transform: translateX(0);
}
}
@-moz-keyframes cd-bounce-2-inverse {
0% {
opacity: 0;
-moz-transform: translateX(100px);
}
60% {
opacity: 1;
-moz-transform: translateX(-20px);
}
100% {
-moz-transform: translateX(0);
}
}
@keyframes cd-bounce-2-inverse {
0% {
opacity: 0;
-webkit-transform: translateX(100px);
-moz-transform: translateX(100px);
-ms-transform: translateX(100px);
-o-transform: translateX(100px);
transform: translateX(100px);
}
60% {
opacity: 1;
-webkit-transform: translateX(-20px);
-moz-transform: translateX(-20px);
-ms-transform: translateX(-20px);
-o-transform: translateX(-20px);
transform: translateX(-20px);
}
100% {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-ms-transform: translateX(0);
-o-transform: translateX(0);
transform: translateX(0);
}
}