異なるブラウザ間で互換性のあるテキスト配置を実現する CSS

異なるブラウザ間で互換性のあるテキスト配置を実現する CSS

フォームのフロントエンド レイアウトでは、テキスト ボックスのプロンプト テキストを両端に揃える必要があることがよくあります。次に例を示します。

もっと大まかなアプローチとしては、余白で分離する必要があるテキストにタグを追加し、各単語の余白を個別に制御する方法があります。この方法は、スペースやプレースホルダーを直接追加するよりも正確で、私は以前にもこの方法を試したことがあります。しかし、さらに書いていくうちに、これを抽象化して、より多くのシナリオで使用できるのではないかと考えるようになりました。コードの見栄えを良くしますか?メンテナンスコストが削減されますか?

1. 最初に思い浮かぶのは、問題がCSSで直接解決できるかどうかだ

CS

.test-justify {
    テキスト配置: 両端揃え;
}

html

 <div class="test-justify">
        テストテキスト</div> 

まあ、 text-align:justifyまったく効果がないので、テキストの一部でテストしてみたところ、効果は次のようになりました。

このプロパティは、段落の両端のテキストを揃えるためのものであることがわかりました。次に、 text-align-last: justifyプロパティを試してください。

CS

.test-justify {
    テキスト配置: 両端揃え;
} 

効果は得られますが、欠点は IE および Safari ブラウザと完全に互換性がないことです。

2. 次に考えてみましょう。上記の実装には互換性の問題があるため、2、3、4 などの長さのテキストごとに別々の CSS クラスを記述して問題を解決できますか? フォーム内のテキスト ボックスのプロンプトには多くの単語が含まれないためです。

CS

div {
    幅: 100ピクセル;
}
.w2 {
    文字間隔: 2em;
}
.w3 {
    文字間隔: 0.5em;
}

html

<div class="w2">テスト</div>
<div class="w3">テスト済み</div>
<div>テストが近づいています</div> 


このソリューションは問題を解決でき、ほとんどのシナリオに対応できると思われますが、残念ながら両端が完全に一致しておらず、特殊な表示状況でのニーズを満たすことができません。今は脇に置いておいて、引き続き試してみましょう。

2. 上記は純粋な CSS 実装です。次に、CSS と DOM を組み合わせて統合ソリューションを作成できるかどうかを確認しましょう。

html

<div class="test-justify">
    テストテキスト <span></span>
</div>

CS

.テスト正当化{
    テキスト配置: 両端揃え;
}
スパン {
    表示:インラインブロック;
    パディング左:100%;
} 


考えてみると少しワクワクします。これは IE と Safari と完全に互換性があります。このソリューションは、実際には最初の段落の配置ソリューションの拡張です。スペースを使用して単語の分離を強制し、span を使用して最後の行を偽装します (test-justify では最後の行は配置されません)。

ほとんどの場合、テキストはバックエンドから読み込まれるため、スケーラビリティを向上させるには、このソリューションを最適化する必要があります。

たとえば、.net core razor ビューは、<label asp-for="Email"></label> に記述されているモデルの表示名を読み込みます。

小さな js を追加するだけで、すべてのシナリオと互換性を持つようになります。
CS

div {
    幅: 300ピクセル;
    境界線: 1px実線 #000;
}
.テスト正当化{
    テキスト配置: 両端揃え;
}
スパン {
    表示:インラインブロック;
    パディング左:100%;
}

html

<div class="test-justify">
    テストテキスト</div>

js

var $this = $(".test-justify")
, justifyText = $this.text().trim()
、afterText = "";
(var i = 0; i < justifyText.length; i++) {
    afterText += justifyText[i] + " ";
}
afterText = afterText.trim() + "<span></span>";
$this.html(afterText).css({ "height": $this.height() / 2 + "px" }); 

さて、このソリューションは主流のブラウザをサポートできるはずですが、欠点は、js を介して調整されるため、更新時によく見ると、テキストの配置 (点滅) の処理が表示され、エクスペリエンスがあまり良くないため、互換性を持たせるようにしましょう。
IEとSafariだけがtext-align-last: justifyをサポートしていないので、これら2つのブラウザのみを考慮し、最後の解決策を呼び出します。

