Rating

Vue Bootstrap 5 Star Rating component

Responsive star rating built with the latest Bootstrap 5 and Vue 3. Rating provides insight into others opinions and experiences with a product. Use stars or other custom symbols (i.e. smiling faces}

Rating component can be used to allow the users to share their opinion about the product, documentation page, photo and more.

Note: Read the API tab to find all available options and advanced customization


Basic example

You can create the rating component using MDBRating and MDBRatingItem

        
            
            <template>
              <MDBRating v-model="basicActive">
                <MDBRatingItem title="Bad" :index="1" />
                <MDBRatingItem title="Poor" :index="2" />
                <MDBRatingItem title="OK" :index="3" />
                <MDBRatingItem title="Good" :index="4" />
                <MDBRatingItem title="Excellent" :index="5" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const basicActive = ref(0);
        
                  return {
                    basicActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const basicActive = ref(0);
            </script>
          
        
    

Read only

If you want to use a rating to show the score you can use the readonly property

        
            
            <template>
              <MDBRating v-model="readonlyActive" readonly :value="3">
                <MDBRatingItem :index="1" />
                <MDBRatingItem :index="2" />
                <MDBRatingItem :index="3" />
                <MDBRatingItem :index="4" />
                <MDBRatingItem :index="5" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const readonlyActive = ref(3);
        
                  return {
                    readonlyActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const readonlyActive = ref(3);
            </script>
          
        
    

Events

Rating emits events after click and hover element. Check the browser console to test it.

        
            
            <template>
              <MDBRating v-model="eventsActive" events @itemClick="itemClick" @itemHover="itemHover">
                <MDBRatingItem :index="1" />
                <MDBRatingItem :index="2" />
                <MDBRatingItem :index="3" />
                <MDBRatingItem :index="4" />
                <MDBRatingItem :index="5" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const itemClick = e => {
                    console.log(e);
                  };
                  const itemHover = e => {
                    console.log(e);
                  };
                  const eventsActive = ref(0);
        
                  return {
                    itemClick,
                    itemHover,
                    eventsActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const itemClick = (e: MouseEvent) => {
                console.log(e);
              };
              const itemHover = (e: MouseEvent) => {
                console.log(e);
              };
              const eventsActive = ref(0);
            </script>
          
        
    

Custom text

You can add extra text before or after the icon using dinsertBefore and insertAfter

        
            
            <template>
              <MDBRating v-model="customActive">
                <MDBRatingItem :index="1" insertBefore="1" insertAfter="1"/>
                <MDBRatingItem :index="2" insertBefore="2" insertAfter="2"/>
                <MDBRatingItem :index="3" insertBefore="3" insertAfter="3"/>
                <MDBRatingItem :index="4" insertBefore="4" insertAfter="4"/>
                <MDBRatingItem :index="5" insertBefore="5" insertAfter="5"/>
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const customActive = ref(0);
        
                  return {
                    customActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const customActive = ref(0);
            </script>
          
        
    

Custom icons

You can use other icons easily with icon property

        
            
            <template>
              <MDBRating v-model="iconActive">
                <MDBRatingItem icon="heart" :index="1" />
                <MDBRatingItem icon="heart" :index="2" />
                <MDBRatingItem icon="heart" :index="3" />
                <MDBRatingItem icon="heart" :index="4" />
                <MDBRatingItem icon="heart" :index="5" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const iconActive = ref(0);
        
                  return {
                    iconActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const iconActive = ref(0);
            </script>
          
        
    

Number of icons

If you want to display more or less icons in your rating, all you have to do is add as many MDBRatingItems as you like

        
            
            <template>
              <MDBRating v-model="iconNumberActive">
                <MDBRatingItem :index="1" />
                <MDBRatingItem :index="2" />
                <MDBRatingItem :index="3" />
                <MDBRatingItem :index="4" />
                <MDBRatingItem :index="5" />
                <MDBRatingItem :index="6" />
                <MDBRatingItem :index="7" />
                <MDBRatingItem :index="8" />
                <MDBRatingItem :index="9" />
                <MDBRatingItem :index="10" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const iconNumberActive = ref(0);
                  return {
                    iconNumberActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const iconNumberActive = ref(0);
            </script>
          
        
    

Icons custom color

If you want to set your own icon color you can use the color property

        
            
            <template>
              <MDBRating v-model="iconsColorActive">
                <MDBRatingItem :index="1" color="#673ab7" />
                <MDBRatingItem :index="2" color="#3f51b5" />
                <MDBRatingItem :index="3" color="#2196f3" />
                <MDBRatingItem :index="4" color="#03a9f4" />
                <MDBRatingItem :index="5" color="#00bcd4" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const iconsColorActive = ref(0);
                  return {
                    iconsColorActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const iconsColorActive = ref(0);
            </script>
          
        
    

Dynamic icons

You can make you rating more dynamically by adding dynamic property

        
            
            <template>
              <MDBRating v-model="dynamicActive" dynamic>
                <MDBRatingItem icon="angry" size="lg" :index="1" color="#673ab7" />
                <MDBRatingItem icon="frown" size="lg" :index="2" color="#3f51b5" />
                <MDBRatingItem icon="meh" size="lg" :index="3" color="#2196f3" />
                <MDBRatingItem icon="smile" size="lg" :index="4" color="#03a9f4" />
                <MDBRatingItem icon="grin-stars" size="lg" :index="5" color="#00bcd4"/>
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const dynamicActive = ref(0);
                  return {
                    dynamicActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const dynamicActive = ref(0);
            </script>
          
        
    

Styling active elements

You can use active class to set different styles for selected elements

        
            
            <template>
              <MDBRating v-model="stylingActive">
                <MDBRatingItem :index="1" />
                <MDBRatingItem :index="2" />
                <MDBRatingItem :index="3" />
                <MDBRatingItem :index="4" />
                <MDBRatingItem :index="5" />
              </MDBRating>
            </template>
          
        
    
        
            
          <script>
            import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
            import { ref } from "vue";
            export default {
              components: {
                MDBRating,
                MDBRatingItem
              },
              setup() {
                const stylingActive = ref(0);
                return {
                  stylingActive
                }
              }
            };
            </script>
          
        
    
        
            
          <script setup lang="ts">
            import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
            import { ref } from "vue";

            const stylingActive = ref(0);
          </script>
          
        
    
        
            
            <style>
              .active {
                color: #00c851;
              }
            </style>
          
        
    

Popover implementation example

Rating allows you to easily add popover functionality

        
            
            <template>
              <MDBRating v-model="popoverActive">
                <MDBRatingItem :index="1" popover="Example text" />
                <MDBRatingItem :index="2" popover="Example text" />
                <MDBRatingItem :index="3" popover="Example text" />
                <MDBRatingItem :index="4" popover="Example text" />
                <MDBRatingItem :index="5" popover="Example text" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const popoverActive = ref(0);
                  return {
                    popoverActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const popoverActive = ref(0);
            </script>
          
        
    

Get selected value

To get the value selected just use v-model value

        
            
            <template>
              <MDBRating v-model="selectedActive">
                <MDBRatingItem :index="1" />
                <MDBRatingItem :index="2" />
                <MDBRatingItem :index="3" />
                <MDBRatingItem :index="4" />
                <MDBRatingItem :index="5" />
              </MDBRating>
            </template>
          
        
    
        
            
            <script>
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";
              export default {
                components: {
                  MDBRating,
                  MDBRatingItem
                },
                setup() {
                  const selectedActive = ref(0);
                  return {
                    selectedActive
                  }
                }
              };
            </script>
          
        
    
        
            
            <script setup lang="ts">
              import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
              import { ref } from "vue";

              const selectedActive = ref(0);
            </script>
          
        
    

Rating - API


Import

        
            
          <script>
            import { 
              MDBRating, 
              MDBRatingItem 
            } from "mdb-vue-ui-kit";
          </script>
        
        
    

Properties

Rating

Name Type Default Description
tag String 'ul' Defines tag of the MDBRating element
v-model String Indicates rating value
readonly Boolean false Disable hover, click and keypress events
events Boolean false Enable emitting click and hover events on rating elements
dynamic Boolean false Dynamically change previous icons to the currently selected/hovered icon
classes String '' Adds custom classes to MDBRating element

Rating Item

Name Type Default Description
tag String 'li' Defines tag of the MDBRatingItem element
classes String Adds custom classes to MDBRatingItem element
iconClass String Adds custom classes to icon element
icon String 'star' Defines rating icon
flag String '' Enables using flags as icon
size String 'sm' Defines icon size
color String 'sm' Defines icon color
title String '' Set the text displayed in the tooltip
index Number Set index on rating element (obligatory property)
popover Boolean | String false Enables showing popover on click. When true enables using #default slot as popover content. When String, passed text is used as popover content
insertBefore String '' Set a custom text before the icon
insertAfter String '' Set a custom text after the icon

Events

Events below have to be used together with events prop.

Name Description
itemClick This event fires immediately when you clicked on icon. The clicked element is available as the target property of the event.
itemHover This event fires immediately when you hovered on icon. The hovered element is available as the target property of the event.
        
            
        <template>
          <MDBRating
            v-model="eventsActive"
            events
            @itemClick="itemClick"
            @itemHover="itemHover"
          >
            <MDBRatingItem :index="1" />
            <MDBRatingItem :index="2" />
            <MDBRatingItem :index="3" />
            <MDBRatingItem :index="4" />
            <MDBRatingItem :index="5" />
          </MDBRating>
        </template>
        
        
    
        
            
        <script>
          import { MDBRating, MDBRatingItem} from "mdb-vue-ui-kit";
          import { ref } from "vue";
          export default {
            components: {
              MDBRating,
              MDBRatingItem
            },
            setup() {
              const itemClick = e => {
                console.log(e);
              };
              const itemHover = e => {
                console.log(e);
              };
              const eventsActive = ref(0);
        
              return {
                itemClick,
                itemHover,
                eventsActive
              }
            }
          };
        </script>
        
        
    
        
            
        <script setup lang="ts">
          import { MDBRating, MDBRatingItem } from "mdb-vue-ui-kit";
          import { ref } from "vue";
          
          const itemClick = (e: MouseEvent) => {
            console.log(e);
          };
          const itemHover = (e: MouseEvent) => {
            console.log(e);
          };
          const eventsActive = ref(0);
          </script>
        
        
    

CSS variables

As part of MDB’s evolving CSS variables approach, rating now use local CSS variables on .rating for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.

        
            
        // .rating
        --#{$prefix}rating-icon-padding: #{$rating-icon-padding};
        
        
    

SCSS variables

        
            
        $rating-icon-padding: 0.25rem;