Flip
The flip modifier can change the placement of a popper when it's scheduled
to overflow a given boundary.
They are small and unobtrusive.
Alternatively, support us on Open Collective!
Demo
The placement is set to bottom, but if that placement does not fit, the
opposite top placement will be used.
Phase
main
Options
type Options = {
  fallbackPlacements: Array<Placement>, // [oppositePlacement]
  padding: Padding, // 0,
  boundary: Boundary, // "clippingParents"
  rootBoundary: RootBoundary, // "viewport"
  flipVariations: boolean, // true
  allowedAutoPlacements: Array<Placement>, // all supported placements
};fallbackPlacements
If the popper has placement set to bottom, but there isn't enough space to
position the popper in that direction, by default, it will change the popper
placement to top. As soon as enough space is detected, the placement will be
reverted to the originally defined (or preferred) one.
You can also define fallback placements by providing a list of placements to try. When no space is available on the preferred placement, the modifier will test the ones provided in the list, and use the first useful one.
createPopper(reference, popper, {
  placement: 'left',
  modifiers: [
    {
      name: 'flip',
      options: {
        fallbackPlacements: ['top', 'right'],
      },
    },
  ],
});In the above example, the popper will be placed on left if there's enough space, if not, it will try the top placement, and if the top placement doesn't fit either, it will try to use the right placement. If even the right placement doesn't fit, it reverts back to the original placement.
padding
See padding in Detect Overflow for
details.
createPopper(reference, popper, {
  modifiers: [
    {
      name: 'flip',
      options: {
        padding: 8,
      },
    },
  ],
});boundary
See boundary in Detect Overflow for
details.
const element = document.querySelector('#parentElement');
createPopper(reference, popper, {
  modifiers: [
    {
      name: 'flip',
      options: {
        boundary: element,
      },
    },
  ],
});rootBoundary
See
rootBoundary in Detect Overflow
for details.
createPopper(reference, popper, {
  modifiers: [
    {
      name: 'flip',
      options: {
        rootBoundary: 'document',
      },
    },
  ],
});altBoundary
This will check the reference's boundary context
(clippingParents) instead of the
popper's, effectively replicating the
scrollParent boundary from
Popper v1. See
altBoundary in Detect Overflow for
details.
createPopper(reference, popper, {
  modifiers: [
    {
      name: 'flip',
      options: {
        altBoundary: true, // false by default
      },
    },
  ],
});flipVariations
When using variation placements (e.g. top-start), the popper will attempt to
flip the opposite variation if the preferred variation does not fit. This allows
the popper to stay aligned to the edge of the reference element before
preventOverflow has a chance to misalign it.
createPopper(reference, popper, {
  modifiers: [
    {
      name: 'flip',
      options: {
        flipVariations: false, // true by default
      },
    },
  ],
});allowedAutoPlacements
The auto placement is very versatile, but sometimes you may need to make it
resolve to just a user defined set of placements.
If, for example, you want auto to only ever resolve to either top or
bottom, you can set allowedAutoPlacements to ['top', 'bottom'].
This feature is available starting from @popperjs/core@2.3.0
createPopper(reference, popper, {
  placement: 'auto',
  modifiers: [
    {
      name: 'flip',
      options: {
        allowedAutoPlacements: ['top', 'bottom'], // by default, all the placements are allowed
      },
    },
  ],
});Data
This modifier has no data.
Edit this page