Skip to the content.

pixelperfect-tool npm version CI tests

Модуль для накладывания скриншотов макетов поверх верстаемых страниц. Позволяет:

История версий.

Горячие клавиши

Работают, когда фокус на <body>. Результат настроек сохраняется в localStorage.

Прямое подключение скрипта

<script>
  window.pixelperfect = {
    breakpoints: [320, 768, 1260, 1380, 1600],
    folder: 'img/pixelperfect',
  };
</script>
<script
  src="https://efiand.github.io/pixelperfect-tool/pixelperfect.min.js"
  defer
></script>

Отсутствие в production-режиме изображений PP и кода подключения скрипта – настраивается разработчиком отдельно исходя из возможностей его сборки.

Подключение модуля

Установка: npm i -DE pixelperfect-tool.

Модуль инициализирует библиотеку только один раз независимо от количества вызовов.

Добавление в систему сборки как есть

window.pixelperfect = {
  breakpoints: [320, 768, 1260, 1380, 1600],
  folder: 'img/pixelperfect',
};

export * from 'pixelperfect-tool/loader.js';

Использование лоадера

import { loadPixelperfect } from 'pixelperfect-tool';

loadPixelperfect({
  breakpoints: [320, 768, 1260, 1380, 1600],
  folder: 'img/pixelperfect',
});

Vue-компонент

Renderless-компонент с возможностью добавления опций.

<template>
  <pixelperfect-tool :options="pixelperfectOptions" />
</template>

<script lang="ts" setup>
  import type { PixelperfectOptions } from 'pixelperfect-tool';
  import PixelperfectTool from 'pixelperfect-tool/vue';

  const pixelperfectOptions: PixelperfectOptions = {
    breakpoints: [320, 768, 1260, 1380, 1600],
    folder: 'img/pixelperfect',
  };
</script>

Nuxt-модуль

Модуль регистрирует глобальный компонент PixelperfectTool — renderless-обёртка, в onMounted вызывает loadPixelperfect() только в dev (import.meta.dev). Нормализация localStorage.ppOffsets выполняется внутри loadPixelperfect() в основной либе.

Компонент нужно явно добавить в layout или страницу. Рекомендуется v-if="import.meta.dev".

Подключение модуля в nuxt.config.ts:

const dev = process.env.NODE_ENV === 'development';

export default defineNuxtConfig({
  modules: ['pixelperfect-tool/nuxt'],

  // Скриншоты только в dev; baseURL должен совпадать с `folder` (дефолт — `pixelperfect`)
  nitro: {
    publicAssets: [
      ...(dev
        ? [
            {
              baseURL: '/pixelperfect',
              dir: 'dev/pixelperfect',
            },
          ]
        : []),
    ],
  },
});

Пример в layout (дефолты: folder: 'pixelperfect', ext: 'jpg', breakpoints: [320, 768, 1240]):

<template>
  <div>
    <slot />
    <pixelperfect-tool v-if="isDev" />
  </div>
</template>

<script setup lang="ts">
const isDev = import.meta.dev;
</script>

Переопределения — через :options (например, другой folder или ext); значение folder должно совпадать с baseURL в nitro.publicAssets.

Overlay по умолчанию выключен — включите hotkey P (фокус на <body>).

Настройки

Передаются через объект window.pixelperfect. Все настройки опциональны, и если дефолтные подходят, то необходимости создавать объект нет.

Изображения

Формат путей к фоновым изображениям макетов (значения Настроек) – /<folder>/<page>-<breakpoint>.<ext>.