This is a simple timeline alternative build using vue
, boostrap-vue
and moment.js
We've also pulled in css-vars-ponyfill
to improve cross-browser compatibility.
- Customize the location of the images,
- Create separator between sections in timeline (for example workplaces and studies),
- Make it possible to use SVGs instead of images.
- Maybe add animations?
This project was made with:
Project | Status | Documentation |
---|---|---|
vue | https://vuejs.org/ | |
bootstrap-vue | https://bootstrap-vue.js.org/ | |
moment | https://momentjs.com/ | |
css-vars-ponyfill | https://jhildenbiddle.github.io/css-vars-ponyfill/ |
You can see it in action here. You could check here how the Demo was implemented in the codesandbox.
npm i bs-vue-timeline --save
or
yarn add bs-vue-timeline
In your .vue
component:
<script>
import VueTimeline from 'bs-vue-timeline'
export default {
// ...
components: {
VueTimeline
}
// ...
data: () => ({
timelineItems: [
{
from: new Date(2014,10),
to: new Date(),
title: 'Company Name 1',
subtitle: 'System Engineer',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
image: 'company1-logo.png'
},
{
from: new Date(2009,5),
to: new Date(2013,5),
title: 'Company Name 2',
subtitle: 'Programmer',
content: 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.',
image: 'company2-logo.png'
},
{
from: new Date(2000,3),
to: new Date(2008,12),
title: 'Company Name 3',
subtitle: 'Internship / Volunteer',
content: 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
image: 'company3-logo.png'
},
]
})
};
</script>
then, in your <template>
:
<VueTimeline :timeline-items="timelineItems" />
To customize the colors you have can change the following properties, which could be overwritten like in the example below:
<style>
:root {
--bvt-primary-color: #0288d1;
--bvt-bg-secondary: #ddd;
--bvt-timeline-color: #aaa;
--bvt-timeline-text-color: #333;
--bvt-border-color: var(--bvt-timeline-color);
--bvt-duration-color: var(--bvt-primary-color);
--bvt-box-shadow1: 0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24);
}
</style>
The following props can be passed to the component:
Prop | Description | Type | Default |
---|---|---|---|
separator | Used to separate the years and months in calculated duration | String | ", " |
:individualClasses | Will add (additional) individual classes for all records so that the user can further customize entries. The classes will be .bvt-cust-'{order number} , e.g.: .bvt-custom-1 |
Boolean | false |
Important: Vue requires you to pass numbers and boolean values using v-bind
, any props that require a number or bool should use v-bind:
or the colon (:
) shorthand.
Props Example:
<VueTimeline
:individualClasses="true"
separator=" & "
:timeline-items="timelineItems"
/>
Compatibility accross browsers was not checked thoroughly, but expected browser compatibility is shown below.
IE | Edge | Chrome | Firefox | Safari |
---|---|---|---|---|
9+ | 12+ | 19+ | 6+ | 6+ |
If you encounter any problems please open an issue or submit a pull request.
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to test changes appropriately.
Copyright (c) 2019, Angelin Calu