Toasts

React Bootstrap 5 Toasts component

Toasts built with Bootstrap 5, React 18 and Material Design 2.0. Non-disruptive notification message in the corner of the interface. It provides quick "at-a-glance" feedback on the outcome of an action.

Push notifications to your visitors with a 'toast', a lightweight and easily customizable alert message. Toasts are designed to mimic the push notifications that have been popularized by mobile and desktop operating systems.

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


Basic example

Click the buttons to launch the toasts.

        
            
          import React, { useState } from 'react';
          import {MDBToast, MDBBtn, MDBStack } from 'mdb-react-ui-kit';
          
          export default function ToastPage(): JSX.Element {
            const showToast = (color: string) => {
              setStackingToasts([
                ...stackingToasts,
                { 
                  color,
                  colorCapitalized: color.charAt(0).toUpperCase() + color.slice(1),
                }
              ]);
            };
            const [stackingToasts, setStackingToasts] = useState<Array<Record<string, any>>>([]);
          
            return (
              <>
                 <MDBBtn className='m-1' onClick={() => showToast('primary')}>
                    Primary
                  </MDBBtn>
                  <MDBBtn color='secondary' className='m-1' onClick={() => showToast('secondary')}>
                    Secondary
                  </MDBBtn>
                  <MDBBtn color='success' className='m-1' onClick={() => showToast('success')}>
                    Success
                  </MDBBtn>
                  <MDBBtn color='danger' className='m-1' onClick={() => showToast('danger')}>
                    Danger
                  </MDBBtn>
                  <MDBBtn color='warning' className='m-1' onClick={() => showToast('warning')}>
                    Warning
                  </MDBBtn>
                  <MDBBtn color='light' className='m-1' onClick={() => showToast('light')}>
                    Light
                  </MDBBtn>
                  <MDBBtn color='dark' className='m-1' onClick={() => showToast('dark')}>
                    Dark
                  </MDBBtn>
          
                  <MDBStack className='position-absolute'>
                    {
                      stackingToasts.map((item, id) => (
                        <MDBToast
                          color={item.color}
                          defaultOpen
                          autohide
                          width={450}
                          delay={2000}
                          key={id}
                          headerContent={
                            <>
                              <strong className='me-auto'>MDBootstrap</strong>
                              <small>11 mins ago</small>
                            </>
                          }
                          bodyContent={`${item.colorCapitalized} Basic Example`}
                        />
                      ))
                    }
                  </MDBStack>
              </>
            );
          }

        
        
    

Static example

        
            
          import React from 'react';
          import { MDBToast, MDBContainer } from 'mdb-react-ui-kit';

          export default function App() {
            return (
              <MDBContainer>
                <MDBToast
                  open
                  className='mx-auto'
                  headerContent={
                    <>
                      <strong className='me-auto'>MDBootstrap</strong>
                      <small>11 mins ago</small>
                    </>
                  }
                  bodyContent='Static Example'
                />
              </MDBContainer>
            );
          }
        
        
    

Colors

        
            
          import React from 'react';
          import { MDBToast, MDBContainer, MDBRow, MDBCol } from 'mdb-react-ui-kit';

          export default function App() {
            return (
              <MDBContainer>
                <MDBRow className='mb-5'>
                  <MDBCol xl='3' lg='6'>
                    <MDBToast
                      color='info'
                      open
                      className='mx-auto'
                      headerContent={
                        <>
                          <strong className='me-auto'>MDBootstrap</strong>
                          <small>11 mins ago</small>
                        </>
                      }
                      bodyContent='Hello, world! This is a toast message.'
                    />
                  </MDBCol>
                  <MDBCol xl='3' lg='6'>
                    <MDBToast
                      color='warning'
                      open
                      className='mx-auto'
                      headerContent={
                        <>
                          <strong className='me-auto'>MDBootstrap</strong>
                          <small>11 mins ago</small>
                        </>
                      }
                      bodyContent='Hello, world! This is a toast message.'
                    />
                  </MDBCol>
                  <MDBCol xl='3' lg='6'>
                    <MDBToast
                      color='success'
                      open
                      className='mx-auto'
                      headerContent={
                        <>
                          <strong className='me-auto'>MDBootstrap</strong>
                          <small>11 mins ago</small>
                        </>
                      }
                      bodyContent='Hello, world! This is a toast message.'
                    />
                  </MDBCol>
                  <MDBCol xl='3' lg='6'>
                    <MDBToast
                      color='danger'
                      open
                      className='mx-auto'
                      headerContent={
                        <>
                          <strong className='me-auto'>MDBootstrap</strong>
                          <small>11 mins ago</small>
                        </>
                      }
                      bodyContent='Hello, world! This is a toast message.'
                    />
                  </MDBCol>
                </MDBRow>
              </MDBContainer>
            );
          }
        
        
    

Placement

You can set position of every notification using position property.

Select horizontal / vertical alignment

