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

推薦する

ストリーマーボタンの効果を実現するCSS3アニメーション

CSS3 を学習する過程で、CSS3 属性を使用すると多くのクールな効果を簡単に実現できることが分か...

MySQL データベースの基本的な SQL ステートメントの概要

この記事では、例を使用して、Mysql データベースの基本的な SQL ステートメントについて説明し...

JVMシリーズのメモリモデルの詳細な説明

目次1. メモリモデルとランタイムデータ領域2. マインドマップと凡例3. オブジェクトはJVMから...

流れと動的なライン効果を実現する純粋なCSSコード

アイデア:外側のボックスは背景を設定し、内側のボックスは背景の幅と高さを設定し、ボックスを動かすアニ...

CentOS 6.5 インストール mysql5.7 チュートリアル

1. 新機能MySQL 5.7 はエキサイティングなマイルストーンです。デフォルトの InnoDB ...

Jenkins + Docker + ASP.NET Core の自動デプロイメントの問題について (落とし穴を避ける)

このブログを書くつもりはなかったのですが、実際の操作中に、ネットワークの問題に圧倒されたこと (ネッ...

ウェブページを作成する際に注意すべき点

--ホームページのバックアップ1.txtテキスト2. 画像をスキャンする3. PSDデザイン原画(A...

入力と画像を揃えるためにvertical-alignを使用します

input と img を同じ行に配置すると、img タグが常に input より 1 つ上になり、...

MySQL の日付型の単一行関数コードの詳細な説明

MySQL の日付型単一行関数: CURDATE()またはCURRENT_DATE()は現在の日付を...

Linux/CentOS サーバー セキュリティ構成の一般ガイド

Linux はオープン システムです。インターネット上には、既成のプログラムやツールが多数存在します...

SpringBootをDockerにデプロイし、jarパッケージを置き換える方法の詳細な説明

目次プロジェクトディレクトリDockerファイルファイルの展開画像を生成するコンテナを起動するウェブ...

MySQL主キー命名戦略関連

最近、データライフサイクル管理の詳細を整理していたときに、小さな問題を発見しました。それは、MySQ...

フロントエンドはJavaScriptを通じてCADグラフィックスの詳細を作成および変更します。

目次1. 現状2. JSでCADグラフィックを作成および変更する2.1 サポートされているCADエン...

MySQL でよく使用されるステートメントの包括的な概要 (必読)

以下にまとめたナレッジポイントはどれもよく使われる貴重な情報ばかりですので、ぜひ上手に集めてください...

フロントエンドHTMLスキン変更機能の実装コード

透明を含む5つの肌の色を変更するには50行のコードが必要です最初にコードをお渡ししますので、ご自身で...