関数myBrowser() {
    var userAgent = navigator.userAgent;

    //ブラウザのバージョンを確認します var isOpera = userAgent.indexOf("Opera") > -1; 
    var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !isOpera; 
    var isEdge = userAgent.toLowerCase().indexOf("edge") > -1 && !isIE; 
    var isIE11 = (userAgent.toLowerCase().indexOf("trident") > -1 && userAgent.indexOf("rv") > -1);

    if (/[Ff]irefox(\/\d+\.\d+)/.test(userAgent)) {
        「Firefox」を返します。
    } それ以外の場合 (isIE) {
        「IE」を返します。
    } それ以外の場合 (isEdge) {
        「IE」を返します。
    } それ以外の場合 (isIE11) {
        「IE」を返します。
    } そうでない場合 (/[Cc]hrome\/\d+/.test(userAgent)) {
        「Chrome」を返します。
    } そうでない場合 (/[Vv]ersion\/\d+\.\d+\.\d+(\.\d)* *[Ss]afari/.test(userAgent)) {
        「Safari」を返す
    } それ以外 {
        「不明」を返す
    }
}

var ブラウザ = myBrowser();
if (ブラウザ == "IE" || ブラウザ == "Safari") {
    var $this = $(".test-justify")
        , justifyText = $this.text().trim()
        、afterText = "";
    (var i = 0; i < justifyText.length; i++) {
        afterText += justifyText[i] + " ";
    }
    afterText = afterText.trim() + "<span></span>";
    $this.html(afterText).css({ "height": $this.height() / 2 + "px" })
}

ハハハハ、完璧!

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  Vueカスタム命令の詳細な説明

>>:  HTML 固定タイトル列、タイトル ヘッダー テーブル固有の実装コード

推薦する

擬似分散グラフィックを実現するための VMware 構成 Hadoop チュートリアル

1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...

Dockerfile テキストファイルの使用例の分析

Dockerfile は、イメージをビルドするために使用されるテキスト ファイルです。テキスト コン...

Vue プロジェクトの最初の画面のパフォーマンス最適化コンポーネントの実践ガイド

目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...

Vue3 シングルファイルコンポーネントのスタイル機能の詳細な説明

目次スタイルスコープスタイルモジュール状態駆動型動的CSS要約するスタイルスコープ注意事項:スタイル...

Spring Boot Docker パッケージング ツールの概要

目次スプリングブートDocker spring-boot-maven-プラグインSpotify Ma...

初心者がソースコードからMySQLのデッドロック問題を理解する

夜遅くまで何度も困難なシングルステップデバッグを行った後、ようやく理想的なブレークポイントを見つけま...

CSS3の新しい背景プロパティの詳細な説明

これまで、CSS の背景の属性には、color、image、repeat、attachment、po...

プロファイルを使用して遅い SQL を分析する MySQL の詳細な説明 (グループ左結合はサブクエリよりも効率的です)

プロファイルを使用して遅いSQLを分析するMySQL の SQL パフォーマンス アナライザーの主な...

MySQL共通ストレージエンジンの機能と使用方法の詳細な説明

この記事では、一般的な MySQL ストレージ エンジンの機能と使用方法を例を使って説明します。ご参...

この記事では、Vue 3.0 レスポンシブの使い方を説明します。

目次ユースケースリアクティブAPI関連プロセス反応的なcreateReactiveObjectはレス...

Linux で履歴コマンドを表示および実行する方法

履歴コマンドを表示し、指定されたコマンドを実行します owen@owen:~/owen/softwa...

Node.js でメモリ効率の高いアプリケーションを作成する方法

目次序文問題: 大きなファイルのコピーNodeJS のストリームとバッファバッファストリーム解決策 ...

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...

Reactイベントメカニズムソースコード分析

目次原理ソースコード分析委任されたイベントバインディングすべてのサポートされているイベントを聴くネイ...

MySQLで全角文字と半角文字を保存する場合の違い

残念ながら、社内の IM のテスト中に MYSQL_DATA_TRUNCATED エラーが再び発生し...