css @next/font适用于除一个特定组件之外的所有组件

bz4sfanl  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(129)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。andrilla希望引起更多人对此问题的关注:我很想知道是什么原因导致了这个问题,以及我如何解决它。理想情况下,我希望得到一个实际的答案,但只要有一些好的想法,我可以尝试将是超级有帮助的。

@下一个/font

将Next.js与TypeScript和Tailwind CSS结合使用

这是我第一次使用新的@next/font包。我遵循了Next.js的教程,它很容易设置。我使用Inter和一个名为App Takeoff的自定义本地字体。为了实际使用这两种字体,我使用Tailwind CSS,其中Inter连接到font-sans,App Takeoff连接到font-display

除了一个地方,一切都正常

我已经在文件之间做了大量的测试,由于某种原因,除了我的Modal组件之外,这两种字体在任何地方都可以工作。

示例

    • 索引. tsx**

    • 模态. tsx通过索引. tsx**

正如您所看到的,当字体不在模态中时,它们可以正常工作,但是一旦它们在模态中就不工作了。

以下是一些相关代码:

// app.tsx

import '@/styles/globals.css'
import type { AppProps } from 'next/app'

import { Inter } from '@next/font/google'
const inter = Inter({
  subsets: ['latin'],
  variable: '--font-inter'
})

import localFont from '@next/font/local'
const appTakeoff = localFont({
  src: [
    {
      path: '../fonts/app-takeoff/regular.otf',
      weight: '400',
      style: 'normal'
    },
    {
      path: '../fonts/app-takeoff/regular.eot',
      weight: '400',
      style: 'normal'
    },
    {
      path: '../fonts/app-takeoff/regular.woff2',
      weight: '400',
      style: 'normal'
    },
    {
      path: '../fonts/app-takeoff/regular.woff',
      weight: '400',
      style: 'normal'
    },
    {
      path: '../fonts/app-takeoff/regular.ttf',
      weight: '400',
      style: 'normal'
    }
  ],
  variable: '--font-app-takeoff'
})

const App = ({ Component, pageProps }: AppProps) => {
  return (
    <div className={`${inter.variable} font-sans ${appTakeoff.variable}`}>
      <Component {...pageProps} />
    </div>
  )
}

export default App
// modal.tsx

import type { FunctionComponent } from 'react'
import type { Modal as ModalProps } from '@/typings/components'
import React, { useState } from 'react'
import { Fragment } from 'react'
import { Transition, Dialog } from '@headlessui/react'

const Modal: FunctionComponent<ModalProps> = ({ trigger, place = 'bottom', className, addClass, children }) => {

  const [isOpen, setIsOpen] = useState(false),
        openModal = () => setIsOpen(true),
        closeModal = () => setIsOpen(false)

  const Trigger = () => React.cloneElement(trigger, { onClick: openModal })

  const enterFrom = place === 'center'
    ? '-translate-y-[calc(50%-12rem)]'
    : 'translate-y-full sm:-translate-y-[calc(50%-12rem)]'

  const mainPosition = place === 'center'
    ? '-translate-y-1/2'
    : 'translate-y-0 sm:-translate-y-1/2'

  const leaveTo = place === 'center'
    ? '-translate-y-[calc(50%+8rem)]'
    : 'translate-y-full sm:-translate-y-[calc(50%+8rem)]'

  return (
    <>
    
      <Trigger />

      <Dialog open={isOpen} onClose={closeModal} className='z-50'>

        {/* Backdrop */}
        <div className='fixed inset-0 bg-zinc-200/50 dark:bg-zinc-900/50 backdrop-blur-sm cursor-pointer' aria-hidden='true' />

        <Dialog.Panel
          className={`
            ${className || `
              fixed left-1/2
              ${
                place === 'center'
                ? 'top-1/2 rounded-2xl'
                : 'bottom-0 sm:bottom-auto sm:top-1/2 rounded-t-2xl xs:rounded-b-2xl'
              }
              bg-zinc-50 dark:bg-zinc-900
              w-min
              -translate-x-1/2
              overflow-hidden
              px-2 xs:px-6
              shadow-3xl shadow-primary-400/10
            `}
            ${addClass || ''}
          `}
        >
          {children}
              
        </Dialog.Panel>

        <button
          onClick={closeModal}
          className='
            fixed top-4 right-4
            bg-primary-600 hover:bg-primary-400
            rounded-full
            h-7 w-7 desktop:hover:w-20
            overflow-x-hidden
            transition-[background-color_width] duration-300 ease-in-out
            group/button
          '
          aria-role='button'
        >
          Close
        </button>

      </Dialog>

    </>
  )
}

export default Modal

我希望这些信息能有所帮助。如果有任何其他的信息需要了解,请告诉我。

58wvjzkj

58wvjzkj1#

您正在使用的Dialog组件在门户中呈现(请参阅此处)。
您通常希望将它们呈现为React应用程序最根节点的兄弟节点,这样您就可以依靠自然的DOM排序来确保它们的内容呈现在现有应用程序UI之上。
您可以通过检查浏览器中的模态DOM元素来确认这一点,并查看它是否确实位于App组件的div Package 器之外(我怀疑是这样)。
如果是这样,下面是模态内容不以预期字体呈现的原因:它在定义字体的组件外部呈现。
为了解决这个问题,你可以在更高的层次上定义你的字体,例如,在你的头脑中,如下所述:下一个文件。

相关问题