Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tooltip positioning doesn't work within a CSS container query #3143

Open
linden-dg opened this issue Sep 26, 2024 · 5 comments
Open

Tooltip positioning doesn't work within a CSS container query #3143

linden-dg opened this issue Sep 26, 2024 · 5 comments

Comments

@linden-dg
Copy link

Bug report

Current Behavior

When a Tooltip (i.e. Root, Trigger, and Content) is placed inside a div with the CSS container-type: inline-size then the Tooltip Content isn't properly positioned (it's positioned way off to the side).

However if the Tooltip Content is placed inside a Tooltip Portal, then it is properly positioned adjacent to the Trigger.

Expected behavior

The Tooltip Content should always appear adjacent to the Trigger

Reproducible example

Example on StackBlitz

Suggested solution

Either have the Content positioning work with container queries regardless of whether the Tooltip Portal is used, or make it clear in the documentation that the Portal is required when nesting inside CSS container queries.

Additional context

Your environment

Software Name(s) Version
Radix Package(s) @radix-ui/react-tooltip 1.1.2
React n/a 18.3.1
Browser Chrome 129.0.6668.59
Assistive tech n/a
Node n/a 20 & 22
npm/yarn npm & pnpm
Operating System Win 11
@meszarosdezso
Copy link

meszarosdezso commented Sep 27, 2024

I believe this is related to this breaking change in chromium, which was the result of this change in the CSS specification. The change also broke I think every floating radix-ui element inside a container without using Portal.

I am not sure if the radix-ui team can do anything to fix this (because the change broke the usage, not the library), but you can try adding position: relative or contain: layout to your container element as mentioned in the linked comment. (Edit: using contain: layout or contain-layout in tailwind fixed it in our app.)

Using Portal works, because it "moves out" the tooltip element from inside of the container and by default attaches it to the body.

@erosnicolau
Copy link

This didn't work on my side, but moving the Content inside a Portal did.

but you can try adding position: relative or contain: layout to your container element as mentioned in the linked comment.

@noah-wardlow
Copy link

moving inside a portal also works for me!

@AzrizHaziq
Copy link

Works for me

   <CardHeader
      className='flex flex-row items-center gap-2 flex-wrap @container/header space-y-0'
      style={{ contain: 'layout' }} <-----
    >
      <TooltipProvider>
        <Tooltip>
          <TooltipTrigger asChild>
            <Button variant='outline'>Hover</Button>
          </TooltipTrigger>
          <TooltipContent>
            <p>Add to library</p>
          </TooltipContent>
        </Tooltip>
      </TooltipProvider>
      </CardHeader>
      ```

@ozgurozalp
Copy link

A solution should be provided by radix ui

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants