Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Images
We can add images with the v-img
component.
For example, we can write:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-img src="https://picsum.photos/510/300?random" aspect-ratio="1.7"></v-img>
<v-img src="https://picsum.photos/510/300?random" aspect-ratio="2"></v-img>
<v-img src="https://picsum.photos/510/300?random" aspect-ratio="1.4"></v-img>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({}),
methods: {
next() {
alert("You clicked next");
},
},
};
</script>
to add images with the v-img
component.
src
has the URL of the image.
aspect-ratio
has the aspect ratio of the image.
Height
We can change the height with the height
and max-height
props.
For example, we can write:
<template>
<v-container class="fill-height" fluid style="min-height: 434px">
<v-fade-transition mode="out-in">
<v-row key="0">
<v-col cols="6">
<v-card>
<v-img src="https://picsum.photos/350/165?random" height="125" class="grey darken-4"></v-img>
<v-card-title class="title">height</v-card-title>
</v-card>
</v-col>
<v-col cols="6">
<v-card>
<v-img
src="https://picsum.photos/350/165?random"
height="125"
contain
class="grey darken-4"
></v-img>
<v-card-title class="title">height with contain</v-card-title>
</v-card>
</v-col>
<v-col cols="6">
<v-card>
<v-img
src="https://picsum.photos/350/165?random"
max-height="125"
class="grey darken-4"
></v-img>
<v-card-title class="title">max-height</v-card-title>
</v-card>
</v-col>
<v-col cols="6">
<v-card>
<v-img
src="https://picsum.photos/350/165?random"
max-height="125"
contain
class="grey darken-4"
></v-img>
<v-card-title class="title">max-height with contain</v-card-title>
</v-card>
</v-col>
</v-row>
</v-fade-transition>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({}),
};
</script>
contain
prevents the image from being cropped if it doesn’t fit.
Fixed Ratio
We can set the aspect ratio if we want to change the aspect ratio of the image.
For example, we can write:
<template>
<v-container fluid>
<v-slider v-model="width" min="200" max="500" step="1"></v-slider>
<v-navigation-drawer :width="width" :value="true" stateless>
<v-img :aspect-ratio="16/9" src="https://cdn.vuetifyjs.com/images/parallax/material.jpg"></v-img>
<v-list>
<template v-for="(item, i) in items">
<v-divider v-if="item.divider" :key="i"></v-divider>
<v-list-item v-else :key="item.title">
<v-list-item-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-item-action>
<v-list-item-title>{{ item.title }}</v-list-item-title>
</v-list-item>
</template>
</v-list>
</v-navigation-drawer>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
width: 300,
items: [
{ icon: "inbox", title: "Inbox" },
{ icon: "star", title: "Starred" },
],
}),
};
</script>
We have width
prop to change the width.
And we render the icons with the v-list
component.
The aspect-ratio
prop makes the aspect ratio of the image fixed.
Placeholder
We can add a placeholder
slot to add a placeholder content inside.
For example, we can write:
<template>
<v-container fluid>
<v-row align="center" justify="center">
<v-img
src="https://bad.src/not/valid"
lazy-src="https://picsum.photos/id/11/100/60"
aspect-ratio="1"
class="grey lighten-2"
max-width="500"
max-height="300"
>
<template v-slot:placeholder>
<v-row class="fill-height ma-0" align="center" justify="center">
<v-progress-circular indeterminate color="grey lighten-5"></v-progress-circular>
</v-row>
</template>
</v-img>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({}),
};
</script>
We have an src
prop that is invalid, so the placeholder image will be shown.
lazy-src
has the URL of the placeholder.
And we use the placeholder
slot to put a circular progress display over the placeholder image.
Conclusion
We can display images with placeholders and more.