js が CSS 属性 (値) のサポートを決定して通知する状況の分析

js が CSS 属性 (値) のサポートを決定して通知する状況の分析

新しい CSS 機能を使用する場合、その互換性は常に考慮されます。おそらく、その互換性、どのブラウザーが適しているか、どのブラウザーが適していないかを検索し、既知の状況下でその機能を使用するかどうか、またはどのように使用するかを選択します。これは、使用しようとしている既知のブラウザーで行う選択です。

しかし、私たちが開発したページをユーザーがどのブラウザで開くかはわからないことがよくあります。この場合、実際のブラウザの使用状況に基づいて、どのような戦略を採用するかを決定する必要があります。このとき、使用したい CSS 属性が有効かどうかを判断するために js を使用する必要があります。

CSS 属性の互換性には 2 つのタイプがあります。1 つは位置などの CSS 属性自体であり、もう 1 つは位置属性のスティッキー値などの CSS 属性値です。

ターゲット

特定の CSS プロパティ (値) が有効かどうかを知りたい場合、通常は結果が「有効」または「無効」であると伝えられます。ただし、ブラウザ専用の CSS プロパティ、つまりブラウザ プレフィックスを追加した後にのみ有効になる CSS プロパティがあります。

したがって、現在のブラウザでは、プレフィックス付きまたはプレフィックスなしの CSS プロパティが有効かどうかだけでなく、どのプロパティが有効になるかを知る必要があります (各プレフィックスを入力値として自分で確認するのは面倒です。インターネット上の多くの資料では、指定した CSS がサポートされているかどうかと返されるブール値が説明されています)。

したがって、次の方法では、プレフィックスなしで CSS 属性 (値) を入力値として使用するだけで、現在のブラウザーがサポートするプレフィックスが何であるか、またはプレフィックスがまったく必要ないかどうかがわかります。

CSSプロパティ名を確認する

このメソッドは、CSS 属性自体、つまり CSS を記述するときに : の左側にある属性名をチェックします。戻り値が空の場合、ブラウザがそのプロパティをサポートしていないことを意味します。

/**
 * ブラウザにサポートされている特定の CSS プロパティを通知します* @param {String} key - CSS プロパティ。プロパティの名前です。プレフィックスは不要です* @returns {String} - サポートされているプロパティ*/
関数validateCssKey(キー) {
    const jsKey = toCamelCase(key); // 一部の CSS プロパティはハイフンで区切られます if (jsKey in document.documentElement.style) {
        リターンキー;
    }
    validKey = '' とします。
    // 属性名は js のプレフィックスの形式、属性値は css のプレフィックスの形式です // 試してみたところ、Webkit は先頭文字を小文字にした webkit にもできることがわかりました
    定数プレフィックスマップ = {
        Webkit: '-webkit-',
        モズ: '-moz-',
        ms: '-ms-',
        お: 「-お-」
    };
    (const jsPrefix in prefixMap) {
        const styleKey = toCamelCase(`${jsPrefix}-${jsKey}`);
        document.documentElement.style の styleKey の場合 {
            有効なキー = prefixMap[jsPrefix] + キー;
            壊す;
        }
    }
    有効なキーを返します。
}

/**
 * ハイフン付き文字列をキャメルケース文字列に変換します*/
関数 toCamelCase(値) {
    戻り値.replace(/-(\w)/g, (一致, 文字) => {
       letter.toUpperCase() を返します。
   });
}

CSSプロパティ値の確認

このメソッドは、CSS 属性の値、つまり CSS を記述するときの : の右側の値をチェックします。戻り値が空の場合、ブラウザが属性値をサポートしていないことが証明されます。

ここには 2 つのバージョンがあります。1 つは es6 バージョンで、もう 1 つは基本的な js バージョンです。

私はただ意地悪で2つのバージョンを書きました。

/**
 * ブラウザが特定の CSS 属性値をサポートしているかどうかを確認します (es6 バージョン)
 * @param {String} キー - チェックするプロパティ値が属する CSS プロパティの名前 * @param {String} 値 - チェックする CSS プロパティ値 (プレフィックスなし)
 * @returns {String} - ブラウザでサポートされているプロパティ値を返します */
