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 データ処理を最適化する方法

推薦する

Linux の高性能ネットワーク IO と Reactor モデルの分析

目次1. 基本概念の紹介2. ネットワークIOの読み取りと書き込みのプロセス3. 5つのLinuxネ...

jQueryはフォーム検証機能を実装します

jQuery フォーム検証の例 / ユーザー名、パスワード、住所、電子メールの検証を含む下記の通り ...

MySQL が大規模トランザクションを避けるべき理由とその解決方法

何が大問題ですか?長時間実行され、長時間コミットされないトランザクションは、大規模トランザクションと...

クラウドサーバーはBaotaを使用してPython環境を構築し、Djangoプログラムを実行します。

目次PagodaをインストールするPythonランタイム環境を構成するPythonをインストールする...

src 属性と href 属性の違い

src と href には違いがあり、混同される可能性があります。 src は現在の要素を置き換える...

将来的に人気のあるウェブサイトのナビゲーションの方向

<br />今は情報爆発の時代であるだけでなく、サービス爆発の時代でもあります。それはす...

CentOS VPS に SSH 経由で MySQL をインストールする方法

yum install mysql-serverと入力します。続行するにはYを押してくださいインスト...

Centos8 で Apache httpd2.4.37 を使用して Web サーバーをインストールする詳細な手順

ステップ 1: yum install httpd -y #httpd サービスをインストールします...

jsは配列の平坦化を実装します

目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...

Docker で Maven プロジェクトをより速くビルドする

目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....

Docker プライマリ ネットワーク ポート マッピング構成

ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...

25 個の CSS フレームワーク、ツール、ソフトウェア、テンプレートを共有

スプライトカウダウンロード CSS リントダウンロード プレフィックスダウンロード 1140px C...

Reactスロットの使い方

目次必要コアアイデアReactでスロットを実装する2つの方法必要コンポーネントを自分で書きました。コ...

HTML に埋め込まれた Flash HTML ウェブページ コードに Flash ファイルを埋め込むソリューション (パート 1)

中国の習慣では、旧暦の1月15日より前に新年を祝います。ここで、庭にいる友人たちに新年の幸せを祈りた...

シンプルなHTMLとCSSの使い方の詳細な説明

HTML と CSS を含む JD.com のホームページの静的ページ効果を 3 日間で完成させます...