Current position: top-right
        
            
            import React, { useState } from 'react';
            import { MDBToast, MDBContainer, MDBBtn } from 'mdb-react-ui-kit';

            export default function App() {
              const [isOpen, setIsOpen] = useState(false);

              return (
                <MDBContainer className='text-center'>
                  <MDBBtn onClick={() => setIsOpen(true)}>Show!</MDBBtn>
                  <MDBToast
                    color='info'
                    open={isOpen}
                    onClose={() => setIsOpen(false)}
                    autohide
                    position='top-right'
                    delay={2000}
                    appendToBody
                    headerContent={
                      <>
                        <strong className='me-auto'>MDBootstrap</strong>
                        <small>11 mins ago</small>
                      </>
                    }
                    bodyContent='Placement toast.'
                  />
                </MDBContainer>
              );
            }

        
        
    

Offset

You can also change offset or any style of a notification using style property.

        
            
          import React, { useRef } from 'react';
          import { MDBToast, MDBBtn } from 'mdb-react-ui-kit';

          export default function App() {
            const triggerOffset = useRef(null);
            
            return (
              <>
                <MDBBtn className='mb-5' ref={triggerOffset}>
                  Show alert with offset!
                </MDBBtn>

                <MDBToast
                  color='info'
                  autohide
                  offset={50}
                  position='top-right'
                  delay={3000}
                  triggerRef={triggerOffset}
                  headerContent={
                    <>
                      <strong className='me-auto'>MDBootstrap</strong>
                      <small>11 mins ago</small>
                    </>
                  }
                  bodyContent='Offset: 50'
                />
              </>
            );
          }
        
        
    

Container

You can display notification anywhere. Just put your toast in your target element and fill containerRef property with a reference to the parent.

        
            
            import React, { useRef, useState } from 'react';
            import { MDBToast, MDBBtn } from 'mdb-react-ui-kit';

            export default function App() {
              const [isOpen, setIsOpen] = useState(false);
              const wrapperRef = useRef(null);

              return (
                <div className='container text-center w-50 border' ref={wrapperRef}>
                  <MDBBtn className='mb-5' onClick={() => setIsOpen(true)}>
                    Show alert below!
                  </MDBBtn>

                  <MDBToast
                    open={isOpen}
                    onClose={() => setIsOpen(false)}
                    autohide
                    position='top-right'
                    delay={3000}
                    containerRef={wrapperRef}
                    headerContent={
                      <>
                        <strong className='me-auto'>MDBootstrap</strong>
                        <small>11 mins ago</small>
                      </>
                    }
                    bodyContent='Toast inside another element!'
                  />
                </div>
              );
            }

        
        
    

Stacking

You can create stacking notifications using MDBStack component.

        
            
          import React, { useState } from 'react';
          import { MDBToast, MDBBtn, MDBStack } from 'mdb-react-ui-kit';

          export default function App() {
            const [stackingToasts, setStackingToasts] = useState<Array<Record<string, any>>>([]);
            const [stackingColor, setStackingColor] = useState(0);

            const handleClick = () => {
              const colors = ['primary', 'warning', 'info', 'success', 'secondary', 'danger', 'light'];

              stackingColor + 1 > colors.length - 1 ? setStackingColor(0) : setStackingColor(stackingColor + 1);

              setStackingToasts([
                ...stackingToasts,
                {
                  color: colors[stackingColor],
                  count: stackingToasts.length > 0 ? stackingToasts.length + 1 : 1,
                },
              ]);
            };

            return (
              <>
                <MDBBtn className='m-1' onClick={handleClick}>
                  Show toast notification
                </MDBBtn>

                <MDBStack className='position-absolute'>
                {
                  stackingToasts.map((item) => (
                    <MDBToast
                      color={item.color}
                      defaultOpen
                      autohide
                      width={450}
                      delay={2000}
                      key={item.count}
                      headerContent={
                        <>
                          <strong className='me-auto'>{item.count}</strong>
                          <small>11 mins ago</small>
                        </>
                      }
                      bodyContent='Stacking Element'
                    />
                  ))
                  }
                </MDBStack>

              </>
            );
          }
        
        
    

Stacking (container)

Add position-relative class to your container and wrap notifications with MDBStack component. Stack component must have position-absolute class.

        
            
            import React, { useState } from 'react';
            import { MDBToast, MDBBtn, MDBStack } from 'mdb-react-ui-kit';

            const colors = ['primary', 'warning', 'info', 'success', 'secondary', 'danger', 'light'];

            export default function App() {
              const [stackToasts, setStackToasts] = useState([]);
              const [counter, setCounter] = useState(1);

              return (
                <>
                  <div
                    className='container text-center position-relative  border w-50'
                    id='parent-stacking-container-example'
                    style={{
                      height: '300px',
                      overflow: 'auto',
                    }}
                  >
                    <MDBStack className='position-absolute'>
                      {stackToasts.map((toast) => {
                        const color = colors[toast.id % colors.length];
                        return (
                          <MDBToast
                            defaultOpen
                            autohide
                            delay={3000}
                            key={toast.id}
                            color={color}
                            dismissBtn
                            width={250}
                            headerContent={
                              <>
                                <strong className='me-auto'>{toast.id}</strong>
                                <small>11 mins ago</small>
                              </>
                            }
                            bodyContent={'Stacking element'}
                          ></MDBToast>
                        );
                      })}
                    </MDBStack>
                    <MDBBtn
                      onClick={() => {
                        setStackToasts([
                          ...stackToasts,
                          {
                            id: counter,
                          },
                        ]);
                        setCounter((prev) => prev + 1);
                      }}
                    >
                      Show toast notification
                    </MDBBtn>
                  </div>
                </>
              );
            }

        
        
    