関数validateCssValue(キー、値){
    const プレフィックス = ['-o-', '-ms-', '-moz-', '-webkit-', ''];
    const prefixValue = prefix.map(item => {
        アイテム + 値を返します。
    });
    定数要素 = document.createElement('div');
    eleStyle 要素のスタイルを定義します。
    // 各プレフィックスを適用し、最後にプレフィックスなしのケースを適用して、どのケースがブラウザで機能するかを確認します。 // これが、プレフィックスの最後の要素を '' にするのが最適な理由です。
    prefixValue.forEach(item => {
        eleStyle[キー] = 項目;
    });
    eleStyle[キー]を返します。
}

/**
 * ブラウザが特定の CSS プロパティ値をサポートしているかどうかを確認します * @param {String} キー - チェックするプロパティ値が属する CSS プロパティ名 * @param {String} 値 - チェックする CSS プロパティ値 (プレフィックスなし)
 * @returns {String} - ブラウザでサポートされているプロパティ値を返します */
関数validateCssValue(キー、値){
    var プレフィックス = ['-o-', '-ms-', '-moz-', '-webkit-', ''];
    var プレフィックス値 = [];
    (var i = 0; i < プレフィックス長さ; i++) {
        prefixValue.push(prefix[i] + 値)
    }
    var 要素 = document.createElement('div');
    var eleStyle = 要素.style;
    (var j = 0; j < prefixValue.length; j++) {
         eleStyle[キー] = prefixValue[j];
    }
    eleStyle[キー]を返します。
}

要約する

属性名や属性値を確認するメソッドを明示的に呼び出さずに、上記の 2 つの形式の CSS 互換性を単純にマージし、CSS を直接渡してブラウザーにサポート状況を通知することができます。

関数validCss(キー,値){
    定数validCss = validCssKey(キー);
    有効なCSSの場合
        有効なCSSを返します。
    }
    戻り値:validateCssValue(キー、値);
}

js がサポートされる CSS 属性 (値) を決定して通知する方法の分析に関するこの記事はこれで終わりです。js が CSS 属性値を決定する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

<<:  Cronジョブを使用してCpanelでPHPを定期的に実行する方法

>>:  パーティショニングを使用して数十億のデータに対する MySQL データ処理を最適化する方法

推薦する

Nginx ソースコード調査における nginx 電流制限モジュールの詳細な説明

目次1. 電流制限アルゴリズム2. nginxの基礎知識4. 実戦要約する高並行性システムには、キャ...

CSS3 で @media を使用して Web ページの適応を実現するためのサンプル コード

現在、コンピュータモニターの画面解像度はますます高くなる傾向にありますが、携帯電話などのモバイルデバ...

Vueは虫眼鏡付きの検索ボックスを実装します

この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...

Docker ベースの Selenium 分散環境の構築

1.画像をダウンロードするdocker pull selenium/hub docker pull ...

Vueはフィルターを使用して日付をフォーマットします

この記事では、フィルターを使用して日付をフォーマットするVueの具体的なコードを参考までに紹介します...

HTML タイトル属性をラップする方法

数日前にプログラムを書いていたとき、プロンプト情報 (TITLE) を新しい行で囲みたいと思いました...

Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...

CSS の Flex レイアウトを使用してシンプルな縦棒グラフを作成する方法

以下は、Flex レイアウトを使用した棒グラフです。 HTML: <div class=&qu...

vue+echartsチャートの使用に関する問題記録

序文echarts は私が最もよく使用するチャート作成ツールであり、非常に完全なエコシステムとコンテ...

跳ねるボールを実現するネイティブjs

思いつきで、小さなボールが跳ね返るケーススタディを書いてみました。具体的な内容は以下のとおりです。主...

ユニアプリプロジェクトでのウォーターフォールレイアウトの実装

GitHubアドレス、気に入ったらスターを付けてくださいプラグインのプレビューチュートリアル1. プ...

MySQLの明示的な型変換の簡単な分析

CAST関数前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙...

Linux での一般的なシェル スクリプト コマンドと関連知識

目次1. 覚えておくべき知識1. 変数タイプ2. シェル変数の説明3. シングルクォート、ダブルクォ...

MySQL ストアド プロシージャ関連の権限変更の問題

MySQL データベースを使用すると、他のユーザーが定義したストアド プロシージャを他のユーザーが変...

Vue の大容量ファイルアップロードとブレークポイント再開アップロードの実装

目次ファイルアップロードのための2つのソリューションファイルストリーム(フォームデータ)に基づくクラ...