nextjs中如何应用媒体查询

How to apply media query in nextjs

nextJs 应用程序中的媒体查询 -

我想在我的网站中应用媒体查询,以便我可以使其响应,我该怎么做?

我想全局应用 next js 以便我可以让它响应所有设备。

只需使用您选择的任何名称创建一个文件。比如styles文件夹下的“globals.css”。然后在该文件中写入您的媒体查询。

然后将“globals.css”文件导入到您的“_app.js”文件中。

您所有的 CSS 和媒体查询都将开始工作。

如果您愿意使用 third-party 库,MUI 在 useMediaQuery 中有您所需要的:

import * as React from 'react'
import useMediaQuery from '@mui/material/useMediaQuery'

export default function SimpleMediaQuery()
{
  const matches = useMediaQuery('(min-width:600px)')

  return <span>{`(min-width:600px) matches: ${matches}`}</span>
}

有关如何使用它的更多示例,请参阅上面链接的文档。

如果您想避免使用另一个库,这里有一个简单的自定义挂钩:

export const useMediaQuery = (width) =>
{
  const [targetReached, setTargetReached] = useState(false)

  const updateTarget = useCallback((e) =>
  {
    if (e.matches) setTargetReached(true)
    else setTargetReached(false)
  }, [])

  useEffect(() =>
  {
    const media = window.matchMedia(`(max-width: ${width}px)`)
    media.addEventListener('change', updateTarget)

    // Check on mount (callback is not called until a change occurs)
    if (media.matches) setTargetReached(true)

    return () => media.removeEventListener('change', updateTarget)
  }, [])

  return targetReached
}

用法:

// 600px
const matches = useMediaQuery(600)