Render Wrapper
Render outer wrapper
By default, <Float> does not render the outer wrapper element, for example, as shown in the following example:
<Float show>
<button type="button">button</button>
<div>content</div>
</Float>The following HTML will be rendered:
<button type="button">button</button>
<div>
<div>content</div>
</div>Since the default as for <Float> is Fragment, it directly renders the child element. If you want to wrap other elements, you can pass in a different as prop:
<Float show as="div">
<button type="button">button</button>
<div>content</div>
</Float>And it will render the outer wrapper element:
<div>
<button type="button">button</button>
<div>
<div>content</div>
</div>
</div>Render floating element wrapper
The wrapper element for the floating element can be set using the floating-as prop, and by default it is div:
<Float show>
<button type="button">button</button>
<div>content</div>
</Float>The following HTML will be rendered:
<button type="button">button</button>
<div>
<div>content</div>
</div>If you set floating-as to Fragment, the floating element will not render the wrapper element, but position the floating element itself directly:
import { Fragment } from 'react'
<Float show floatingAs={Fragment}>
<button type="button">button</button>
<div>content</div>
</Float>And it will render the following HTML:
<button type="button">button</button>
<div>content</div>Pass component wrapper
Sometimes you may need to add HTML attributes or classes to the wrapper of the floating element, you can use the Forwarding Refs of React:
import { forwardRef } from 'react'
const Wrapper = forwardRef((props, ref) => (
<div
ref={ref}
{...props}
className="wrapper-class"
data-label="wrapper label"
/>
))
Wrapper.displayName = 'Wrapper'Then passing the component:
<Float show floatingAs={Wrapper}>
<button type="button">button</button>
<div>content</div>
</Float>The following HTML will be rendered:
<button type="button">button</button>
<div class="wrapper-class" data-label="wrapper label">
<div>content</div>
</div>If using TypeScript, you need to add an HTMLDivElement type variable to forwardRef(), depending on which HTML tag the ref is used on:
import { forwardRef } from 'react'
const Wrapper = forwardRef<HTMLDivElement>((props, ref) => (
<div
ref={ref}
{...props}
className="wrapper-class"
data-label="wrapper label"
/>
))
Wrapper.displayName = 'Wrapper'INFO
If you don't want to use the approach of passing component, you can use the <Float.Content> component instead, following the usage instructions for the Composable Mode.