<template>
<div class="tooltip">
<slot name="activator"></slot>
<span :class="getPosition()">
<span class="tooltip__text__header">
<slot name="header"></slot>
</span>
<span class="tooltip__text__content">
<slot name="content"></slot>
</span>
</span>
</div>
</template>
<script>
export default {
name: 'tooltip',
props: {
position: {
type: String,
required: true,
validator (val) {
let allowable = ['top', 'bottom']
return allowable.indexOf(val) !== -1
}
}
},
computed: {
getPosition () {
return [
'tooltip__text',
'tooltip__text--' + this.position
]
}
}
}
</script>
<style lang="scss">
$tooltip-width: 120px;
$tooltip-font-size: 12px;
$tooltip-padding: 15px;
$blue: #0055cc;
$dark: #2d3440;
@mixin arrow {
content: " ";
position: absolute;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
}
.tooltip {
&__text {
visibility: hidden;
width: $tooltip-width;
background: $dark;
color: #fff;
text-align: center;
border-radius: 4px;
padding: $tooltip-padding;
position: absolute;
z-index: 1;
&__header {
font-size: $tooltip-font-size;
padding-bottom: $tooltip-padding;
font-weight: bold;
}
&__content {
font-size: $tooltip-font-size;
}
&--top {
bottom: 100%;
left: 50%;
margin-left: -($tooltip-width/2);
}
&--bottom {
top: 100%;
left: 50%;
margin-left: -($tooltip-width/2);
}
&--top::after {
@include arrow;
top: 100%;
border-color: $dark transparent transparent transparent;
}
&--bottom::after {
@include arrow;
bottom: 100%;
border-color: transparent transparent $dark transparent;
}
}
&:hover &__text {
visibility: visible;
}
}
</style>
Usage:<tooltip position="bottom">
<div slot="activator" @click="toggle">
<img src="../assets/edit-icon.svg" v-if="!isActive">
<img src="../assets/location-icon.svg" v-else>
</div>
<span slot="header">
Только локальные способы оплаты
</span>
<span slot="content">
Включите эту опцию, что бы отобразить все доступные способы, независимо от вашего местоположения
</span>
</tooltip>