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

推薦する

JSONオブジェクトのキーを置き換える最良の方法

JSON (JavaScript Object Notation、JS Object Notatio...

一般的なフロントエンドJavaScriptメソッドのカプセル化

目次1. 値を入力し、そのデータ型を返す** 2. アレイ重複排除3. 文字列の重複排除4. ディー...

小さなプログラムが天井に張り付いてしまう問題を完璧に解決するためにposition:stickyを使用する方法

最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...

HTML マルチヘッダーテーブルコード

1. マルチヘッダーテーブルコードコードをコピーコードは次のとおりです。 <!DOCTYPE ...

iptables の再起動後に Docker の iptables ルールの完全なプロセスが失われる

原因と結果1. ansibleコマンドを使用してジャンプサーバー上のマシンBをテストすると、次のエラ...

デザイン理論:人間中心のグリーンデザイン

「人間中心」と「グリーンデザイン」という2つの視点から考える——デザイン業界の同僚とも議論する2つの...

Flash での HTML と CSS の適用

Flash での HTML と CSS の適用:同僚の Den が Flash で HTML と C...

LDAP ユーザー認証を使用するように Linux を構成する方法

私は CentOS に実装された LDAP ユーザー管理を使用しています。これはインターネット上のほ...

...

NodeJS は画像テキスト分割を実現します

この記事では、画像テキストセグメンテーションを実装するためのNodeJSの具体的なコードを参考までに...

Vueは小さなカウントダウン機能を実装します

多くのプロジェクトでは、検証コードの送信など、カウントダウン機能を実装する必要があります。ここで、簡...

Vueはシンプルなショッピングカートの例を実装します

この記事では、Vueの具体的なコードを共有して、簡単なショッピングカートを実装します。具体的な内容は...

JS は Web ページナビゲーションバーの特殊効果を実現します

この記事では、ネイティブ JS を使用して実装された実用的な Web ナビゲーション バー効果を紹介...

aタグのname属性とid属性を使用してページ内を移動する方法

以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...

印刷広告を成功させるための「3I」基準

国内の多くの広告主にとって、印刷広告の制作と評価は、しばしばかなり主観的です。自分の感情や美的感覚に...