Toasts - API


Import

        
            
            import { MDBToast } from 'mdb-react-ui-kit';
            
        
    

Properties

MDBToast

Name Type Default Description Example
appendToBody Boolean false Appends element to the end of the body <MDBToast appendToBody />
autohide Boolean false Toasts will hide automatically or not <MDBToast autohide />
bodyClasses String '' Add custom class to the body of MDBToast <MDBToast bodyClasses="class" />
bodyContent String | Node '' Defines a body content for MDBToast <MDBToast bodyContent={
Sample
} />
closeBtnClasses String '' Add custom class to the close button of MDBToast <MDBToast closeBtnClasses="class" />
color String '' Allows to set the color of a toast - primary | secondary | secondary | danger | warning | info | light | dark <MDBToast color='secondary' />
containerRef Reference '' Defines a reference to the parent element <MDBToast containerRef={containerReference} />
delay Number 1000 Sets the length of animation delay (in ms) <MDBToast delay={2000} />
headerClasses String '' Add custom class to the header of MDBToast <MDBToast headerClasses="class" />
headerContent String | Node '' Defines a header content for MDBToast <MDBToast headerContent={
Sample
} />
position 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right' '' Sets a toast position <MDBToast position='top-right' />
open Boolean undefined Defines toast's open state. Usually used with onClose event handler. <MDBToast open />
defaultOpen Boolean false Defines toast's default open state. No onClose handler is needed to close the toast. <MDBToast defaultOpen />
toastRef React.MutableRefObject '' Reference to the MDBToast element <MDBToast toastRef={toastRefference} />
width Number | String '' Sets width of toast (in pixels) <MDBToast width={300} />
initialAnimation boolean false Defines if component should animate on initial render <MDBAlert initialAnimation />
animationVariants { open?: Record<string, any>; closed?: Record<string, any>; }; {open: { opacity: 1 }, closed: { opacity: 0 }} Defines animation variants <MDBAlert animationVariants={ {open: { opacity: 1 }, closed: { opacity: 0 }} } />

Events

onOpen () => void Fired when the Alert starts to open.
onOpened () => void Fired after opening transition has completed.
onClose () => void Fires immediately when the Alert demands to be closed.
onClosed () => void Fired after closing transition has completed.

CSS variables

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

        
            
        // .toast
        --#{$prefix}toast-zindex: #{$zindex-toast};
        --#{$prefix}toast-padding-x: #{$toast-padding-x};
        --#{$prefix}toast-padding-y: #{$toast-padding-y};
        --#{$prefix}toast-spacing: #{$toast-spacing};
        --#{$prefix}toast-max-width: #{$toast-max-width};
        @include rfs($toast-font-size, --#{$prefix}toast-font-size);
        --#{$prefix}toast-color: #{$toast-color};
        --#{$prefix}toast-bg: #{$toast-background-color};
        --#{$prefix}toast-border-width: #{$toast-border-width};
        --#{$prefix}toast-border-color: #{$toast-border-color};
        --#{$prefix}toast-border-radius: #{$toast-border-radius};
        --#{$prefix}toast-box-shadow: #{$toast-box-shadow};
        --#{$prefix}toast-header-color: #{$toast-header-color};
        --#{$prefix}toast-header-bg: #{$toast-header-background-color};
        --#{$prefix}toast-header-border-color: #{$toast-header-border-color};
         
        --#{$prefix}toast-border-bottom-width: #{$toast-border-bottom-width};
        --#{$prefix}toast-btn-close-width: #{$toast-btn-close-width};
        --#{$prefix}toast-btn-close-mr: #{$toast-btn-close-mr};
        --#{$prefix}toast-btn-close-ml: #{$toast-btn-close-ml};

        // .toast-container
        --#{$prefix}toast-zindex: #{$zindex-toast};
        
        
    

SCSS variables

        
            
        $toast-max-width: 350px;
        $toast-font-size: 0.875rem;
        $toast-color: null;
        $toast-border-width: $border-width;
        $toast-border-color: var(--#{$prefix}border-color-translucent);
        $toast-spacing: $container-padding-x;
        
        $toast-header-color: $gray-600;
        $toast-header-border-color: rgba($black, 0.05);

        $toast-box-shadow: $box-shadow-4;
        $toast-border-radius: $border-radius-lg;
        $toast-border-bottom-width: $border-width-alternate;
        $toast-background-color: $white;
        $toast-padding-x: 1rem;
        $toast-padding-y: 0.65rem;
        $toast-header-background-color: $white;
        $toast-btn-close-width: 1.3em;
        $toast-btn-close-mr: -0.375rem;
        $toast-btn-close-ml: 0.75rem;