nuxt-viewport
nuxt-viewport

Nuxt プロジェクト用のカスタムビューポートを定義

nuxt-viewport

npm versionnpm downloadsLicense

Nuxt️ プロジェクト用のカスタムビューポートを定義

機能

  • ⚡️ MatchMedia API を使った高速・軽量な処理 ⚡️
  • 🕶 Cookie & User-Agent からデバイスのビューポートを自動検出
  • 👌 設定不要ですぐに開始
  • 👴️ IE9+ をサポート

注記
このバージョンは Nuxt 3 & Nuxt Bridge のみ対応しています。Nuxt 2 の場合は 1.0.1 を参照してください。

クイックセットアップ

  1. プロジェクトに nuxt-viewport の依存関係を追加
npx nuxi@latest module add nuxt-viewport
  1. nuxt.config.jsmodules セクションに nuxt-viewport を追加
{
  modules: [
    [
      'nuxt-viewport', {
        /* Viewport options */
      }
    ],
  ]
}

トップレベルオプションの使用

{
  modules: [
    'nuxt-viewport',
  ],

  viewport: {
    /* Viewport options */
  },
}

使用方法

<script setup>
import { useNuxtApp } from '#app'
const { $viewport } = useNuxtApp()

watch($viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
  console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
</script>

<template>
  <div>
    <div v-if="$viewport.isLessThan('tablet')">Should render only on mobile</div>
    <div v-else>Current breakpoint: {{ $viewport.breakpoint }}</div>
  </div>
</template>

コンポーザブルでの使用

<script setup>
const viewport = useViewport()

watch(viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
  console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
</script>

<template>
  <div>
    <div v-if="viewport.isLessThan('tablet')">Should render only on mobile</div>
    <div v-else>Current breakpoint: {{ viewport.breakpoint }}</div>
  </div>
</template>

"@nuxt/bridge" での使用

<script setup>
const viewport = useViewport()

watch(viewport.breakpoint, (newBreakpoint, oldBreakpoint) => {
  console.log('Breakpoint updated:', oldBreakpoint, '->', newBreakpoint)
})
</script>

<template>
  <div>
    <div v-if="viewport.isLessThan('tablet')">Should render only on mobile</div>
    <div v-else>Current breakpoint: {{ $viewport.breakpoint }}</div>
  </div>
</template>

設定

ブレイクポイント

  • 型: Object

キーがビューポート名、値がビューポートサイズであるオブジェクト。

  • 型: Object

cookie のオプションを持つオブジェクト。詳細は https://www.npmjs.com/package/cookiejs#cookie-attributes を参照してください。

defaultBreakpoints

  • 型: Object
  • 検出可能なデバイス: bot, desktop, mobile, tablet, tv

キーが検出されたデバイス名、値がブレイクポイントキーであるオブジェクト。

fallbackBreakpoint

  • 型: String
  • デフォルト: viewport

デバイスが検出されなかった場合に使用されるブレイクポイントキー。

feature

  • 型: 'minWidth' | 'maxWidth'
  • デフォルト: 'minWidth'

CSSメディア機能。

デフォルト設定

{
  // ...
  viewport: {
    breakpoints: {
      desktop: 1024,
      desktopMedium: 1280,
      desktopWide: 1600,

      mobile: 320,
      mobileMedium: 375,
      mobileWide: 425,

      tablet: 768,
    },

    cookie: {
      expires: 365, // 365 days
      name: 'viewport',
      path: '/',
      sameSite: 'Strict',
      secure: true,
    },

    defaultBreakpoints: {
      desktop: 'desktop',
      mobile: 'mobile',
      tablet: 'tablet',
    },

    fallbackBreakpoint: 'desktop',

    feature: 'minWidth',
  },
  // ...
}

Tailwind CSS の設定例

{
  // ...
  viewport: {
    breakpoints: {
      xs: 320,
      sm: 640,
      md: 768,
      lg: 1024,
      xl: 1280,
      '2xl': 1536,
    },

    defaultBreakpoints: {
      desktop: 'lg',
      mobile: 'xs',
      tablet: 'md',
    },

    fallbackBreakpoint: 'lg'
  },
  // ...
}

ページごとの設定

definePageMeta を使用して、特定のページでグローバル設定を上書きできます。

<script setup>
definePageMeta({
  viewport: {
    breakpoints: {
      desktop: 1024,
      mobile: 320,
      tablet: 768
    },
    cookie: {
      name: 'viewport-per-page'
    }
    // Other fields will be inherited from the global configuration
  }
})
</script>

API

viewport.breakpoint

  • 型: String

現在のブレイクポイント。

viewport.breakpointValue

  • 型: Number
// Example using defaults.

viewport.breakpointValue('desktop') // Result: 1024.
viewport.breakpointValue('tablet') // Result: 768.
viewport.breakpointValue('mobile') // Result: 320.

viewport.isGreaterThan

  • 型: Boolean
// Example: viewport.breakpoint is "mobile".

viewport.isGreaterThan('mobile') // Result: false.
viewport.isGreaterThan('desktop') // Result: false.

viewport.isGreaterOrEquals

  • 型: Boolean
// Example: viewport.breakpoint is "mobile".

viewport.isGreaterOrEquals('mobile') // Result: true.
viewport.isGreaterOrEquals('desktop') // Result: false.

viewport.isLessThan

  • 型: Boolean
// Example: viewport.breakpoint is "desktop".

viewport.isLessThan('desktopWide') // Result: true.
viewport.isLessThan('mobile') // Result: false.

viewport.isLessOrEquals

  • 型: Boolean
// Example: viewport.breakpoint is "tablet".

viewport.isLessOrEquals('tablet') // Result: true.
viewport.isLessOrEquals('mobile') // Result: false.

viewport.match

  • 型: Boolean
// Example: viewport.breakpoint is "tablet".

viewport.match('tablet') // Result: true.
viewport.match('desktop') // Result: false.

viewport.matches

  • 型: Boolean
// Example: viewport.breakpoint is "mobileWide".

viewport.matches('tablet', 'mobileWide') // Result: true.
viewport.matches('mobile', 'tablet') // Result: false.

viewport.queries

  • 型: Object

生成されたメディアクエリを持つオブジェクト。

コントリビューション

このモジュールには CodeSandBox でオンラインで貢献できます

Edit nuxt-viewport

またはローカルで

  1. このリポジトリをクローンする
  2. yarn install または npm install を使用して依存関係をインストール
  3. yarn dev または npm run dev を使用して開発サーバーを起動

ライセンス

MITライセンス

Copyright (c) mvrlin [email protected]