異なるブラウザ間で互換性のあるテキスト配置を実現する 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 Esxi のルート パスワードを忘れた後に正常に取得する方法

CentOS6 インストール ディスク (任意のバージョン) を準備するか、別の pnux インスト...

Mysql Explainコマンドの使用と分析

mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...

自動開始および停止コマンドを適用するには、Docker サービスを再起動します (推奨)

Docker サービス アプリケーションを再起動するコマンドを見てみましょう。具体的な内容は次のと...

HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

HTML onfocus イベント属性定義と使用法onfocus 属性は、要素がフォーカスを受け取っ...

重複したMySQLテーブルをマージして削除する簡単な方法

シナリオ:クロールされたデータは、別のメインテーブルと同じ構造を持つデータテーブルを生成するため、マ...

js でオブジェクトを作成するさまざまな方法とその長所と短所のまとめ

目次初期作成方法ファクトリーパターンコンストラクターパターンコンストラクタパターンの最適化プロトタイ...

CSSはBEM命名規則の実践を使用する

クラスを見るとき、どのような情報を得たいですか?このクラスはどこで使用され、その機能は何ですか?この...

絵文字と問題解決のためのMySQL/Javaサーバーサポートの詳細な説明

この記事では、絵文字用の MySQL Java サーバーのサポートと問題解決方法について説明します。...

CN2、GIA、CIA、BGP、IPLC はどういう意味ですか?

CN2ラインとは何ですか? CN2 は、China Telecom Next Carrier Ne...

MySQL をデプロイするときに発生する「テーブル mysql.plugin が存在しません」という問題の解決方法

今日、MySQL の無料インストール版をデプロイしたところ、テーブル 'mysql.plug...

WeChatアプレットが複数行テキストのスクロール効果を実現

この記事の例では、WeChatアプレットで複数行のテキストスクロールを実装するための具体的なコードを...

Linux ハードウェア構成コマンドの例

ハードウェア ビュー コマンドシステム # uname -a # カーネル/オペレーティング システ...

Linux で mysql-8.0.20 をインストールするための詳細なチュートリアル

** Linuxにmysql-8.0.20をインストールする**環境の紹介オペレーティングシステム:...

ウェブデザイナーが持つべき7つのスキル

Web デザインは科学であると同時に芸術でもあります。 Web デザイン作業は、半分は適切なプログラ...