投稿者: みつき

  • Image Compare ViewerのiOSバグと解決方法

    はじめに

    Image Compare Viewerは、ビフォーアフターの画像比較を簡単に実装できる便利なライブラリです。しかし、iOSデバイスで使用する際に特有のバグが発生することがあります。

    解決方法

    バージョン1.5への ダウングレード

    最も確実な解決方法は、Image Compare Viewerのバージョンを1.5に戻すことです。

    npm install img-comparison-slider@1.5.0

  • CSSのtransform: translate()の違いを理解しよう – 50%移動の使い分け

    Web開発において、要素の位置調整は頻繁に行う作業の一つです。特に中央寄せは多くの場面で必要となりますが、transform: translate()の使い方によって結果が大きく変わります。

    今回は、transform: translate(-50%, -50%);transform: translate(-50%);、そしてtransform: translateX(-50%);の違いについて詳しく解説します。

    基本的な違い

    transform: translate(-50%, -50%);

    • X軸(水平方向):-50%移動
    • Y軸(垂直方向):-50%移動
    • 効果:要素を左に50%、上に50%移動

    transform: translate(-50%);

    • X軸(水平方向):-50%移動
    • Y軸(垂直方向):移動なし(0%)
    • 効果:要素を左に50%のみ移動

    transform: translateX(-50%);

    • X軸(水平方向):-50%移動
    • Y軸(垂直方向):移動なし
    • 効果:要素を左に50%のみ移動

    translate(-50%)とtranslateX(-50%)の関係

    実は、translate(-50%)translateX(-50%)全く同じ結果になります。

    /* これらは同じ効果 */
    .method1 { transform: translate(-50%); }
    .method2 { transform: translateX(-50%); }
    

    違いは記述の意図の明確性にあります:

    • translate(-50%):汎用的な書き方
    • translateX(-50%):X軸のみの移動であることを明示

    実際の使用例

    完全な中央寄せ

    .center-both {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    

    この方法は、要素を画面の完全な中央に配置したい場合に使用します。モーダルウィンドウやローディング画面などでよく見られるパターンです。

    水平方向のみの中央寄せ(2つの書き方)

    /* 方法1: translate()を使用 */
    .center-horizontal-1 {
      position: absolute;
      left: 50%;
      transform: translate(-50%);
    }
    
    /* 方法2: translateX()を使用 */
    .center-horizontal-2 {
      position: absolute;
      left: 50%;
      transform: translateX(-50%);
    }
    

    どちらも同じ効果ですが、translateX()を使うことで「X軸のみの移動」という意図が明確になります。

    どちらを使うべき?

    translate(-50%)を選ぶ場合

    • 汎用性重視:後でY軸の移動も追加する可能性がある
    • シンプルさ重視:短く書きたい
    • 既存コードとの統一:プロジェクト内で統一されている

    translateX(-50%)を選ぶ場合

    • 明確性重視:X軸のみの移動であることを明示したい
    • 保守性重視:他の開発者が見たときに意図が分かりやすい
    • 複数軸の操作:X、Y軸を個別に制御したい場合
    /* 個別制御の例 */
    .element {
      transform: translateX(-50%) translateY(20px) rotate(45deg);
    }
    

    まとめ

    効果の違い:

    • translate(-50%, -50%):完全な中央寄せが必要な場合
    • translate(-50%):水平方向のみの中央寄せが必要な場合
    • translateX(-50%):水平方向のみの中央寄せ(意図が明確)

    translate(-50%)とtranslateX(-50%)の使い分け:

    • 機能的には同じだが、コードの意図を明確にするならtranslateX()
    • プロジェクトの統一性チームの方針に合わせて選択

    適切な使い分けにより、より柔軟で効率的なレイアウトを実現できます。特にレスポンシブデザインにおいて、この技術は非常に有用です。

  • TailwindCSS:text-[]にCSS変数を使う際の注意点と解決方法

    TailwindCSSでCSS変数を使用する際、text-[var(--custom-variable)]のような記法で思わぬ問題に遭遇することがあります。この記事では、その問題の原因と効果的な解決方法を解説します。

    問題の概要

    TailwindCSSで以下のような記述をした場合:

    <div class="text-[var(--custom-size)]">テキスト</div>

    この記述は期待通りに動作しない可能性があります。なぜなら、Tailwindのtext-[]記法は自動的にcolorプロパティとして解釈される傾向があるためです。

    なぜこの問題が発生するのか

    TailwindCSSのtext-[]記法は、以下のような優先順位で解釈されます:

    1. 色の値として解釈text-[#ff0000]text-[red]など
    2. font-sizeとline-heightの解釈text-[16px/1.5]など

    CSS変数を使用した場合、Tailwindは変数の内容を事前に判断できないため、予期しない動作をする可能性があります。

    解決方法

    1. プロパティを明示的に指定する

    最も確実な方法は、設定したいCSSプロパティを明示的に指定することです:

    <!-- font-sizeを設定したい場合 -->
    <div class="[font-size:var(--custom-size)]">テキスト</div>
    
    <!-- line-heightを設定したい場合 -->
    <div class="[line-height:var(--custom-height)]">テキスト</div>
    
    <!-- 複数のプロパティを同時に設定 -->
    <div class="[font-size:var(--custom-size)] [line-height:var(--custom-height)]">
      テキスト
    </div>

    2. Tailwindの設定ファイルで定義する

    tailwind.config.jsでCSS変数を定義し、Tailwindのクラス名として使用する方法:

    // tailwind.config.js
    module.exports = {
      theme: {
        extend: {
          fontSize: {
            'custom-sm': 'var(--text-sm)',
            'custom-md': 'var(--text-md)',
            'custom-lg': 'var(--text-lg)',
          },
          lineHeight: {
            'custom-tight': 'var(--line-height-tight)',
            'custom-normal': 'var(--line-height-normal)',
          }
        }
      }
    }

    使用例:

    <div class="text-custom-md leading-custom-normal">テキスト</div>

    まとめ

    TailwindCSSでCSS変数を使用する際は、text-[]記法の制限を理解し、適切な方法を選択することが重要です。プロジェクトの要件に応じて、最適な解決方法を選択してください。

    明示的なプロパティ指定やTailwindの設定ファイルでの定義など、複数の選択肢があることを覚えておけば、柔軟で保守性の高いスタイリングが可能になります。

  • jQueryのfadeInが重い問題の解決法

    モーダルのフェードイン処理で動作が重くなる問題にハマったので、解決方法を記録しておきます。

    問題の概要

    jQueryのfadeIn()メソッドを使ってモーダルを表示する際、CSSでtransitionプロパティを設定していると、アニメーションが二重に動作してしまい、パフォーマンスが悪化することがあります。

    変更前のコード

    JavaScript(jQuery)

    $('.open-btn').on('click', function () {
        $('.modal').fadeIn().css('display', 'flex');
    });
    $('.close-btn').on('click', function () {
        $('.modal').fadeOut();
    });

    CSS

    .modal {
        position: fixed;
        width: 100vw;
        height: 100svh;
        z-index: 999999;
        left: 0;
        top: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        overflow: scroll;
        display: none;
        background: black;
        transition: .3s; /* ←この行が問題 */
    }

    問題の原因

    上記のコードでは以下の問題が発生していました:

    • アニメーションの競合: jQueryのfadeIn()とCSSのtransitionが同時に動作
    • パフォーマンス低下: 二重のアニメーション処理による負荷増加
    • 予期しない動作: 意図しないアニメーション効果の発生

    解決方法

    CSSのtransitionプロパティを削除するだけで解決できます。

    変更後のCSS

    .modal {
        position: fixed;
        width: 100vw;
        height: 100svh;
        z-index: 999999;
        left: 0;
        top: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        overflow: scroll;
        display: none;
        background: black;
        /* transition: .3s; ←この行を削除 */
    }

    JavaScript(jQuery)

    // 変更なし
    $('.open-btn').on('click', function () {
        $('.modal').fadeIn().css('display', 'flex');
    });
    $('.close-btn').on('click', function () {
        $('.modal').fadeOut();
    });

    まとめ

    jQueryのアニメーションメソッドを使用する際は、CSSのtransitionプロパティとの競合に注意が必要です。シンプルな解決策として、不要なtransitionを削除するだけで大幅にパフォーマンスが改善されることがあります。

  • WordPress引越し時にHTTP AuthのBasic認証が通らない問題の解決方法

    WordPressサイトを引越しした際、HTTP-Authプラグインで設定したBasic認証が機能しなくなることがあります。正しいユーザー名とパスワードを入力しても認証が通らないので対策が必要です。

    方法1: プラグインの無効化してから引越し

    1. 引越し前にプラグインを無効化
    2. 引越し作業
    3. 引越し後にプラグイン有効化、再設定

    方法2: データベースから設定値を削除

    引越し作業をやり直したくない時に有効です。

    1. WordPressのデータベース接続
    2. wp_options>http_auth_settingsの値削除
    3. プラグインから再設定

    まとめ

    WordPress引越し時のBasic認証問題は、事前の準備により回避できます。最も確実な方法は方法1のプラグイン無効化・有効化です。データベース操作が必要な場合は、必ずバックアップを取ってから実行してください。

  • [CSS]nth-of-typeで最初・最後のn番目まで指定する方法

    最初の2番目まで指定

    .hoge:nth-of-type(-n+2) {
    
    }

    最後の3番目まで指定

    .hoge:nth-of-type(n+3) {
    
    }
  • [jQuery]fadeInが重いときの対処法

    少しはまったので備忘録

    変更前

    jQuery

    $('.open-btn').on('click', function () {
    	$('.modal').fadeIn().css('display', 'flex');
    });
    $('.close-btn').on('click', function () {
    	$('.modal').fadeOut();
    });

    CSS

    .modal {
        position: fixed;
        width: 100vw;
        height: 100svh;
        z-index: 999999;
        left: 0;
        top: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        overflow: scroll;
        display: none;
        background: black;
        transition: .3s;
    }

    変更後

    jQueryは変えずにCSSのtransitionを削除

    CSS

    .modal {
        position: fixed;
        width: 100vw;
        height: 100svh;
        z-index: 999999;
        left: 0;
        top: 0;
        display: flex;
        align-items: center;
        justify-content: center;
        overflow: scroll;
        display: none;
        background: black;
        /* transition: .3s; ここを削除  */
    }