To make good looking Vue apps, we need to style our components. To make our lives easier, we can use components with styles built-in. In this article, we’ll look at how to add layouts.
Offsetting Columns
We can add offsets to columns to spread them out.
For example, we can write:
<template>
<div id="app">
<b-container>
<b-row>
<b-col md="4">foo</b-col>
<b-col md="4" offset-md="4">bar</b-col>
</b-row>
</b-container>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We have offset-md='4'
to space them out at the md
breakpoint by 4 columns.
We can change the offsets at different breakpoints.
For instance, we can write:
<template>
<div id="app">
<b-container>
<b-row>
<b-col md="4">foo</b-col>
<b-col md="4" offset-md="4" col-lg="6" offset-lg="0">bar</b-col>
</b-row>
</b-container>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We set the column to 6 for the lg
breakpoint to set the column width to 6 for wide screens.
offset-lg
is 0 to remove column spaces for wide screens.
Margins
We can add classes like mr-auto
or ml-auto
to add margins to our columns.
For example, we can write:
<template>
<div id="app">
<b-container>
<b-row>
<b-col md="4">foo</b-col>
<b-col md="4" class="ml-md-auto">bar</b-col>
</b-row>
</b-container>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
Then we add some margins to our right column.
Nesting Grids
We can nest grids.
For instance, we can write:
<template>
<div id="app">
<b-container>
<b-row>
<b-col md="4">
<b-row>
<b-col cols="8" sm="6">foo</b-col>
<b-col cols="4" sm="6">bar</b-col>
</b-row>
</b-col>
</b-row>
</b-container>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We just put a b-row
inside a b-col
to nest it.
Row Columns
We can set the cols
prop on b-row
to specify the number of columns that can be in a row.
For instance, we can write:
<template>
<div id="app">
<b-container>
<b-row cols="2">
<b-col>foo</b-col>
<b-col>bar</b-col>
<b-col>baz</b-col>
</b-row>
</b-container>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We have 3 columns but col
is set to 2.
So the last b-col
is below the rest.
We can also have a different number of columns at different breakpoints.
For instance, we can write:
<template>
<div id="app">
<b-container>
<b-row cols="1" cols-sm="2" cols-md="4" cols-lg="6">
<b-col>foo</b-col>
<b-col>bar</b-col>
<b-col>baz</b-col>
<b-col>a</b-col>
<b-col>b</b-col>
</b-row>
</b-container>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We display 1, 2, 4, or 6 columns depending on the breakpoint.
Links
BootstrapVue has the b-link
component to let us add links.
For example, we can write:
<template>
<div id="app">
<b-link href="http://example.com">example</b-link>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
We have the b-link
component and the href
prop to set the link URL.
The content is displayed in between the tags.
Disabled Link
The disabled
prop disables the link.
For example, we can write:
<template>
<div id="app">
<b-link href="http://example.com" disabled>example</b-link>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
Now we have a link that does nothing when we click it.
List Group
The b-list-group
component lets us create a list.
For example, we can write:
<template>
<div id="app">
<b-list-group>
<b-list-group-item>foo</b-list-group-item>
<b-list-group-item>bar</b-list-group-item>
</b-list-group>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
Then we display a box with a list that has the texts.
Photo by Keyur Nandaniya on Unsplash
Active List Group Items
We can add the active
prop to set an item as the active item.
We can write:
<template>
<div id="app">
<b-list-group>
<b-list-group-item active>foo</b-list-group-item>
<b-list-group-item>bar</b-list-group-item>
</b-list-group>
</div>
</template>
<script>
export default {
name: "App"
};
</script>
to make the first item active.
Conclusion
We can add a list group. Columns can be spaced out or we can specify the number of columns in a row.