vfit — Vue 3 向け軽量スケーリングと位置合わせソリューション
概要
vfitは「Vue 3 の軽量スケールと位置合わせソリューション」を目指したライブラリです。プラグインを通してアプリ全体に対するスケール値(設計解像度に対する実表示比)を提供し、FitContainerコンポーネントで内部の要素をそのスケールに従って描画します。親コンテナにposition: relative(またはabsolute)を指定するだけで使い始められ、%(相対)とpx(スケール対象)の2種類の座標単位を切り替えて、中央寄せや固定ピクセルレイアウトなど状況に応じた配置が可能です。セットアップは npm install と createFitScale の呼び出し、style.css の読み込みだけで完了します(簡易な導入手順を README に記載)。公式サイトとドキュメントも用意されており、小規模〜中規模のUIで手早くレスポンシブ対応を実現するのに向いています。
リポジトリの統計情報
- スター数: 3
- フォーク数: 0
- ウォッチャー数: 3
- コミット数: 5
- ファイル数: 9
- メインの言語: TypeScript
主な特徴
- Vue 3プラグインとしてグローバルなスケール値を提供し、コンポーネント内で一貫した拡縮を実現
- FitContainerコンポーネントで画面内要素を設計解像度に基づいて拡縮・配置
- 位置単位に%とpxの2種を用意し、相対配置と固定ピクセル配置を使い分け可能
- シンプルな導入(npm/スタイル読み込み)と軽量な実装方針
技術的なポイント
vfitのコアは「設計解像度(designWidth, designHeight)に基づいて、実際の描画領域に対するスケールを算出し、そのスケールを使って子要素の見た目を一貫させる」ことです。READMEにある createFitScale({ target, designHeight, designWidth, scaleMode: ‘auto’ }) という初期化パターンから、主に以下の技術的要素が読み取れます。
-
スケール算出
- designWidth/designHeight とターゲット領域の実寸(要素のクライアント幅・高さ)を比較し、横または縦のどちらに合わせるか(fitモード)を決定してスケール係数を算出する「アスペクト比に基づく縮尺計算」が行われる想定です。scaleMode が ‘auto’ の場合は、利用可能領域に対して最も適したスケールを自動選択するロジックが働くと推測できます。
-
リアクティブな監視
- ウィンドウリサイズやコンテナのサイズ変化に追従してスケールを更新する必要があるため、ResizeObserver / window resize イベント、あるいは Vue のリアクティブ性を使った実装が考えられます。これにより、画面回転やウィンドウリサイズ時にもレイアウトを保持します。
-
描画の手法
- FitContainer は内部の座標系を設計解像度に合わせ、CSS の transform(scale)または計算した幅・高さを使って縮尺を適用する設計が自然です。transform-origin を左上(0 0)に固定すると、設計座標(px)をそのままスケールして正しい位置に配置できます。% 単位は親要素に対する割合で指定されるため、スケールの影響を受けない設計が可能です。
-
単位の扱い
- README にある % と px の使い分けは重要です。% は相対位置(センタリングや比率位置)に向き、px は設計上での正確なピクセル位置/サイズが必要な場合に用います。内部では px 指定をスケール係数で乗算して変換描画する処理が入るはずです。
-
導入の簡便さとスタイル
- style.css を同梱しており、基本的なリセットや FitContainer に必要な CSS を提供しているため、導入は簡単です。Vue 3 のプラグイン機構を使う createFitScale の API 設計は、Vue の provide/inject を使ってグローバルにスケール値を渡す実装である可能性が高く、子コンポーネント側は inject でスケールを受け取り、計算やスタイルに反映できます。
-
TypeScript と軽量化
- リポジトリは TypeScript で書かれており、型安全な API を提供している点は好印象です。コミット数が少なくファイル数も小さいため、機能はコンパクトにまとまっており、バンドルサイズも小さく抑えられていると予想されます。
-
拡張性・注意点
- フォントや画像のスケーリング、ピクセルパーフェクトを期待する UI では、デバイスピクセル比(devicePixelRatio)やサブピクセル処理に配慮が必要です。また transform による拡縮はクリアなピクセル表示を損なう場合があるため、必要に応じて画像やアイコンを別扱いにする工夫が有効です。
実際の導入では、親コンテナに position をセットする点(relative 推奨)と、% と px の使い分けのルールをプロジェクト内で統一すると、期待通りの表示が得やすくなります。
プロジェクトの構成
主要なファイルとディレクトリ:
- .gitattributes: file
- .gitignore: file
- README.md: file
- docs: dir
- package-lock.json: file
…他 4 ファイル
(リポジトリ全体はファイル数が少なく、パッケージ本体・スタイル・ドキュメントに分かれているシンプルな構成です。README にサンプルと導入例が記載されているため、まずは公式サイトや docs を参照して試すのが良いでしょう。)
まとめ
軽量で使いやすいVue 3向けのスケール&位置合わせライブラリ。導入が簡単で小規模プロジェクトに最適。
リポジトリ情報:
- 名前: vfit
- 説明: Vue 3 的轻量缩放与定位解决方案 保持比例与位置一致,快速适配不同分辨率
- スター数: 3
- 言語: TypeScript
- URL: https://github.com/v-plugin/vfit
- オーナー: v-plugin
- アバター: https://avatars.githubusercontent.com/u/33983165?v=4
READMEの抜粋:
vfit
官网:https://web-vfit.netlify.app
作者:一颗烂土豆
Vue 3 的轻量缩放与定位解决方案。通过插件提供全局缩放值,并内置 FitContainer 组件,让页面元素在不同分辨率下保持比例与位置一致。
安装与初始化
npm i vfit
// main.ts
import { createFitScale } from 'vfit'
import 'vfit/style.css'
app.use(createFitScale({ target: '#app', designHeight: 1080, designWidth: 1920, scaleMode: 'auto' }))
快速上手
- 父容器需设置定位属性:
position: relative(推荐)或absolute - 两种坐标单位:
%:位置不随缩放变化,适合居中/相对位置px:位置随缩放乘积变化,适合固定像素布局
居中(百分比)
<template...